Dobivanje podataka Amplitude putem API-ja

Uvod

Amplitude kao alat za analizu proizvoda pokazao se vrlo korisnim zahvaljujući jednostavnoj postavci događaja i fleksibilnosti vizualizacija. Često se javlja potreba za uspostavom vlastitog modela atribucije, provođenjem klasteriranja korisnika ili izradom kontrolne ploče u drugom BI sustavu. Takvu akciju moguće je izvesti samo ako imamo sirove podatke o događajima iz Amplitude. O tome kako dobiti te podatke s minimalnim znanjem programiranja — bit će riječi u ovom članku.

Preduvjet

  1. Projekt u Amplitude, u kojem su događaji već ispravno postavljeni i prikuplja se statistika
  2. Instaliran Python (radim s verzijom 3.8.3), s kojim potencijalni čitatelj već zna raditi barem na osnovnoj razini

Upute

Korak 1. Dobivanje API-ključa i secret-keya

Da bismo preuzeli podatke, prije svega potrebno je dobiti API-ključ i secret-key.

Mogu se pronaći odlaskom putem sljedeće putanje:

  1. „Upravljanje podacima“ (nalazi se u donjem lijevom kutu ekrana)
  2. Biramo potreban projekt iz kojeg će se podaci preuzeti i odlazimo na njega
  3. U otvorenom izborniku projekta odabiremo „Postavke projekta“
  4. Nalazimo retke API-ključa i secret-keya, kopiramo ih i čuvamo na sigurnom mjestu.

Može se otići na poveznicu bez klikanja, koja u općem obliku izgleda ovako:
analytics.amplitude.com/$$$$$$$/manage/project/*******/settings,
gdje $$$$$$$ — prijavni podaci vaše organizacije na amplitude, ****** — broj projekta

Korak 2. Provjera postojanja potrebnih biblioteka

Dobra vijest je da su ove biblioteke gotovo sigurno već instalirane prema zadanim postavkama ili preuzete, no potrebno ih je provjeriti. Potpuni popis biblioteka koje koristim u trenutku pisanja članka (u zagradama su navedene verzije, gdje je to primjereno):

  1. requests (2.10.0) - slanje zahtjeva preko API-ja za dobivanje podataka
  2. pandas (1.0.1) - čitanje json-a, stvaranje dataframe-a i kasnije zapisivanje u datoteku
  3. zipfile - izdvajanje datoteka iz arhiva dobivenog putem API-ja
  4. gzip - raspakivanje json datoteka iz .gz
  5. os - dobivanje popisa datoteka iz raspakiranog arhiva
  6. time - opcionalno, mjerenje vremena izvođenja skripte
  7. tqdm - opcionalno, za lakše praćenje napretka obrade datoteka

Korak 3. Pisanje skripte za učitavanje podataka

Savjet: potpuna skripta za učitavanje nalazi se na kraju članka, po želji je možete odmah preuzeti i obratiti se korak-po-korak objašnjenjima kada je to potrebno.

Korak 3.1. Uvoz biblioteka

Uvozimo sve biblioteke navedene 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 zahtjeva u Amplitude

Zabilježit ćemo početak izvođenja skripte i zapisati u varijablu a.

startdate i enddate predstavljaju period za izvođenje podataka i ugrađuju se u tekst poslanog zahtjeva na server Amplitude, osim datuma, također možete navesti sat mijenjajući vrijednost nakon 'T' u zahtjevu.

api_key i secret_key odgovaraju vrijednostima dobivenim u prvom koraku, u svrhu sigurnosti ovdje navodim nasumične nizove umjesto svojih.

a = time.time()
# Parametri početnog i krajnjeg datuma
startdate = '20200627'
enddate = '20200628'

api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Slanje zahtjeva u Amplitude
response = requests.get('https://amplitude.com/api/2/export?start='+startdate+'T0&end='+enddate+'T0', auth = (api_key, secret_key))
print('1. Zahtjev poslan')

Korak 3.3. Preuzimanje arhive s podacima

Smislimo naziv za arhivu i zapisujemo u varijablu filename. Za vlastitu udobnost navodim period + navodim da su to podaci amplitude. Zatim zapisujemo dobiveni 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. Istraga datoteka u mapi na računalu

U igru ulazi biblioteka zipfile koja će pomoći u izlasku datoteka. U trećem retku budite pažljivi i navedite svoj put, gdje vam je zgodnije izvršiti raspakiravanje.

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

Korak 3.5. Pretvaranje json

Nakon raspakiravanja datoteka iz arhive treba pretvoriti json datoteke, koje su u formatu .gz i zapisati ih u dataframe za daljnji rad.

Obraćam pažnju na to da ovdje ponovno treba promijeniti put na svoj, a umjesto 000000 napisati svoj broj projekta iz Amplitude (ili ručno otvoriti put gdje je arhiva raspakirana i pogledati naziv mape unutar).

Po redoslijedu:

Zapisivanje direktorija u varijablu, dobivanje popisa datoteka iz direktorija, stvaranje praznog dataframea, time.sleep(1) za pravilno funkcioniranje tqdm, unutar petlje otvaramo .gz datoteke i odmah s pomoću pandas čitamo json i punimo zadani 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. Zapisivanje dataframea u excel

Izvoz u excel ovdje je samo kao primjer. U mnogim slučajevima praktičnije je raditi s dobivenim dataframeom unutar python-a ili pohraniti podatke u skladište.

Također će biti potrebno promijeniti put izvoza podataka ovdje na svoj.

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

Korak 3.7. Mjerimo vrijeme izvođenja skripte

Zapisivanje trenutnog vremena u varijablu b, izračun razlike i broja minuta, ispis ukupnog minuta. To je zadnji korak.

b = time.time()
diff = b-a
minutes = diff//60
print('Izvršavanje koda trajalo je: {:.0f} minuta(e)'.format(minutes))

Zaključak

Pozivanje tablice i rad s njom moguće je kroz varijablu amplitude_dataframe, u koju su uneseni podaci. U njoj će biti otprilike 50 stupaca, od kojih ćete u 80% slučajeva koristiti: event_type — naziv događaja, event_properties — parametri događaja, event_time — vrijeme događaja, uuid — id klijenta, user_properties — parametri klijenta, s tim da je najbolje prvo raditi s njima. I pri usporedbi brojki iz vlastitih izračuna s pokazateljima iz Amplitude nadzorne ploče, ne smijete zaboraviti da sustav koristi vlastitu metodologiju za izračun jedinstvenih klijenata/ljestvica itd., i prije toga obavezno se upoznajte s dokumentacijom Amplitude.

Hvala na pažnji! Sada možete preuzeti sirove podatke o događajima u Amplitude i u potpunosti ih iskoristiti u svom radu.

Cijeli 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

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster