Introduktion
Amplitude som verktyg för produktanalys har visat sig vara mycket effektivt tack vare enkel konfiguration av händelser och flexibiliteten i visualiseringar. Det uppstår ofta behov av att sätta upp en egen attribueringsmodell, genomföra användarkluster eller bygga en dashboard i ett annat BI-system. Sådana åtgärder är möjliga endast med rådata om händelser från Amplitude. Detta kommer att diskuteras i denna artikel om hur man får dessa data med minimal programmeringskunskap.
Förutsättning
- Ett projekt i Amplitude där händelser redan är korrekt konfigurerade och statistik samlas in
- Installerad Python (jag arbetar med version 3.8.3), som den potentiella läsaren redan kan hantera åtminstone på grundläggande nivå
Instruktion
Steg 1. Få API-nyckel och hemlig nyckel
För att exportera data måste man först få API-nyckel och hemlig nyckel.
Dessa kan hittas genom att gå följande väg:
- „Hantera data” (finns i det nedre vänstra hörnet av skärmen)
- Välj det projekt som data ska exporteras från och gå till det.
- I den öppnade projektmenyn väljer vi „Projektinställningar”
- Vi hittar raderna API-nyckel och hemlig nyckel, kopierar dem och sparar dem på en säker plats.
Utan att klicka kan man gå direkt till länken som i allmänhet ser ut så här:
analytics.amplitude.com/$$$$$$$ /manage/project/****** /settings,
där $$$$$$ är din organisations inloggning i Amplitude, ****** är projektets nummer
Steg 2. Kontrollera om nödvändiga bibliotek finns
Den goda nyheten är att dessa bibliotek nästan säkert redan är installerade som standard eller har laddats ner, men det är nödvändigt att kontrollera. Den fullständiga listan över de bibliotek jag använder vid tidpunkten för att skriva artikeln (med versioner angivna i parentes där det är relevant):
- requests (2.10.0) - skicka förfrågan via API för att få data
- pandas (1.0.1) - läsa json, skapa dataframe och därefter skriva till fil
- zipfile - extrahera filer från arkivet som erhållits via API
- gzip - packa upp json-filer från .gz
- os - få lista över filer från det extraherade arkivet
- time - valfritt, mäta tiden för skriptets körning
- tqdm - valfritt, för att enkelt följa bearbetningsavancemang
Steg 3. Skriva skript för datainläsning
Tips: Det fullständiga skriptet för inläsning finns i slutet av artikeln, man kan gärna ta det direkt och konsultera steg-för-steg förklaringar vid behov.
Steg 3.1. Importera bibliotek
Vi importerar alla bibliotek som anges i steg två.
# Импорт библиотек
import requests
import pandas as pd
import zipfile
import gzip
import os
import time
import tqdm
from tqdm import tqdm
Steg 3.2. Skicka förfrågan till Amplitude
Vi noterar början av skriptets körning och lagrar det i variabeln a.
startdate och enddate anger perioden för dataladdningen och inkluderas i texten av den skickade förfrågan till server Amplitude. Utöver datum kan man även ange timme genom att ändra värdet efter 'T' i förfrågan.
api_key och secret_key motsvarar värdena som erhölls i steg ett. Av säkerhetsskäl anger jag slumpmässiga sekvenser istället för mina egna.
a = time.time()
# Parametrar för start- och slutdatum
startdate = '20200627'
enddate = '20200628'
api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Skicka förfrågan till Amplitude
response = requests.get('https://amplitude.com/api/2/export?start=' + startdate + 'T0&end=' + enddate + 'T0', auth=(api_key, secret_key))
print('1. Förfrågan skickad')
Steg 3.3. Ladda ner arkivet med data
Vi hittar på ett namn för arkivet och lagrar det i variabeln filename. För min egen bekvämlighet anger jag perioden + jag angiver att detta är Amplitude-data. Sedan sparar vi det mottagna svaret från Amplitude i arkivet.
# Скачивание архива с данными
filename = 'period_since'+startdate+'to'+enddate+'_amplitude_data'
with open(filename + '.zip', "wb") as code:
code.write(response.content)
print('2. Архив с файлами успешно скачан')
Steg 3.4. Extrahera filer i mappen på datorn
Biblioteket zipfile kommer in i bilden och hjälper till att extrahera filerna. Var noga med att ange din egen sökväg i tredje raden, där du helst vill göra extraheringen.
# Извлечение файлов в папку на компьютере
z = zipfile.ZipFile(filename + '.zip', 'r')
z.extractall(path = 'C:\Users\...\'+filename)
print('3. Архив с файлами извлечен и записан в папку ' + filename)
Steg 3.5. Omvandla json
Efter att ha extraherat filerna från arkivet måste json-filerna, som är i .gz-format, konverteras och sparas i en dataframe för vidare arbete.
Jag vill påpeka att man här återigen måste ändra sökvägen till sin egen, istället för 000000 skriva sitt projektidentifikationsnummer från Amplitude (eller öppna manuellt sökvägen där arkivet extraherades och titta på namnet på mappen inuti).
I ordningsföljd:
Spara katalogen i variabeln, hämta filerna från katalogen, skapa en tom dataframe, time.sleep(1) för att korrekt arbeta med tqdm, i cykeln öppna .gz-filer och direkt med hjälp av pandas läsa json och fylla den angivna dataframen.
# Преобразование 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')
Steg 3.6. Spara dataframe i excel
Exporten till excel här är bara som ett exempel. I många fall är det enklare att arbeta med den erhållna dataramen i python eller lagra data i en databas.
Sökvägen för dataladdning måste också ändras till din egen här.
# Записать полученной таблицы в Excel-файл
amplitude_dataframe.to_excel('C:\Users\...\'+filename+'.xlsx',index=False)
print('5. Dataframe успешно записан в файл ' + filename)
Steg 3.7. Mäter skriptets körtid
Spara den aktuella tiden i variabeln b, beräkna skillnaden och antalet minuter, visa totala minuter. Det här är det sista steget.
b = time.time()
diff = b-a
minutes = diff//60
print('Körning av koden tog: {:.0f} minut(er)'.format(minutes))
Slutsats
För att anropa tabellen och börja arbeta med den kan du anropa variabeln amplitude_dataframe, där data har sparats. Den innehåller cirka 50 kolumner, av vilka du i 80 % av fallen kommer att använda: event_type — namnet på evenemanget, event_properties — parametrarna för evenemanget, event_time — tiden för evenemanget, uuid — kundens ID, user_properties — kundens parametrar; det är viktigt att börja arbetet med dessa. När du jämför siffrorna från dina egna beräkningar med mätvärdena från Amplitude-dashboards bör du inte glömma att systemet använder sin egen metodologi för beräkning av unika kunder/trattar etc., och innan dess måste du definitivt bekanta dig med Amplitude-dokumentationen.
Tack för uppmärksamheten! Nu kan du exportera rådata om händelser i Amplitude och fullt ut använda dem i ditt arbete.
Hela skriptet:
# Импорт библиотек
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))
Källa: habr.com
