Sissejuhatus
Amplitude tooteanalüüsi tööriist on end hästi tõestanud, pakkudes lihtsat sündmuste seadistamist ja paindlikke visualiseeringuid. Tihti tekib vajadus luua oma atribuuti mudel, klasterdada kasutajaid või koostada armatuurlaud teises BI-süsteemis. Selliste toimingute tegemiseks on vajalik saada Amplitude'i sündmuste toored andmed. Käesolevas artiklis käsitleme, kuidas neid andmeid saada minimaalsete programmeerimisoskustega.
Eeldus
- Projekt Amplitude'is, kus on juba õigesti seadistatud sündmused ja mille kohta kogutakse statistikat
- Paigaldatud python (olen versioonis 3.8.3), millega potentsiaalne lugeja peab olema töötanud vähemalt põhitasemel
Juhend
Samm 1. API-võtme ja saladusvõtme saamine
Andmete eksportimiseks tuleb esmalt saada API-võti ja saladusvõti.
Need leiab järgmise tee kaudu:
- «Manage data» (asub ekraani vasakus alumises osas)
- Valime vajaliku projekti, millest andmeid eksportida, ja liigume sinna
- Avanevas projekti menüüs valime «Project settings»
- Otsime üles API-võtme ja saladusvõtme read, kopeerime ja salvestame need usaldusväärsesse kohta.
Ilma klikkimise võimalus, saate liikuda lingile, mis näeb välja järgmine:
analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
kus $$$$$$ on teie organisatsiooni sisselogimismoodul amplitude, ****** — projekti number
Samm 2. Vajalikest raamatukogudest kontrollimine
Hea uudis on see, et need raamatukogud on tõenäoliselt juba vaikimisi teie süsteemis olemas või allalaaditud, kuid kontrollida tuleb. Täielik nimekiri minu kasutatavatest raamatukogudest artikli kirjutamise ajal (versioonid on sulgudes, kus see kohane):
- requests (2.10.0) - API kaudu andmete pärimise taotlus
- pandas (1.0.1) — json-lugemine, dataframe'i loomine ja hilisem failisse kirjutamine
- zipfile — failide väljavõtmine arhivist, mis saadi API kaudu
- gzip — json-failide dekompressioon .gz
- os — failinimekirja saamine väljavõetud arhivist
- time — valikuline, skripti täitmise aja mõõtmine
- tqdm — valikuline, failide töötlemise edenemise mugav jälgimine
Samm 3. Andmete laadimise skripti kirjutamine
Nipp: täielik laadimisskript asub artikli lõpus, soovi korral võite selle kohe võtta ja vajadusel järgida samm-sammult selgitusi.
Samm 3.1. Raamatukogude importimine
Toodame importi kõikidest raamatukogudest, mis on loetletud teisel sammul.
# Импорт библиотек
import requests
import pandas as pd
import zipfile
import gzip
import os
import time
import tqdm
from tqdm import tqdm
Samm 3.2. Päringu saatmine Amplitude'i
Mõõdame skripti käivitamise algust ja salvestame muutuja a.
startdate ja enddate määravad andmete allalaadimise perioodi ning need sisalduvad saadetud päringu tekstis. server Amplitude'i puhul saab kuupäevade kõrval määrata ka tunni, muutes väärtust pärast 'T' päringus.
api_key ja secret_key vastavad esimeses etapis saadud väärtustele; turvakaalutlustel kasutan siin oma võtmete asemel juhuslikke järjestusi.
a = time.time()
# Algdate ja lõppdate parameetrid
startdate = '20200627'
enddate = '20200628'
api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Päringu saatmine Amplitude'i
response = requests.get('https://amplitude.com/api/2/export?start=' + startdate + 'T0&end=' + enddate + 'T0', auth = (api_key, secret_key))
print('1. Päring saadetud')
Samm 3.3. Andmete allalaadimine arhiiviga
Mõtleme arhiivi nime ja salvestame selle muutujasse filename. Oma mugavuse huvides määran perioodi + märgin, et need on Amplitude'i andmed. Seejärel salvestame Amplitude'ilt saadud vastuse arhiivi.
# Скачивание архива с данными
filename = 'period_since'+startdate+'to'+enddate+'_amplitude_data'
with open(filename + '.zip', "wb") as code:
code.write(response.content)
print('2. Архив с файлами успешно скачан')
Samm 3.4. Failide väljavõtmine arvutis asuvast kaustast
Käiku astub zipfile raamatukogu, mis aitab failide välja tõmbamisel. Kolmandas reas olge ettevaatlik ja määrake oma tee, kuhu on mugav failid välja tõmmata.
# Извлечение файлов в папку на компьютере
z = zipfile.ZipFile(filename + '.zip', 'r')
z.extractall(path = 'C:\Users\...\'+filename)
print('3. Архив с файлами извлечен и записан в папку ' + filename)
Samm 3.5. JSON-i transformeerimine
Pärast failide arhivist välja tõmbamist tuleb .gz vormingus JSON-failid transformeerida ja need andmeraami (dataframe) salvestada edasisteks toiminguteks.
Jälgige, et siinkohal tuleks oma tee uuesti muuta, ja 000000 asendada oma Amplitude projektinumbriga (või avada käsitsi tee, kuhu arhiiv välja tõmmati, ning vaadata kausta nime seest).
Järjekorra järgi:
Salvestame katalooge muutujasse, saame failide nimekirja kataloogist, loome tühja andmeraami, time.sleep(1) tqdm-löögi korrektseks toimimiseks, tsükli sees avame .gz failid ja loeme pandasiga JSON-i ning täidame määratud andmeraami.
# Преобразование 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')
Samm 3.6. Andmeraami salvestamine Excelisse
Excelisse eksportimine on siin lihtsalt näiteks. Paljudes olukordades on mugavam töötada saadud andmeraamiga otse Pythonis või salvestada andmed ladustamisse.
Ka siin tuleb eksporditee muuta vastavaks.
# Записать полученной таблицы в Excel-файл
amplitude_dataframe.to_excel('C:\Users\...\'+filename+'.xlsx',index=False)
print('5. Dataframe успешно записан в файл ' + filename)
Samm 3.7. Loeme skripti tööaega
Praegu aja salvestamine muutuja b, erinevuse ja minutite arvestamine, kokkuvõtte minutite väljaminek. See on viimane etapp.
b = time.time()
diff = b-a
minutes = diff//60
print('Koodi täitmine kestis: {:.0f} minutit(ö)'.format(minutes))
Kokkuvõte
Tabelit saab kutsuda ja sellega töötamise alustada muutuja amplitude_dataframe kaudu, kuhu andmed on salvestatud. Seal on umbes 50 veergu, millest 80% juhtudel kasutate: event_type — sündmuse nimi, event_properties — sündmuse parameetrid, event_time — sündmuse aeg, uuid — kliendi id, user_properties — kliendi parameetrid, nende kasutamisega tasub alustada. Ja omas hankimisest saadud numbrite võrdlemisel Amplitudi juhtpaneelide näitajatega ei tohi unustada, et süsteem kasutab oma unikaalsete klientide/voolude jms arvutamise metoodikat ning enne seda tuleks kindlasti tutvuda Amplitudi dokumentatsiooniga.
Aitäh tähelepanu eest! Nüüd saate eksportida toored andmed sündmusest Amplitudisse ja kasutada neid oma töös.
Kogu 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))
Allikas: habr.com
