Introduzione
Amplitude come strumento di analisi del prodotto si è dimostrato molto efficace grazie alla semplice configurazione degli eventi e alla flessibilità delle visualizzazioni. Spesso, si presenta l'esigenza di stabilire un proprio modello di attribuzione, effettuare la clusterizzazione degli utenti o creare un dashboard in un altro sistema BI. È possibile eseguire tali operazioni solo avendo accesso ai dati grezzi sugli eventi da Amplitude. In questo articolo si illustrerà come ottenere questi dati con competenze di programmazione minime.
Prerequisito
- Un progetto in Amplitude in cui gli eventi sono già configurati correttamente e da cui viene raccolta la statistica
- Python installato (sto usando la versione 3.8.3), con cui il lettore potenziale deve avere familiarità almeno a livello base
Istruzione
Passo 1. Ottenere API-key e secret-key
Per esportare i dati, è necessario prima ottenere API-key e secret-key.
È possibile trovarli seguendo questo percorso:
- «Manage data» (si trova nella parte inferiore sinistra dello schermo)
- Selezioniamo il progetto da cui si desidera esportare i dati e accediamo ad esso
- Nel menu del progetto aperto, selezioniamo «Project settings»
- Troviamo le righe API-key e secret-key, le copiamo e le conserviamo in un luogo sicuro.
Puoi accedere direttamente al link, che in forma 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 fare una verifica. Ecco l'elenco completo delle librerie che utilizzo al momento della scrittura dell'articolo (tra parentesi sono indicate le versioni, dove appropriato):
- requests (2.10.0) - per inviare richieste tramite l'API per ottenere dati
- pandas (1.0.1) - per leggere json, creare dataframe e successivamente scrivere in un file
- zipfile - per estrarre file dall'archivio ottenuto tramite l'API
- gzip - per decomprimere i file json da .gz
- os - per ottenere un elenco di file dall'archivio estratto
- time - opzionale, per misurare il tempo di esecuzione dello script
- tqdm - opzionale, per facilitare il monitoraggio del progresso del trattamento dei file
Passo 3. Scrittura dello script di caricamento dati
Suggerimento: lo script completo per il caricamento è alla fine dell'articolo; puoi prenderlo subito e fare riferimento alle spiegazioni passo-passo se necessario.
Passo 3.1. Importazione delle librerie
Importiamo 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
Passaggio 3.2. Invio della richiesta ad Amplitude
Segneremo l'inizio dell'esecuzione dello script e salveremo nella variabile a.
startdate e enddate determinano il periodo per l'esportazione dei dati e sono integrati nel testo della richiesta inviata a un 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 invece dei miei.
a = time.time()
# Parametri della data di inizio e fine
startdate = '20200627'
enddate = '20200628'
api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Invio della 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')
Passaggio 3.3. Download dell'archivio con i dati
Inventiamo un nome per l'archivio e lo salviamo nella variabile filename. Per comodità, indico il periodo + specifico che si tratta dei dati di Amplitude. Poi 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. Архив с файлами успешно скачан')
Passaggio 3.4. Estrazione dei file nella cartella del computer
Entra in gioco la libreria zipfile, che aiuterà nell'estrazione dei file. Nella terza riga, fai attenzione e specifica il tuo percorso dove preferisci eseguire l'estrazione.
# Извлечение файлов в папку на компьютере
z = zipfile.ZipFile(filename + '.zip', 'r')
z.extractall(path = 'C:\Users\...\'+filename)
print('3. Архив с файлами извлечен и записан в папку ' + filename)
Passo 3.5. Conversione di json
Dopo aver estratto i file dall'archivio, è necessario convertire i file json, che si trovano in formato .gz, e registrarli in un dataframe per ulteriori elaborazioni.
Nota che qui dovrai nuovamente cambiare il percorso con il tuo, e al posto di 000000 scrivere il tuo numero di progetto da Amplitude (o aprire manualmente il percorso dove è stato estratto l'archivio e controllare il nome della cartella all'interno).
In ordine di esecuzione:
Registrare la directory in una 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 leggiamo subito con pandas il json per riempire il dataframe assegnato.
# Преобразование 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. Scrivere il dataframe in excel
L'esportazione in excel qui è solo un esempio. In molti casi è più conveniente lavorare con il dataframe risultante all'interno di python o archiviare i dati in un deposito.
Dovrai sostituire anche il percorso di esportazione dei dati qui con il tuo.
# Записать полученной таблицы в 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
Registrazione dell'orario corrente nella variabile b, calcolo della differenza e numero di minuti, visualizzazione del totale in minuti. Questo è l'ultimo passaggio.
b = time.time()
diff = b-a
minutes = diff//60
print('L'esecuzione del codice ha impiegato: {:.0f} minuto(i)'.format(minutes))
Conclusione
Per invocare e iniziare a lavorare con la tabella, puoi utilizzare la variabile amplitude_dataframe, in cui sono stati memorizzati i dati. Ci saranno circa 50 colonne, delle quali nel 80% dei casi utilizzerai: event_type — nome dell'evento, event_properties — parametri dell'evento, event_time — ora dell'evento, uuid — id cliente, user_properties — parametri del cliente. È consigliabile iniziare a lavorare prima con questi. E, nel confrontare i numeri delle tue stime con le metriche dei dashboard di Amplitude, non dimenticare che il sistema utilizza una propria metodologia per calcolare i clienti/uniche fasce, ecc., e prima è necessario familiarizzare con la documentazione di Amplitude.
Grazie per l'attenzione! Ora puoi esportare i dati grezzi sugli eventi in Amplitude e utilizzarli pienamente 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
