Úvod
Amplitude ako nástroj produktovej analytiky si získal veľmi dobré renomé vďaka jednoduchej konfigurácii udalostí a flexibilite vizualizácií. Často vzniká potreba nastaviť si vlastný atribučný model, vykonať klasifikáciu používateľov alebo vytvoriť dashboard v inej BI-systéme. Takúto manipuláciu je možné realizovať iba s access dátami o udalostiach z Amplitude. O tom, ako získať tieto dáta s minimálnymi znalosťami programovania, sa dozviete v tomto článku.
Predpoklad
- Projekt v Amplitude, kde sú už správne nastavené udalosti a zbiera sa štatistika
- Nainštalovaný python (pracujem s verziou 3.8.3), s ktorým potenciálny čitateľ už vie pracovať aspoň na základnej úrovni
Návod
Krok 1. Získanie API kľúča a secret key
Aby ste mohli exportovať dáta, najprv je potrebné získať API kľúč a secret key.
Nájdete ich prechodom po nasledujúcej ceste:
- „Spravovať dáta“ (nachádza sa v ľavej dolnej časti obrazovky)
- Vyberáme potrebný projekt, z ktorého sa budú exportovať dáta, a prejdeme doň
- V otvorenom menu projektu vyberáme „Nastavenia projektu“
- Nájdeme riadky API kľúč a secret key, skopírujeme a uchováme ich na bezpečnom mieste.
Bez presúvania sa môžete prejsť na odkaz, ktorý v celkovom znení vyzerá takto:
analytics.amplitude.com/$$$$$$$/manage/project/*******/settings,
kde $$$$$$$ — prihlasovacie meno vašej organizácie v Amplitude, ****** — číslo projektu
Krok 2. Kontrola prítomnosti potrebných knižníc
Dobrá správa je, že tieto knižnice máte takmer určite už nainštalované predvolene alebo stiahnuté, ale je potrebné to skontrolovať. Úplný zoznam knižníc, ktoré používam v čase písania článku (v zátvorkách sú uvedené verzie, kde je to relevantné):
- requests (2.10.0) - odoslanie požiadavky cez api na získanie dát
- pandas (1.0.1) — čítanie json, vytvorenie dataframe a následne zápis do súboru
- zipfile — extrahovanie súborov z archívu, získaného cez API
- gzip — dekompresia json súborov z .gz
- os — získanie zoznamu súborov z rozbaleného archívu
- time — voliteľné, meranie času behu skriptu
- tqdm — voliteľné, pre pohodlné sledovanie postupu spracovania súborov
Krok 3. Napísanie skriptu na načítanie dát
Tip: Kompletný skript na načítanie sa nachádza na konci článku, a ak máte záujem, môžete si ho rovno vziať a obrátiť sa na postupné vysvetlenia v prípade potreby.
Krok 3.1. Importovanie knižníc
Vyrábame import všetkých knižníc uvedených v druhom kroku.
# Импорт библиотек
import requests
import pandas as pd
import zipfile
import gzip
import os
import time
import tqdm
from tqdm import tqdm
Krok 3.2. Odoslanie požiadavky do Amplitude
Zaznamenáme začiatok vykonávania skriptu a uložíme ho do premennej a.
startdate a enddate určujú obdobie na exportovanie dát a sú zakomponované do textu odoslanej požiadavky na server Amplitude, okrem dátumu je možné tiež uviesť hodinu, zmenou hodnoty za ‘T’ v požiadavke.
api_key a secret_key zodpovedajú hodnotám získaným v prvom kroku, kvôli bezpečnosti tu uvádzam náhodné sekvencie namiesto svojich.
a = time.time()
# Parametre počiatočnej a konečnej dátum
startdate = '20200627'
enddate = '20200628'
api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Odoslanie požiadavky do Amplitude
response = requests.get('https://amplitude.com/api/2/export?start=' + startdate + 'T0&end=' + enddate + 'T0', auth=(api_key, secret_key))
print('1. Požiadavka odoslaná')
Krok 3.3. Stiahnutie archívu s údajmi
Vymyslíme názov archívu a uložíme ho do premennej filename. Pre svoju pohodlnosť uvádzam obdobie + uvádzam, že sú to údaje z Amplitude. Potom ukladáme získanú odpoveď od Amplitude do archívu.
# Скачивание архива с данными
filename = 'period_since'+startdate+'to'+enddate+'_amplitude_data'
with open(filename + '.zip', "wb") as code:
code.write(response.content)
print('2. Архив с файлами успешно скачан')
Krok 3.4. Extrakcia súborov do priečinka na počítači
Do akcie vstupuje knižnica zipfile, ktorá pomôže uskutočniť extrakciu súborov. V treťom riadku buďte pozorní a zadajte svoju cestu, kam je pre vás pohodlnejšie uskutočniť extrakciu.
# Извлечение файлов в папку на компьютере
z = zipfile.ZipFile(filename + '.zip', 'r')
z.extractall(path = 'C:\Users\...\'+filename)
print('3. Архив с файлами извлечен и записан в папку ' + filename)
Krok 3.5. Transformácia json
Po extrakcii súborov z archívu je potrebné transformovať json súbory, ktoré sú vo formáte .gz a zapísať ich do dataframe pre ďalšiu prácu.
Upozorňujem, že tu treba opäť zmeniť cestu na svoju, a namiesto 000000 zadať svoje číslo projektu z Amplitude (alebo ručne otvoriť cestu, kde bol archív extrahovaný a pozrieť sa na názov priečinka vo vnútri).
Podľa poradovníka:
Zápis adresára do premennej, získanie zoznamu súborov z adresára, vytvorenie prázdneho dataframe, time.sleep(1) pre správnu funkciu tqdm, vo vnútri cyklu otvárame .gz súbory a okamžite pomocou pandas čítame json a napĺňame daný dataframe.
# Преобразование json к обычному табличному формату
directory = 'C:\Users\...\'+filename+'\000000'
files = os.listdir(directory)
amplitude_dataframe = pd.DataFrame()
print('Прогресс обработки файлов:')
time.sleep(1)
for i in tqdm(files):
with gzip.open(directory + '\' + i) as f:
add = pd.read_json(f, lines = 'True')
amplitude_dataframe = pd.concat([amplitude_dataframe, add])
time.sleep(1)
print('4. JSON файлы из архива успешно преобразованы и записаны в dataframe')
Krok 3.6. Zápis dataframe do excelu
Export do excelu je tu len ako príklad. V mnohých prípadoch je pohodlnejšie pracovať s získaným rámcom údajov priamo v Pythone alebo uložiť údaje do úložiska.
Zmeniť cestu exportu údajov tu tiež bude nutné na svoju.
# Записать полученной таблицы в Excel-файл
amplitude_dataframe.to_excel('C:\Users\...\'+filename+'.xlsx',index=False)
print('5. Dataframe успешно записан в файл ' + filename)
Krok 3.7. Počítame čas bežania skriptu
Zápis aktuálneho času do premennej b, výpočet rozdielu a počtu minút, výstup celkových minút. Toto je posledný krok.
b = time.time()
diff = b-a
minutes = diff//60
print('Vykonanie kódu trvalo: {:.0f} minút(y)'.format(minutes))
Záver
Tabuľku môžete vyvolať a začať s ňou pracovať vyvolaním premennej amplitude_dataframe, do ktorej boli zapísané dáta. Obsahovať bude približne 50 stĺpcov, z ktorých v 80% prípadov budete používať: event_type — názov udalosti, event_properties — parametre udalosti, event_time — čas udalosti, uuid — ID klienta, user_properties — parametre klienta; s nimi sa odporúča začať pracovať predovšetkým. A pri porovnávaní čísel z vlastných výpočtov s ukazovateľmi z dashboardov Amplitude nesmiete zabudnúť, že systém používa vlastnú metodológiu výpočtu unikátnych klientov/lievikov atď., a predtým si musíte nevyhnutne prečítať dokumentáciu Amplitude.
Ďakujeme za pozornosť! Teraz môžete exportovať surové údaje o udalostiach do Amplitude a plnohodnotne ich využívať vo svojej práci.
Celý skript:
# Импорт библиотек
import requests
import pandas as pd
import zipfile
import gzip
import os
import time
import tqdm
from tqdm import tqdm
a = time.time()
# Параметры начальной и конечной даты
startdate = '20200627'
enddate = '20200628'
api_key = 'd988fddd7cfc0a8a'
secret_key = 'da05cf1aeb3a361a61'
# Отправление запроса в Amplitude
response = requests.get('https://amplitude.com/api/2/export?start='+startdate+'T0&end='+enddate+'T0', auth = (api_key, secret_key))
print('1. Запрос отправлен')
# Скачивание архива с данными
filename = 'period_since'+startdate+'to'+enddate+'_amplitude_data'
with open(filename + '.zip', "wb") as code:
code.write(response.content)
print('2. Архив с файлами успешно скачан')
# Извлечение файлов в папку на компьютере
z = zipfile.ZipFile(filename + '.zip', 'r')
z.extractall(path = 'C:\Users\...\'+filename)
print('3. Архив с файлами извлечен и записан в папку ' + filename)
# Преобразование json к обычному табличному формату
directory = 'C:\Users\...\'+filename+'\000000'
files = os.listdir(directory)
amplitude_dataframe = pd.DataFrame()
print('Прогресс обработки файлов:')
time.sleep(1)
for i in tqdm(files):
with gzip.open(directory + '\' + i) as f:
add = pd.read_json(f, lines = 'True')
amplitude_dataframe = pd.concat([amplitude_dataframe, add])
time.sleep(1)
print('4. JSON файлы из архива успешно преобразованы и записаны в dataframe')
# Записать полученной таблицы в Excel-файл
amplitude_dataframe.to_excel('C:\Users\...\'+filename+'.xlsx',index=False)
print('5. Dataframe успешно записан в файл ' + filename)
b = time.time()
diff = b-a
minutes = diff//60
print('Выполнение кода заняло: {:.0f} минут(ы)'.format( minutes))
Zdroj: habr.com
