Introduzione
Amplitude come strumento di analisi dei prodotti si è dimostrato molto efficace grazie alla facile configurazione degli eventi e alla flessibilità delle visualizzazioni. Non di rado si presenta la necessità di stabilire un proprio modello di attribuzione, eseguire la clusterizzazione degli utenti o costruire un dashboard in un altro sistema BI. È possibile effettuare tali operazioni solo avendo i dati grezzi sugli eventi da Amplitude. In questo articolo vedremo come ottenere questi dati con conoscenze di programmazione minime.
Prerequisito
- Progetto in Amplitude in cui gli eventi sono già configurati correttamente e da cui vengono raccolti dati statistici
- Python deve essere installato (sto usando la versione 3.8.3), con cui il potenziale lettore sa già lavorare almeno a un livello base
Istruzioni
Passo 1. Ottenere l'API-key e il secret-key
Per esportare i dati, è necessario prima di tutto ottenere l'API-key e il secret-key.
È possibile trovarli seguendo il percorso seguente:
- «Gestisci dati» (si trova nella parte inferiore sinistra dello schermo)
- Selezioniamo il progetto desiderato da cui verranno esportati i dati e accediamo ad esso
- Nel menu del progetto aperto, scegliamo «Impostazioni del progetto»
- Troviamo le righe API-key e secret-key, copiamole e salviamole in un luogo sicuro.
Senza cliccare, è possibile accedere direttamente al link, che in generale appare così:
analytics.amplitude.com/$$$$$$$/manage/project/*******/settings,
dove $$$$$$$ è il login della tua organizzazione in amplitude, ****** è il numero del progetto
Passo 2. Verifica della presenza delle librerie necessarie
La buona notizia è che queste librerie sono quasi sicuramente già installate di default o scaricate, ma è necessario verificarlo. Ecco l'elenco completo delle librerie che utilizzo al momento della scrittura di questo articolo (tra parentesi le versioni, dove appropriato):
- requests (2.10.0) – invio di richieste tramite API per ottenere dati
- pandas (1.0.1) – lettura di json, creazione di dataframe e successiva scrittura su file
- zipfile – estrazione di file da un archivio ottenuto tramite API
- gzip – decompressione di file json da .gz
- os – ottenere un elenco di file dall'archivio estratto
- time – opzionale, misurazione del tempo di esecuzione dello script
- tqdm – opzionale, per monitorare comodamente il progresso del trattamento dei file
Passo 3. Scrittura dello script per il caricamento dei dati
Suggerimento: lo script completo per il caricamento si trova alla fine dell'articolo, se lo si desidera, è possibile prenderlo subito e fare riferimento alle spiegazioni passo passo se necessario.
Passo 3.1. Importazione delle librerie
Produciamo l'importazione di tutte le librerie elencate nel secondo passaggio.
# Импорт библиотек
import requests
import pandas as pd
import zipfile
import gzip
import os
import time
import tqdm
from tqdm import tqdm
Passo 3.2. Inviare la richiesta ad Amplitude
Segniamo l'inizio dell'esecuzione dello script e registriamo nella variabile a.
startdate e enddate definiscono il periodo per l'estrazione dei dati e vengono incorporati nel testo della richiesta inviata a server Amplitude, oltre alla data, è possibile specificare anche l'ora, modificando il valore dopo 'T' nella richiesta.
api_key e secret_key corrispondono ai valori ottenuti nel primo passaggio; per motivi di sicurezza qui indico sequenze casuali al posto dei miei.
a = time.time()
# Parametri di data inizio e fine
startdate = '20200627'
enddate = '20200628'
api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Inviare la richiesta ad Amplitude
response = requests.get('https://amplitude.com/api/2/export?start=' + startdate + 'T0&end=' + enddate + 'T0', auth = (api_key, secret_key))
print('1. Richiesta inviata')
Passo 3.3. Scaricamento dell'archivio con i dati
Inventiamo un nome per l'archivio e lo registriamo nella variabile filename. Per comodità, specifico il periodo + indico che si tratta dei dati di Amplitude. Successivamente, registriamo la risposta ricevuta da Amplitude nell'archivio.
# Скачивание архива с данными
filename = 'period_since'+startdate+'to'+enddate+'_amplitude_data'
with open(filename + '.zip', "wb") as code:
code.write(response.content)
print('2. Архив с файлами успешно скачан')
Passo 3.4. Estrazione dei file nella cartella del computer
Entra in gioco la libreria zipfile, che aiuterà a effettuare l'estrazione dei file. Nella terza riga, fai attenzione e scrivi il tuo percorso, dove è più comodo effettuare l'estrazione.
# Извлечение файлов в папку на компьютере
z = zipfile.ZipFile(filename + '.zip', 'r')
z.extractall(path = 'C:\Users\...\'+filename)
print('3. Архив с файлами извлечен и записан в папку ' + filename)
Passo 3.5. Trasformazione di json
Dopo l'estrazione dei file dall'archivio, è necessario trasformare i file json, che si trovano nel formato .gz e registrarli nel dataframe per ulteriori elaborazioni.
Faccio notare che qui bisogna nuovamente modificare il percorso con il proprio e sostituire 000000 con il proprio numero di progetto di Amplitude (oppure aprire manualmente il percorso in cui è stato estratto l'archivio e controllare il nome della cartella interna).
In ordine sequenziale:
Registrare la directory nella variabile, ottenere l'elenco dei file dalla directory, creare un dataframe vuoto, time.sleep(1) per il corretto funzionamento di tqdm, all'interno del ciclo apriamo i file .gz e immediatamente con pandas leggiamo json e popoliamo il dataframe specificato.
# Преобразование 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')
Passo 3.6. Registrazione del dataframe in excel
L'estrazione in excel è semplicemente un esempio. In molti casi, è più comodo lavorare con il dataframe ottenuto all'interno di python o archiviare i dati in un deposito.
Sostituire anche qui il percorso di estrazione dei dati con il proprio.
# Записать полученной таблицы в Excel-файл
amplitude_dataframe.to_excel('C:\Users\...\'+filename+'.xlsx',index=False)
print('5. Dataframe успешно записан в файл ' + filename)
Passo 3.7. Calcoliamo il tempo di esecuzione dello script
Registrare l'ora corrente nella variabile b, calcolare la differenza e il numero di minuti, stampare il totale in minuti. Questo è l'ultimo passo.
b = time.time()
diff = b-a
minutes = diff//60
print('L''esecuzione del codice ha impiegato: {:.0f} minuto(i)'.format(minutes))
Conclusione
Puoi chiamare la tabella e iniziare a lavorarci sopra chiamando la variabile amplitude_dataframe, in cui sono stati registrati i dati. Contiene circa 50 colonne, delle quali utilizzerai l'80% dei casi: event_type — nome dell'evento, event_properties — parametri dell'evento, event_time — tempo dell'evento, uuid — id del cliente, user_properties — parametri del cliente; è consigliabile iniziare a lavorare prima con questi. E nel confronto dei numeri dai tuoi calcoli con i dati dei dashboard Amplitude, non dimenticare che il sistema utilizza una propria metodologia per il calcolo dei clienti unici/funnel, ecc., e prima di ciò devi assolutamente consultare la documentazione di Amplitude.
Grazie per l'attenzione! Adesso puoi esportare i dati grezzi sugli eventi in Amplitude e utilizzarli appieno nel tuo lavoro.
L'intero script:
# Импорт библиотек
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))
Fonte: habr.com
