Recuperació de dades d'amplitud mitjançant API

Introducció

Amplitude s'ha demostrat molt bé com una eina d'anàlisi de productes a causa de la seva fàcil configuració d'esdeveniments i la seva flexibilitat de visualització. I sovint cal configurar el vostre propi model d'atribució, els usuaris del clúster o crear un tauler en un altre sistema de BI. Només és possible realitzar aquest frau amb dades d'esdeveniments en brut d'Amplitude. Aquest article us indicarà com obtenir aquestes dades amb un coneixement mínim de programació.

Requisits previs

  1. Un projecte a Amplitude en què els esdeveniments ja estan configurats correctament i se'n recullen estadístiques
  2. Python està instal·lat (estic treballant a la versió 3.8.3), amb la qual el lector potencial ja pot treballar almenys a un nivell bàsic

Instrucció

Pas 1. Obtenció de la clau API i la clau secreta

Per carregar dades, primer heu d'obtenir una clau API i una clau secreta.

Podeu trobar-los seguint el següent camí:

  1. "Gestiona les dades" (situat a la part inferior esquerra de la pantalla)
  2. Seleccioneu el projecte desitjat del qual es descarregaran les dades i aneu-hi
  3. Al menú del projecte que s'obre, seleccioneu "Configuració del projecte"
  4. Trobem la clau API i les cadenes de clau secreta, les copiem i les desem en un lloc segur.

Sense fer clic, podeu seguir l'enllaç, que en general té aquest aspecte:
analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
on $$$$$$ és l'inici de sessió d'amplitud de la vostra organització, ****** és el número del projecte

Pas 2: Comprovació de la presència de les biblioteques necessàries

La bona notícia és que gairebé segur que ja teniu aquestes biblioteques instal·lades per defecte o descarregades, però heu de comprovar-ho. La llista completa de biblioteques que vaig utilitzar en el moment d'escriure (les versions entre parèntesis s'indiquen si escau):

  1. peticions (2.10.0): enviant una sol·licitud per API per rebre dades
  2. pandas (1.0.1): llegeix json, crea un marc de dades i després escriu en un fitxer
  3. zipfile: extreu fitxers d'un arxiu rebut mitjançant l'API
  4. gzip - desempaquetant fitxers json de .gz
  5. os - obtenir una llista de fitxers d'un arxiu descomprimit
  6. temps: opcional, mesura el temps d'execució de l'script
  7. tqdm: opcional, per controlar fàcilment el progrés del processament dels fitxers

Pas 3. Escriptura d'un script de càrrega de dades

Suggeriment: el script de descàrrega complet es troba al final de l'article; si ho voleu, podeu agafar-lo immediatament i consultar les explicacions pas a pas si cal.

Pas 3.1. Importació de biblioteques

Importem totes les biblioteques enumerades al segon pas.

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

Pas 3.2. Enviar una sol·licitud a Amplitude

Detectem l'inici de l'execució de l'script i escrivim-lo a la variable a.

startdate i enddate són els responsables del període de descàrrega de dades i s'incorporen al text de la sol·licitud enviada al servidor d'Amplitude; a més de la data, també podeu especificar l'hora canviant el valor després de "T" a la sol·licitud.

api_key i secret_key corresponen als valors obtinguts en el primer pas; per motius de seguretat, aquí especifico seqüències aleatòries en lloc de les meves.

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

Pas 3.3. Descàrrega d'un arxiu amb dades

Aconseguim un nom per a l'arxiu i l'escrivim a la variable de nom de fitxer. Per a la meva comoditat, indiqui el període + indiqui que es tracta de dades d'amplitud. A continuació, registrem la resposta rebuda d'Amplitude a l'arxiu.

# Скачивание архива с данными
filename = 'period_since'+startdate+'to'+enddate+'_amplitude_data'
with open(filename + '.zip', "wb") as code:
    code.write(response.content)
print('2. Архив с файлами успешно скачан')  

Pas 3.4. Recuperació de fitxers d'una carpeta de l'ordinador

La biblioteca de fitxers zip entra en joc per ajudar a extreure fitxers. A la tercera línia, aneu amb compte i anoteu el vostre camí on us sigui més convenient extreure-ho.

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

Pas 3.5. conversió json

Després d'extreure els fitxers de l'arxiu, heu de convertir els fitxers json en format .gz i escriure'ls en un marc de dades per seguir treballant.

Tingueu en compte que aquí heu de canviar el camí de nou al vostre i, en comptes de 000000, escriure el vostre número de projecte des d'Amplitude (o obrir manualment el camí on es va extreure l'arxiu i mirar el nom de la carpeta que hi ha dins).

En ordre:

Escrivint un directori a una variable, obtenint una llista de fitxers d'un directori, creant un marc de dades buit, time.sleep(1) perquè tqdm funcioni correctament, dins del bucle obrim fitxers .gz i de seguida fem servir pandas per llegir json i omplir-lo. el marc de dades donat.

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

Pas 3.6. Escriptura de dataframe en excel

La càrrega a Excel és només un exemple aquí. En molts casos, és més convenient treballar amb el marc de dades resultant dins de Python o emmagatzemar les dades.

També haureu de substituir la ruta de càrrega de dades aquí per la vostra.

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

Pas 3.7. Comptem el temps d'execució del guió

Enregistrament de l'hora actual a la variable b, calculant la diferència i el nombre de minuts, mostrant els minuts totals. Aquest és l'últim pas.

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

Conclusió

Podeu trucar a la taula i començar a treballar-hi cridant a la variable amplitude_dataframe en què s'han escrit les dades. Tindrà unes 50 columnes, de les quals en el 80% dels casos utilitzareu: event_type - nom de l'esdeveniment, event_properties - paràmetres de l'esdeveniment, event_time - hora de l'esdeveniment, uuid - identificador del client, user_properties - paràmetres del client, primer hauríeu de començar a treballar-hi. . I quan compareu les xifres dels vostres propis càlculs amb els indicadors dels quadres de comandament d'Amplitude, no heu d'oblidar que el sistema utilitza la seva pròpia metodologia per calcular clients/embuts únics, etc., i abans de fer-ho, heu de llegir definitivament la documentació d'Amplitude.

Gràcies per la vostra atenció! Ara podeu carregar dades d'esdeveniments en brut a Amplitude i utilitzar-les completament al vostre treball.

Guió sencer:

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

Font: www.habr.com

Afegeix comentari