Introduktion
Amplitude som et værktøj til produktanalyse har bevist sin værdi takket være den enkle opsætning af events og fleksibiliteten i visualiseringerne. Ofte opstår der behov for at etablere sin egen attributionsmodel, udføre clustering af brugere eller opbygge et dashboard i et andet BI-system. Dette kan kun lade sig gøre, hvis man har rådata om events fra Amplitude. Hvordan man får disse data med minimale programmeringskundskaber — det vil blive beskrevet i denne artikel.
Forudsætning
- Et projekt i Amplitude, hvor events allerede er korrekt opsat, og der indsamles statistik om dem
- Python er installeret (jeg arbejder med version 3.8.3), og den potentielle læser bør allerede have et grundlæggende kendskab til at bruge det
Brugsanvisning
Trin 1. Få API-key og secret-key
For at eksportere data skal man først have API-key og secret-key.
De kan findes ved at følge denne vej:
- «Manage data» (ligger i nederste venstre hjørne af skærmen)
- Vælg det relevante projekt, hvorfra dataene skal eksporteres, og gå ind i det
- I den åbnede projektmenu vælger du «Project settings»
- Vi finder linjerne API-key og secret-key, kopierer dem og gemmer dem et sikkert sted.
Uden at klikke kan man gå til følgende link, som generelt ser sådan ud:
analytics.amplitude.com/$$$$$$$/manage/project/*******/settings,
hvor $$$$$$$$ er din organisations login til Amplitude, ****** er projekt nummeret.
Trin 2. Tjek for nødvendige biblioteker
Den gode nyhed er, at disse biblioteker sandsynligvis allerede er installeret som standard eller downloadet, men det er nødvendigt at tjekke. Den fulde liste over de biblioteker, jeg bruger på tidspunktet for skrivning af denne artikel (med versioner anført i parentes, hvor relevant):
- requests (2.10.0) - sender forespørgsel via api for at få data
- pandas (1.0.1) - læser json, opretter dataframe og gemmer det i fil
- zipfile - udtrækker filer fra arkivet, der er modtaget via API
- gzip - udpakkede json-filer fra .gz
- os - får listen over filer fra det udpakkede arkiv
- time - valgfri, måler scriptets kørselstid
- tqdm - valgfri, for at følge med i behandlingen af filer
Trin 3. Skrive skripet til dataloading
Hint: det fulde dataloading-script findes i slutningen af artiklen, og hvis man ønsker, kan man tage det med det samme og henvise til trinvise forklaringer ved behov.
Trin 3.1. Importere biblioteker
Vi importerer alle biblioteker, der er nævnt i trin to.
# Импорт библиотек
import requests
import pandas as pd
import zipfile
import gzip
import os
import time
import tqdm
from tqdm import tqdm
Trin 3.2. Afsendelse af anmodning til Amplitude
Vi registrerer begyndelsen af scriptets udførelse og gemmer det i variablen a.
startdate og enddate angiver perioden for dataudtrækningen og indgår i teksten i den afsendte anmodning til server Amplitude, ud over datoen kan man også angive time ved at ændre værdien efter 'T' i anmodningen.
api_key og secret_key svarer til de værdier, der er fået i første trin, af sikkerhedsmæssige årsager angiver jeg her tilfældige sekvenser i stedet for mine egne.
a = time.time()
# Parametre for start- og slutdato
startdate = '20200627'
enddate = '20200628'
api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Afsendelse af anmodning til Amplitude
response = requests.get('https://amplitude.com/api/2/export?start=' + startdate + 'T0&end=' + enddate + 'T0', auth = (api_key, secret_key))
print('1. Anmodning sendt')
Trin 3.3. Download af arkiv med data
Vi finder et navn til arkivet og gemmer det i variablen filename. For min egen bekvemmelighed angiver jeg perioden + nævner, at det er data fra amplitude. Derefter gemmer vi det modtagne svar fra Amplitude i arkivet.
# Скачивание архива с данными
filename = 'period_since'+startdate+'to'+enddate+'_amplitude_data'
with open(filename + '.zip', "wb") as code:
code.write(response.content)
print('2. Архив с файлами успешно скачан')
Trin 3.4. Udpakning af filer i en mappe på computeren
Her kommer zipfile biblioteket i spil, som vil hjælpe med udpakningen af filer. Vær opmærksom i den tredje linje og angiv din sti, hvor det er nemmest for dig at udføre udpakningen.
# Извлечение файлов в папку на компьютере
z = zipfile.ZipFile(filename + '.zip', 'r')
z.extractall(path = 'C:\Users\...\'+filename)
print('3. Архив с файлами извлечен и записан в папку ' + filename)
Trin 3.5. Omformaterer json
Efter udpakningen af filerne fra arkivet skal json-filerne, der er i .gz-format, omformes og gemmes i en dataframe til videre behandling.
Jeg gør opmærksom på, at du her igen skal ændre stien til din egen, og i stedet for 000000 skrive dit projekt nummer fra Amplitude (eller åbne stien, hvor arkivet blev udpakket, og se navnet på mappen indeni).
I rækkefølge:
Gemmer direktoret i en variabel, får listen over filer fra direktoret, opretter en tom dataframe, time.sleep(1) for korrekt funktion af tqdm, indeni cyklen åbner vi .gz-filer og læser straks json med pandas og fylder den angivne 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')
Trin 3.6. Gemmer dataframe i excel
Udtrækning til excel her er blot som eksempel. I mange tilfælde er det lettere at arbejde med den resulterende data ramme inden i python eller lagre dataene i et lager.
Du skal også ændre stien for dataudtrækningen til din egen her.
# Записать полученной таблицы в Excel-файл
amplitude_dataframe.to_excel('C:\Users\...\'+filename+'.xlsx',index=False)
print('5. Dataframe успешно записан в файл ' + filename)
Trin 3.7. Vi måler skriftens kørselstid
Gemmer den aktuelle tid i variablen b, beregner forskellen og antallet af minutter, viser det totale antal minutter. Dette er det sidste trin.
b = time.time()
diff = b-a
minutes = diff//60
print('Kørsel af koden tog: {:.0f} minut(er)'.format(minutes))
Konklusion
For at kalde tabellen og begynde at arbejde med den, kan du kalde variablen amplitude_dataframe, hvor dataene er gemt. Den vil have omkring 50 kolonner, hvoraf du i 80% af tilfældene vil bruge: event_type — navnet på eventet, event_properties — parametrene for eventet, event_time — tidspunktet for eventet, uuid — kunde-id'et, user_properties — kundens parametre, så det er bedst at starte arbejdet med dem. Og når du sammenligner tal fra dine egne beregninger med indikatorer fra Amplitude dashboards, skal man huske, at systemet anvender sin egen metodologi til beregning af unikke kunder/tragter osv., og før dette er det vigtigt at sætte sig ind i Amplitude's dokumentation.
Tak for opmærksomheden! Nu kan du eksportere rådata om begivenheder til Amplitude og bruge dem effektivt i dit arbejde.
Hele scriptet:
# Импорт библиотек
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))
Kilde: habr.com
