Henter amplitudedata via API

Innledning

Amplitude har vist seg veldig godt som et produktanalyseverktøy på grunn av dets enkle hendelsesoppsett og visualiseringsfleksibilitet. Og ofte er det behov for å sette opp din egen attribusjonsmodell, klynge brukere eller bygge et dashbord i et annet BI-system. Det er kun mulig å utføre en slik svindel med rå hendelsesdata fra Amplitude. Denne artikkelen vil fortelle deg hvordan du får tak i disse dataene med minimal programmeringskunnskap.

Forutsetninger

  1. Et prosjekt i Amplitude der hendelser allerede er riktig konfigurert og det samles inn statistikk over dem
  2. Python er installert (jeg jobber i versjon 3.8.3), som den potensielle leseren allerede kan jobbe med i det minste på et grunnleggende nivå

Instruksjon

Trinn 1. Innhenting av API-nøkkel og hemmelig nøkkel

For å laste opp data må du først anskaffe en API-nøkkel og hemmelig nøkkel.

Du kan finne dem ved å følge følgende sti:

  1. "Administrer data" (plassert nederst til venstre på skjermen)
  2. Velg ønsket prosjekt som data skal lastes ned fra og gå til det
  3. I prosjektmenyen som åpnes, velg "Prosjektinnstillinger"
  4. Vi finner API-nøkkel- og hemmelignøkkelstrengene, kopierer og lagrer dem på et trygt sted.

Uten å klikke kan du følge lenken, som generelt ser slik ut:
analytics.amplitude.com/$$$$$$$/manage/project/********/settings,
der $$$$$$ er organisasjonens amplitudepålogging, ****** er prosjektnummeret

Trinn 2: Kontrollere tilstedeværelsen av de nødvendige bibliotekene

Den gode nyheten er at du nesten helt sikkert allerede har disse bibliotekene installert som standard eller lastet ned, men du må sjekke. Den komplette listen over biblioteker jeg brukte i skrivende stund (versjoner i parentes er angitt der det er relevant):

  1. forespørsler (2.10.0) - sender en forespørsel via api for å motta data
  2. pandas (1.0.1) - les json, lage en dataramme og deretter skrive til en fil
  3. zipfil - pakk ut filer fra et arkiv mottatt via API
  4. gzip - pakker ut json-filer fra .gz
  5. os - får en liste over filer fra et utpakket arkiv
  6. tid – valgfritt, mål skriptets kjøretid
  7. tqdm - valgfritt, for enkel overvåking av filbehandlingsfremdriften

Trinn 3. Skrive et datainnlastingsskript

Hint: det fullstendige nedlastingsskriptet er på slutten av artikkelen; hvis du ønsker det, kan du umiddelbart ta det og se trinnvise forklaringer om nødvendig.

Trinn 3.1. Importerer biblioteker

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

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

Trinn 3.2. Sender inn en forespørsel til Amplitude

La oss oppdage starten på skriptkjøring og skrive den til variabel a.

startdato og sluttdato er ansvarlig for perioden for nedlasting av data og er innebygd i teksten til den sendte forespørselen til Amplitude-serveren; i tillegg til datoen kan du også spesifisere timen ved å endre verdien etter 'T' i forespørselen.

api_key og secret_key tilsvarer verdiene som ble oppnådd i det første trinnet; av sikkerhetsgrunner spesifiserer jeg tilfeldige sekvenser her i stedet for min egen.

a = time.time()
# Параметры начальной и конечной даты
startdate = '20200627'
enddate = '20200628'

api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Отправление запроса в Amplitude
response = requests.get('https://amplitude.com/api/2/export?start='+startdate+'T0&end='+enddate+'T0', auth = (api_key, secret_key))
print('1. Запрос отправлен')

Trinn 3.3. Laster ned et arkiv med data

Vi kommer opp med et navn for arkivet og skriver det til filnavnvariabelen. For enkelhets skyld angir jeg perioden + indikerer at dette er amplitudedata. Deretter registrerer 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. Архив с файлами успешно скачан')  

Trinn 3.4. Henter filer fra en mappe på datamaskinen

Zipfilbiblioteket kommer i bruk for å hjelpe med å pakke ut filer. I den tredje linjen, vær forsiktig og skriv ned veien der det er mer praktisk for deg å trekke ut.

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

Trinn 3.5. json-konvertering

Etter å ha trukket ut filene fra arkivet, må du konvertere json-filer i .gz-format og skrive dem inn i en dataramme for videre arbeid.

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

I rekkefølge:

Skrive en katalog til en variabel, hente en liste over filer fra en katalog, lage en tom dataramme, time.sleep(1) for at tqdm skal fungere riktig, inne i loopen åpner vi .gz-filer og bruker umiddelbart pandaer til å lese json og fylle den gitte datarammen.

# Преобразование json к обычному табличному формату
directory = 'C:\Users\...\'+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')
0000' 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')

Trinn 3.6. Skriver dataramme i excel

Opplastingen til excel er bare et eksempel her. I mange tilfeller er det mer praktisk å jobbe med den resulterende datarammen inne i python eller lagre dataene.

Du må også erstatte dataopplastingsbanen her med din egen.

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

Trinn 3.7. Vi teller kjøretiden til manuset

Registrerer gjeldende tid i variabelen b, beregner differansen og antall minutter, viser det totale antallet minutter. Dette er det siste trinnet.

b = time.time()
diff = b-a
minutes = diff//60
print('Выполнение кода заняло: {:.0f} минут(ы)'.format( minutes))

Konklusjon

Du kan kalle tabellen og begynne å jobbe med den ved å kalle amplitude_dataframe-variabelen som dataene ble skrevet inn i. Den vil ha ca 50 kolonner, hvorav du i 80 % av tilfellene vil bruke: hendelsestype - hendelsesnavn, hendelsesegenskaper - hendelsesparametere, hendelsestid - hendelsestidspunkt, uuid - klient-id, brukeregenskaper - klientparametere, du bør begynne å jobbe med dem først . Og når man sammenligner tall fra egne beregninger med indikatorer fra Amplitude dashboards, må man ikke glemme at systemet bruker sin egen metodikk for å beregne unike klienter/trakter etc., og før man gjør dette bør man absolutt lese Amplitude dokumentasjonen.

Takk for din oppmerksomhet! Nå kan du laste opp rå hendelsesdata til Amplitude og bruke dem fullt ut i arbeidet ditt.

Hele manuset:

# Импорт библиотек
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+'
# Импорт библиотек
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))
0000' 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: www.habr.com

Legg til en kommentar