Získání dat Amplitude prostřednictvím API

Úvod

Amplitude jako nástroj produktové analytiky se osvědčil díky jednoduchému nastavení událostí a flexibilitě vizualizací. Často se objevuje potřeba nastavit vlastní model atribuce, provést klasifikaci uživatelů nebo vytvořit dashboard v jiném BI systému. Takovou manipulaci je možné provést pouze s hrubými daty o událostech z Amplitude. O tom, jak tato data získat s minimálními znalostmi programování, se dozvíte v tomto článku.

Předpoklad

  1. Projekt v Amplitude, ve kterém jsou již správně nastaveny události a shromažďují se k nim statistiky
  2. Nainstalován Python (pracoval jsem s verzí 3.8.3), se kterým by potenciální čtenář měl mít alespoň základní zkušenosti

Návod

Krok 1. Získání API-klíče a secret-klíče

Aby bylo možné exportovat data, je nejprve nutné získat API-klíč a secret-klíč.

Najít je lze přechodem na následující cestu:

  1. „Spravovat data“ (nachází se v dolní levé části obrazovky)
  2. Vyberte potřebný projekt, ze kterého budou data exportována, a přejděte do něj
  3. V otevřeném menu projektu vyberte „Nastavení projektu“
  4. Najděte řádky API-klíče a secret-klíče, zkopírujte je a uložte na bezpečné místo.

Bez nutnosti proklikávání se můžete přejít na odkaz, který v obecné podobě vypadá takto:
analytics.amplitude.com/$$$$$$$/{project_id}​/settings,
kde $$$$$$ — přihlášení vaší organizace v Amplitude, {project_id} — číslo projektu

Krok 2. Ověření přítomnosti potřebných knihoven

Dobrou zprávou je, že tyto knihovny jsou téměř jistě již nainstalovány ve výchozím nastavení nebo staženy, ale je nutné to zkontrolovat. Kompletní seznam knihoven, které používám v době psaní tohoto článku (v závorkách jsou uvedeny verze, kde je to relevantní):

  1. requests (2.10.0) - odeslání požadavku přes API pro získání dat
  2. pandas (1.0.1) - čtení JSON, vytvoření dataframe a následné uložení do souboru
  3. zipfile - extrakce souborů z archivu získaného přes API
  4. gzip - rozbalení JSON souborů z .gz
  5. os - získání seznamu souborů z rozbaleného archivu
  6. time - volitelná, měření doby běhu skriptu
  7. tqdm - volitelná, pro pohodlné sledování průběhu zpracování souborů

Krok 3. Napsání skriptu pro načtení dat

Tip: úplný skript pro načtení naleznete na konci článku, v případě zájmu si ho můžete rovnou vzít a obracet se na krokové vysvětlení v případě potřeby.

Krok 3.1. Import knihoven

Provádíme import všech knihoven uvedených ve druhém kroku.

# Импорт библиотек
import requests
import pandas as pd
import zipfile
import gzip
import os
import time
import tqdm
from tqdm import tqdm

Krok 3.2. Odeslání žádosti do Amplitude

Zaznamenáme začátek provádění skriptu a uložíme do proměnné a.

startdate a enddate určují období pro export dat a vkládají se do textu odeslané žádosti na server Amplitude, kromě data je také možné zadat hodinu, změnou hodnoty po ‚T‘ v žádosti.

api_key a secret_key odpovídají hodnotám získaným v prvním kroku, za účelem bezpečnosti zde uvádím náhodné sekvence místo svých.

a = time.time()
# Parametry počáteční a koncové daty
startdate = '20200627'
enddate = '20200628'

api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Odeslání žádosti do Amplitude
response = requests.get('https://amplitude.com/api/2/export?start=' + startdate + 'T0&end=' + enddate + 'T0', auth = (api_key, secret_key))
print('1. Žádost odeslána')

Krok 3.3. Stahování archivu s daty

Vymyslíme název pro archiv a uložíme do proměnné filename. Pro svou pohodlnost uvádím období + uvádím, že se jedná o data amplitude. Poté ukládáme obdrženou odpověď od Amplitude do archivu.

# Скачивание архива с данными
filename = 'period_since'+startdate+'to'+enddate+'_amplitude_data'
with open(filename + '.zip', "wb") as code:
    code.write(response.content)
print('2. Архив с файлами успешно скачан')  

Krok 3.4. Extrakce souborů do složky na počítači

Do akce vstupuje knihovna zipfile, která pomůže provést extrakci souborů. Ve třetím řádku buďte opatrní a zadejte svou cestu, kam pro vás bude pohodlnější provést extrakci.

# Извлечение файлов в папку на компьютере
z = zipfile.ZipFile(filename + '.zip', 'r')
z.extractall(path = 'C:\Users\...\'+filename)
print('3. Архив с файлами извлечен и записан в папку ' + filename)

Krok 3.5. Transformace json

Po extrakci souborů z archivu je třeba transformovat json soubory, které jsou ve formátu .gz a zapsat je do dataframe pro další práci.

Věnuji pozornost tomu, že zde musíte opět změnit cestu na svou, a místo 000000 napsat své číslo projektu z Amplitude (nebo si ručně otevřít cestu, kam byl archiv extrahován, a podívat se na název složky uvnitř).

Pořadí následnosti:

Zápis adresáře do proměnné, získání seznamu souborů z adresáře, vytvoření prázdného dataframe, time.sleep(1) pro správnou funkci tqdm, uvnitř smyčky otevíráme .gz soubory a ihned pomocí pandas čteme json a plníme zadaný 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 zde pouze jako příklad. V mnoha případech je pohodlnější pracovat se získaným datovým rámcem uvnitř pythonu nebo uložit data do úložiště.

Změnit cestu pro export dat zde budete také muset na svou.

# Записать полученной таблицы в Excel-файл
amplitude_dataframe.to_excel('C:\Users\...\'+filename+'.xlsx',index=False)
print('5. Dataframe успешно записан в файл ' + filename)

Krok 3.7. Měříme čas běhu skriptu

Zapište aktuální čas do proměnné b, výpočet rozdílu a počtu minut, výstup celkových minut. To je poslední krok.

b = time.time()
diff = b-a
minutes = diff//60
print('Doba zpracování kódu trvala: {:.0f} minut(y)'.format(minutes))

Závěr

Tabulku můžete vyvolat a začít s ní pracovat tím, že zavoláte proměnnou amplitude_dataframe, do které byly zapsány údaje. Obsahuje přibližně 50 sloupců, z nichž v 80% případů budete používat: event_type — název události, event_properties — parametry události, event_time — čas události, uuid — id klienta, user_properties — parametry klienta, s nimiž byste měli nejprve začít pracovat. A při porovnávání čísel z vlastních výpočtů s ukazateli z dashboardů Amplitude nezapomeňte, že systém používá svou vlastní metodologii pro výpočet unikátních klientů/funnelů atd., a před tím se určitě seznamte s dokumentací Amplitude.

Děkujeme za pozornost! Nyní můžete exportovat surová data o událostech do Amplitude a plně je využít ve své 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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster