Verkrijg gegevens van Amplitude via API

Inleiding

Amplitude als een tool voor productanalyse heeft zich uitstekend bewezen dankzij de eenvoudige configuratie van evenementen en de flexibiliteit van visualisaties. Vaak ontstaat er behoefte om een eigen attributiemodel op te zetten, gebruikersclustering uit te voeren of een dashboard in een ander BI-systeem te bouwen. Dergelijke acties zijn alleen mogelijk als je de ruwe gegevens over de evenementen uit Amplitude hebt. In dit artikel leggen we uit hoe je deze gegevens kunt verkrijgen met minimale programmeerkennis.

Vereisten

  1. Een project in Amplitude waarin evenementen correct zijn ingesteld en waar statistieken over worden verzameld.
  2. Python is geïnstalleerd (ik werk met versie 3.8.3) en de potentiële lezer weet daar op zijn minst op basisniveau mee om te gaan.

Instructie

Stap 1. Verkrijgen van API-sleutels

Om gegevens te exporteren, moet je eerst de API-sleutel en de secret-sleutel verkrijgen.

Je kunt ze vinden door de volgende stappen te volgen:

  1. ‘Manage data’ (linksonder op het scherm)
  2. Kies het project waarvan je gegevens wilt exporteren en ga naar dat project.
  3. In het geopende projectmenu kies je ‘Project settings’
  4. Zoek de rijen API-sleutel en secret-sleutel, kopieer en bewaar ze op een veilige plek.

Je kunt ook rechtstreeks naar de link gaan, die er globaal als volgt uitziet:
analytics.amplitude.com/$$$$$$$/manage/project/*******/settings,
waar $$$$$$$$ je organisatie-login in Amplitude is, en ****** je projectnummer.

Stap 2. Controleer of de benodigde bibliotheken aanwezig zijn

Het goede nieuws is dat deze bibliotheken bijna zeker al standaard zijn geïnstalleerd of gedownload, maar controle is noodzakelijk. Hieronder het volledige overzicht van de bibliotheken die ik op het moment van schrijven gebruik (de relevante versies zijn tussen haakjes vermeld):

  1. requests (2.10.0) - versturen van verzoeken via de API om gegevens te verkrijgen.
  2. pandas (1.0.1) - lezen van JSON, creëren van een dataframe en vervolgens opslaan naar bestand.
  3. zipfile - bestanden uitpakken uit een archief verkregen via de API.
  4. gzip - decompressie van JSON-bestanden uit .gz.
  5. os - verkrijgen van bestandslijsten uit het uitgepakte archief.
  6. time - optioneel, voor het meten van de uitvoeringstijd van het script.
  7. tqdm - optioneel, voor het overzichtelijk volgen van de voortgang van het verwerken van bestanden.

Stap 3. Het schrijven van het gegevensuploadscript.

Tip: het volledige uploadscript staat aan het einde van het artikel; je kunt het meteen gebruiken en de stapsgewijze uitleg volgen indien nodig.

Stap 3.1. Bibliotheken importeren

We import all libraries listed in step two.

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

Step 3.2. Sending a request to Amplitude

We will mark the start of the script execution and save it in variable a.

startdate and enddate define the period for data extraction and are embedded in the text of the sent request to server Amplitude, in addition to the date, you can also specify the hour by changing the value after ‘T’ in the request.

api_key and secret_key correspond to the values obtained in the first step; for security, I specify random sequences instead of mine here.

a = time.time()
# Parameters for the start and end dates
startdate = '20200627'
enddate = '20200628'

api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Sending a request to Amplitude
response = requests.get('https://amplitude.com/api/2/export?start='+startdate+'T0&end='+enddate+'T0', auth = (api_key, secret_key))
print('1. Request sent')

Step 3.3. Downloading the data archive

We come up with a name for the archive and record it in variable filename. For convenience, I specify the period + indicate that this is Amplitude data. Next, we save the response from Amplitude to the archive.

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

Step 3.4. Extracting files to a folder on the computer

The zipfile library comes into play, which will help extract the files. In the third line, be careful and specify your path where it is more convenient for you to perform the extraction.

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

Step 3.5. Converting json

After extracting the files from the archive, we need to convert the json files, which are in .gz format, and save them into a dataframe for further work.

I would like to point out that here you need to change the path to your own again, and instead of 000000 write your project number from Amplitude (or manually open the path where the archive was extracted to see the folder name inside).

In order:

Record the directory in a variable, get the list of files from the directory, create an empty dataframe, time.sleep(1) for the correct operation of tqdm, inside the loop we open .gz files and immediately read json with pandas and fill the specified dataframe.

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

Step 3.6. Writing dataframe to excel

Exporting to excel here is just an example. In many cases, it's more convenient to work with the resulting data frame within Python or store the data in storage.

You will also have to change the data export path here to your own.

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

Step 3.7. Measuring the script execution time

Record the current time in variable b, calculate the difference and number of minutes, output the total minutes. This is the final step.

b = time.time()
diff = b-a
minutes = diff//60
print('De uitvoering van de code duurde: {:.0f} minuut(en)'.format(minutes))

Conclusie

U kunt de tabel oproepen en ermee aan de slag gaan door de variabele amplitude_dataframe aan te roepen, waarin de gegevens zijn opgeslagen. Deze bevat ongeveer 50 kolommen, waarvan u in 80% van de gevallen de volgende zult gebruiken: event_type — de naam van het evenement, event_properties — de parameters van het evenement, event_time — de tijd van het evenement, uuid — de klant-id, user_properties — de parameters van de klant, en het is raadzaam om eerst met deze te werken. En bij het vergelijken van cijfers uit uw eigen berekeningen met de statistieken uit de Amplitude-dashboards, moet u niet vergeten dat het systeem zijn eigen methodologie gebruikt voor het berekenen van unieke klanten/funnels, enzovoort, en het is noodzakelijk om de documentatie van Amplitude te raadplegen vóór deze stap.

Bedankt voor uw aandacht! U kunt nu onbewerkte evenementgegevens exporteren naar Amplitude en deze volledig in uw werk gebruiken.

Het volledige 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))

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster