Uvod
Amplitude se je kot orodje za produktno analitiko odlično obnesel, zahvaljujoč enostavni nastavitvi dogodkov in prilagodljivosti vizualizacij. Pogosto se pojavi potreba po vzpostavitvi lastnega modela atribucije, izvajanju klasifikacije uporabnikov ali ustvarjanju nadzorne plošče v drugem BI sistemu. Takšno manipulacijo je mogoče izvesti le, če imamo surove podatke o dogodkih iz Amplitude. V tem članku bomo obravnavali, kako te podatke pridobiti z minimalnim znanjem programiranja.
Predpogoj
- Projekt v Amplitude, v katerem so že pravilno nastavljeni dogodki in se statistika zbira nanje.
- Namestitev Pythona (delam z različico 3.8.3), s katerim bi morali potencialni bralci že obvladati osnovno uporabo.
Navodilo
Korak 1. Pridobitev API ključev in secret key
Da bi izvozili podatke, je v prvi vrsti potrebno pridobiti API ključ in secret key.
Najdete jih lahko, če se pomaknete po naslednji poti:
- „Upravljanje podatkov“ (se nahaja v spodnjem levem delu zaslona)
- Izberite želeni projekt, iz katerega bodo izvažani podatki, in se vanj preselite.
- V odpretem meniju projekta izberite „Nastavitve projekta“.
- Poiščite vrstice API ključ in secret key, jih kopirajte in shranite na varnem mestu.
Brez klikanja lahko preidete na povezavo, ki v splošnem videzu izgleda takole:
analytics.amplitude.com/$$$$$$$/manage/project/*******/settings,
kjer $$$$$$$ je vaša organizacijska prijava v Amplitude, ****** je številka projekta.
Korak 2. Preverjanje prisotnosti potrebnih knjižnic
Dobra novica je, da so te knjižnice skoraj zagotovo že nameščene privzeto ali prenesene, a je potrebno preveriti. Popoln seznam knjižnic, ki jih uporabljam ob pisanju članka (v oklepajih so navedene različice, kjer je to primerno):
- requests (2.10.0) - pošiljanje zahtevka prek API za pridobitev podatkov
- pandas (1.0.1) - branje json, ustvarjanje dataframe in naknadno zapis v datoteko
- zipfile - izvlečenje datotek iz arhiva, prejetega prek API
- gzip - razpakiranje json datotek iz .gz
- os - pridobitev seznama datotek iz razpakiranega arhiva
- time - neobvezno, merjenje časa delovanja skripta
- tqdm - neobvezno, za udobno spremljanje napredka obdelave datotek
Korak 3. Pisanje skripta za nalaganje podatkov
Namig: popoln skript za nalaganje je na koncu članka, lahko ga takoj vzamete in se obrnite na postopna pojasnila po potrebi.
Korak 3.1. Uvoz biblioteka
Vrši se uvoz svih biblioteka navedenih u drugom koraku.
# Импорт библиотек
import requests
import pandas as pd
import zipfile
import gzip
import os
import time
import tqdm
from tqdm import tqdm
Korak 3.2. Slanje zahteva na Amplitude
Zabranjujemo početak izvođenja skripte i beležimo u promenljivu a.
startdate i enddate odgovaraju periodu za preuzimanje podataka i ugrađuju se u tekst poslanog zahteva na strežnik Amplitude, pored datuma, moguće je takođe navesti sat, menjajući vrednost nakon 'T' u zahtevu.
api_key i secret_key odgovaraju vrednostima dobijenim u prvom koraku, iz bezbednosnih razloga ovde navodim nasumične sekvence umesto svojih.
a = time.time()
# Parametri početnog i krajnjeg datuma
startdate = '20200627'
enddate = '20200628'
api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Slanje zahteva na Amplitude
response = requests.get('https://amplitude.com/api/2/export?start='+startdate+'T0&end='+enddate+'T0', auth = (api_key, secret_key))
print('1. Zahtev poslat')
Korak 3.3. Preuzimanje arhive sa podacima
Izmišljamo naziv za arhivu i beležimo u promenljivu filename. Radi svoje udobnosti navodim period + navodim da su to podaci iz amplitude. Zatim beležimo dobijeni odgovor od Amplitude u arhivu.
# Скачивание архива с данными
filename = 'period_since'+startdate+'to'+enddate+'_amplitude_data'
with open(filename + '.zip', "wb") as code:
code.write(response.content)
print('2. Архив с файлами успешно скачан')
Korak 3.4. Izdvajanje datoteka u folderu na računaru
U akciju pristiže biblioteka zipfile, koja će pomoći u izdavanju datoteka. U trećem redu budite pažljivi i navedite svoj put, gde vam je pogodnije izvršiti izdvajanje.
# Извлечение файлов в папку на компьютере
z = zipfile.ZipFile(filename + '.zip', 'r')
z.extractall(path = 'C:\Users\...\'+filename)
print('3. Архив с файлами извлечен и записан в папку ' + filename)
Korak 3.5. Pretvaranje json
Nakon izdvajanja datoteka iz arhive potrebno je pretvoriti json datoteke, koje se nalaze u formatu .gz i zapisati ih u dataframe za dalji rad.
Obraćam pažnju na to da ovde treba ponovo promeniti put na svoj, a umesto 000000 napisati svoj broj projekta iz Amplitude (ili otvoriti ručno putanju gde je arhiva izdvojena i pogledati naziv foldera unutra).
Po redosledu:
Zapisi direktorijum u promenljivu, dobijanje liste datoteka iz direktorijuma, kreiranje praznog dataframe-a, time.sleep(1) za ispravnu funkcionalnost tqdm, unutar petlje otvaramo .gz datoteke i odmah uz pomoć pandas čitamo json i punimo zadata 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')
Korak 3.6. Zapis dataframe-a u excel
Izvlačenje u excel ovde je samo kao primer. U mnogim slučajevima je praktičnije raditi sa dobijenim okvirom podataka unutar pytonga ili smestiti podatke u skladište.
Zameniti put za preuzimanje podataka ovde takođe će biti potrebno na svoj.
# Записать полученной таблицы в Excel-файл
amplitude_dataframe.to_excel('C:\Users\...\'+filename+'.xlsx',index=False)
print('5. Dataframe успешно записан в файл ' + filename)
Korak 3.7. Brojimo vreme trajanja skripte
Запisi trenutno čas v spremenljivko b, izračunaj razliko in število minut, izračunaj skupno število minut. To je zadnji korak.
b = time.time()
diff = b-a
minutes = diff//60
print('Izvedba kode je trajala: {:.0f} minut(š)'.format(minutes))
Zaključek
Tabeli lahko dostopate in začnete z njo delati tako, da pokličete spremenljivko amplitude_dataframe, v katero so bila shranjena podatki. Vsebuje približno 50 stolpcev, od katerih jih boste v 80% primerov uporabljali: event_type — naziv dogodka, event_properties — parametri dogodka, event_time — čas dogodka, uuid — id stranke, user_properties — parametri stranke; priporočljivo je, da najprej začnete delati z njimi. Pri primerjavi številk iz svojih izračunov z merili iz nadzornih tabel Amplitude ne pozabite, da sistem uporablja svojo metodologijo za izračun edinstvenih strank / lijakov itd., prej pa se morate obvezno seznaniti z dokumentacijo Amplitude.
Hvala za pozornost! Zdaj lahko izvažate surove podatke o dogodkih v Amplitude in jih popolnoma uporabljate v svojem delu.
Celoten 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))
Izvor: habr.com
