Innhenting av Amplitude-data via API

Innledning

Amplitude har vist seg som et effektivt verktøy for produktanalyse takket være enkel oppsett av hendelser og fleksible visualiseringer. Det oppstår ofte behov for å etablere en egen attribusjonsmodell, utføre brukerklustering eller bygge et dashbord i et annet BI-system. For å utføre slike oppgaver må man ha rådata om hendelsene fra Amplitude. Denne artikkelen vil forklare hvordan man kan hente disse dataene med minimale programmeringskunnskaper.

Forutsetning

  1. Et prosjekt i Amplitude der hendelsene allerede er korrekt konfigurert, og hvor statistikk samles inn
  2. Python installert (jeg arbeider med versjon 3.8.3), som den potensielle leseren bør kunne bruke på minst et grunnleggende nivå

Bruksanvisning

Trinn 1. Henting av API-nøkkel og secret-nøkkel

For å eksportere data må man først skaffe seg en API-nøkkel og en secret-nøkkel.

Disse kan finnes ved å følge denne stien:

  1. «Manage data» (finnes nederst til venstre på skjermen)
  2. Velg prosjektet du vil eksportere data fra, og gå inn på det
  3. I det åpne prosjektmenyen velger du «Project settings»
  4. Finn API-nøkkelen og secret-nøkkelen, kopier dem og oppbevar dem på et sikkert sted.

Uten å måtte navigere kan du gå direkte til lenken som generelt ser slik ut:
analytics.amplitude.com/$$$$$$$/manage/project/*******/settings,
der $$$$$$$ er organisasjonsnavnet ditt i Amplitude, ****** er prosjekt nummeret

Trinn 2. Sjekk for nødvendige biblioteker

Den gode nyheten er at disse bibliotekene nesten helt sikkert allerede er installert som standard eller lastet ned, men det er nødvendig å sjekke. Den fullstendige listen over biblioteker jeg bruker på tidspunktet for skrivingen av artikkelen (versjoner nevnt der det er relevant):

  1. requests (2.10.0) - sende forespørsel via API for å hente data
  2. pandas (1.0.1) - lese json, lage dataframe og deretter skrive til fil
  3. zipfile - pakke ut filer fra arkivet hentet via API
  4. gzip - pakke ut json-filer fra .gz
  5. os - hente liste over filer fra det utpakkede arkivet
  6. time - valgfritt, måling av skriptets kjøringstid
  7. tqdm - valgfritt, for bedre overvåking av prosessen med filbehandling

Trinn 3. Skrive skripet for datainnhenting

Hint: Den fullstendige datainnhentingsskripten finnes på slutten av artikkelen, og om ønskelig kan du ta den med en gang og henvise til trinnvise forklaringer ved behov.

Trinn 3.1. Importere biblioteker

Vi importerer alle bibliotekene som er oppført i det andre steget.

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

Steg 3.2. Send forespørsel til Amplitude

Vi registrerer starten av skriptkjøringen og lagrer det i variabelen a.

startdate og enddate angir perioden for datakildene, og de integreres i teksten av den sendte forespørselen til server Amplitude. I tillegg til dato kan man også spesifisere time ved å endre verdien etter 'T' i forespørselen.

api_key og secret_key tilsvarer verdiene mottatt i første steg, for sikkerhetens skyld angir jeg tilfeldige sekvenser i stedet for mine egne.

a = time.time()
# Parametere for start- og sluttdato
startdate = '20200627'
enddate = '20200628'

api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Send forespørsel til Amplitude
response = requests.get('https://amplitude.com/api/2/export?start=' + startdate + 'T0&end=' + enddate + 'T0', auth=(api_key, secret_key))
print('1. Forespørsel sendt')

Steg 3.3. Last ned arkivet med data

Vi finner på et navn for arkivet og lagrer det i variabelen filename. For min egen bekvemmelighet angir jeg perioden + at dette er Amplitude-data. Deretter lagrer vi det mottatte svaret 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. Архив с файлами успешно скачан')  

Steg 3.4. Utdrag av filer i mappen på datamaskinen

Biblioteket zipfile kommer inn i bildet, som vil hjelpe med å utføre filuttrekking. Vær oppmerksom på den tredje linjen og skriv inn din egen bane der det er praktisk for deg å utføre utdraget.

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

Steg 3.5. Konvertering av json

Etter å ha trukket ut filene fra arkivet, må json-filene som er i .gz-format konverteres og lagres i dataframe for videre arbeid.

Vær oppmerksom på at du her igjen må endre stien til din egen, og i stedet for 000000 skrive ditt prosjektnummer fra Amplitude (eller åpne banen der arkivet ble trukket ut manuelt og sjekke navnet på mappen innvendig).

I rekkefølge:

Lagring av katalogen i en variabel, henting av filene i katalogen, oppretting av en tom dataframe, time.sleep(1) for korrekt fungering av tqdm, inne i løkken åpner vi .gz-filer og leser umiddelbart json med pandas og fyller den angitte 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. Lagring av dataframe i excel

Eksport til excel er her bare som et eksempel. I mange tilfeller er det enklere å jobbe med den mottatte dataframen inne i python eller lagre dataene i et lager.

Stien for datalagring må også endres til din egen her.

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

Steg 3.7. Beregn skriptets kjøretid

Lagring av nåværende tid i variabelen b, beregning av forskjellen og antall minutter, utskrift av totale minutter. Dette er det siste steget.

b = time.time()
diff = b-a
minutes = diff//60
print('Kjøring av koden tok: {:.0f} minutt(er)'.format(minutes))

Konklusjon

For å kalle opp tabellen og begynne å arbeide med den, kan du bruke variabelen amplitude_dataframe, hvor dataene er lagret. Den inneholder omtrent 50 kolonner, av hvilke du i 80 % av tilfellene vil bruke: event_type — navnet på eventet, event_properties — parametrene for eventet, event_time — tiden for eventet, uuid — kunde-id, user_properties — kundeparametre, så det er best å begynne arbeidet med dem først. Når du sammenligner tallene fra dine egne beregninger med tallene fra Amplitude-dashbordene, må du ikke glemme at systemet bruker sin egen metode for beregning av unike kunder/trakter osv., og før dette er det viktig å sette seg inn i Amplitudes dokumentasjon.

Takk for oppmerksomheten! Nå kan du eksportere rådataene om hendelser til Amplitude og bruke dem fullt ut i arbeidet ditt.

Hele 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))

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster