Recupero dei dati di ampiezza tramite API

Introduzione

Amplitude si è dimostrato molto efficace come strumento di analisi dei prodotti grazie alla sua semplice configurazione degli eventi e alla flessibilità di visualizzazione. E spesso è necessario impostare il proprio modello di attribuzione, clusterizzare gli utenti o creare un dashboard in un altro sistema BI. È possibile eseguire una frode di questo tipo solo con dati grezzi sugli eventi di Amplitude. Questo articolo ti spiegherà come ottenere questi dati con una conoscenza di programmazione minima.

Prerequisiti

  1. Un progetto in Amplitude in cui gli eventi sono già configurati correttamente e su di essi vengono raccolte statistiche
  2. È installato Python (sto lavorando alla versione 3.8.3), con cui il potenziale lettore può già lavorare almeno a livello base

Istruzione

Passaggio 1. Ottenere la chiave API e la chiave segreta

Per caricare i dati, devi prima ottenere una chiave API e una chiave segreta.

Li potete trovare seguendo il seguente percorso:

  1. “Gestisci dati” (situato in basso a sinistra dello schermo)
  2. Seleziona il progetto desiderato da cui verranno scaricati i dati e vai ad esso
  3. Nel menu progetto che si apre, seleziona “Impostazioni progetto”
  4. Troviamo le stringhe della chiave API e della chiave segreta, le copiamo e le salviamo in un luogo sicuro.

Senza fare clic, puoi seguire il collegamento, che in generale assomiglia a questo:
analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
dove $$$$$$ è il login Amplitude della tua organizzazione, ****** è il numero del progetto

Passaggio 2: verifica della presenza delle librerie richieste

La buona notizia è che quasi sicuramente hai già queste librerie installate per impostazione predefinita o scaricate, ma devi controllare. L'elenco completo delle librerie che ho utilizzato al momento della scrittura (le versioni tra parentesi sono indicate dove appropriato):

  1. richieste (2.10.0) - invio di una richiesta tramite API per ricevere dati
  2. panda (1.0.1): legge json, crea un dataframe e quindi scrive su un file
  3. zipfile: estrae i file da un archivio ricevuto tramite l'API
  4. gzip: decompressione dei file JSON da .gz
  5. os: ottenere un elenco di file da un archivio decompresso
  6. time - facoltativo, misura il tempo di esecuzione dello script
  7. tqdm - opzionale, per un facile monitoraggio dell'avanzamento dell'elaborazione dei file

Passaggio 3. Scrittura di uno script di caricamento dati

Suggerimento: lo script completo per il download si trova alla fine dell'articolo; se lo desideri, puoi prenderlo subito e consultare le spiegazioni passo passo, se necessario.

Passaggio 3.1. Importazione di 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 di una richiesta ad Amplitude

Rileviamo l'inizio dell'esecuzione dello script e scriviamolo nella variabile a.

startdate e enddate sono responsabili del periodo di download dei dati e sono integrati nel testo della richiesta inviata al server Amplitude; oltre alla data, puoi anche specificare 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 specifico sequenze casuali anziché mie.

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. Запрос отправлен')

Passaggio 3.3. Download di un archivio con dati

Troviamo un nome per l'archivio e lo scriviamo nella variabile filename. Per mia comodità, indico il punto + indico che si tratta di dati di ampiezza. 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. Архив с файлами успешно скачан')  

Passaggio 3.4. Recupero di file da una cartella sul tuo computer

La libreria zipfile entra in gioco per aiutare a estrarre i file. Nella terza riga fai attenzione e scrivi il tuo percorso dove ti è più comodo estrarre.

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

Passaggio 3.5. conversione json

Dopo aver estratto i file dall'archivio, è necessario convertire i file json in formato .gz e scriverli in un dataframe per ulteriori lavori.

Tieni presente che qui devi modificare nuovamente il percorso con il tuo e invece di 000000 scrivi il numero del tuo progetto da Amplitude (o apri manualmente il percorso in cui è stato estratto l'archivio e guarda il nome della cartella all'interno).

Al fine:

Scrivere una directory su una variabile, ottenere un elenco di file da una directory, creare un dataframe vuoto, time.sleep(1) affinché tqdm funzioni correttamente, all'interno del ciclo apriamo file .gz e utilizziamo immediatamente panda per leggere json e riempire il dataframe specificato.

# Преобразование 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')

Passaggio 3.6. Scrivere dataframe in Excel

Il caricamento in Excel è solo un esempio qui. In molti casi, è più conveniente lavorare con il frame di dati risultante all'interno di Python o archiviare i dati.

Dovrai anche sostituire il percorso di caricamento dei dati qui con il tuo.

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

Passaggio 3.7. Contiamo il tempo di esecuzione dello script

Registrazione dell'ora corrente nella variabile b, calcolo della differenza e del numero di minuti, visualizzazione dei minuti totali. Questo è l'ultimo passo.

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

conclusione

Puoi chiamare la tabella e iniziare a lavorarci chiamando la variabile amplitude_dataframe in cui sono stati scritti i dati. Avrà circa 50 colonne, di cui nell'80% dei casi utilizzerai: event_type - nome evento, event_properties - parametri evento, event_time - ora evento, uuid - ID client, user_properties - parametri client, dovresti iniziare prima a lavorare con loro . E quando confronti le cifre dei tuoi calcoli con gli indicatori dei dashboard di Amplitude, non devi dimenticare che il sistema utilizza la propria metodologia per il calcolo di clienti/funnel unici, ecc., e prima di farlo dovresti assolutamente leggere la documentazione di Amplitude.

Grazie per l'attenzione! Ora puoi caricare i dati grezzi degli eventi su Amplitude e utilizzarli pienamente nel tuo lavoro.

Tutta la sceneggiatura:

# Импорт библиотек
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))

Fonte: habr.com

Aggiungi un commento