Abrufen von Amplitude-Daten über die API

Einführung

Amplitude hat sich als Werkzeug für Produktanalysen dank der einfachen Event-Konfiguration und der Flexibilität der Visualisierungen sehr bewährt. Oft besteht die Notwendigkeit, ein eigenes Attributionsmodell einzurichten, Benutzer zu clustern oder ein Dashboard in einem anderen BI-System zu erstellen. Solche Manipulationen sind nur möglich, wenn man Rohdaten über Events aus Amplitude hat. Wie man diese Daten mit minimalen Programmierkenntnissen erhält, wird in diesem Artikel behandelt.

Voraussetzungen

  1. Ein Projekt in Amplitude, in dem die Events bereits korrekt konfiguriert sind und Statistiken gesammelt werden.
  2. Python ist installiert (ich arbeite mit Version 3.8.3), und der potenzielle Leser hat zumindest grundlegende Kenntnisse im Umgang damit.

Anleitung

Schritt 1. API-Key und Secret-Key erhalten

Um Daten zu exportieren, muss man zunächst den API-Key und den Secret-Key erhalten.

Diese findet man, indem man den folgenden Weg geht:

  1. „Manage data“ (links unten auf dem Bildschirm)
  2. Wählen Sie das benötigte Projekt aus, aus dem die Daten exportiert werden sollen, und gehen Sie zu diesem Projekt.
  3. Im geöffneten Projektmenü wählen wir „Project settings“ aus.
  4. Wir finden die Zeilen API-Key und Secret-Key, kopieren sie und speichern sie an einem sicheren Ort.

Ohne zu navigieren, kann man auch direkt auf den Link zugreifen, der im Allgemeinen so aussieht:
analytics.amplitude.com/$$$$$$$manage/project/*******/settings,
wobei $$$$$$$ der Login Ihrer Organisation bei Amplitude und ****** die Projektnummer ist.

Schritt 2. Überprüfung der verfügbaren Bibliotheken

Die gute Nachricht ist, dass diese Bibliotheken höchstwahrscheinlich bereits standardmäßig installiert oder heruntergeladen sind, aber eine Überprüfung ist erforderlich. Die vollständige Liste der von mir verwendeten Bibliotheken zum Zeitpunkt des Schreibens des Artikels (die Versionen sind in Klammern angegeben, wo es passend ist):

  1. requests (2.10.0) - Senden einer Anfrage über die API zum Abrufen von Daten
  2. pandas (1.0.1) - Lesen von JSON, Erstellen von Dataframes und anschließendes Schreiben in eine Datei
  3. zipfile - Extrahieren von Dateien aus einem über die API erhaltenen Archiv
  4. gzip - Entpacken von JSON-Dateien aus .gz
  5. os - Abrufen der Dateiliste aus dem entpackten Archiv
  6. time - optional, zur Messung der Skriptdauer
  7. tqdm - optional, um den Fortschritt beim Verarbeiten von Dateien bequem zu überwachen

Schritt 3. Schreiben des Datenupload-Skripts

Hinweis: Das vollständige Upload-Skript befindet sich am Ende des Artikels. Bei Bedarf kann es sofort verwendet werden, während man sich bei Bedarf auf die Schritt-für-Schritt-Erklärungen bezieht.

Schritt 3.1. Bibliotheken importieren

Wir importieren alle Bibliotheken, die im zweiten Schritt aufgelistet sind.

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

Schritt 3.2. Anfrage an Amplitude senden

Wir markieren den Beginn der Skriptausführung und speichern in der Variablen a.

startdate und enddate definieren den Zeitraum für den Datenexport und werden in den Text der gesendeten Anfrage integriert. Server In Amplitude kann zusätzlich zum Datum auch die Uhrzeit angegeben werden, indem der Wert nach 'T' in der Anfrage geändert wird.

api_key und secret_key entsprechen den Werten, die im ersten Schritt erhalten wurden. Aus Sicherheitsgründen gebe ich hier zufällige Zeichenfolgen anstelle meiner eigenen an.

a = time.time()
# Parameter für das Start- und Enddatum
startdate = '20200627'
enddate = '20200628'

api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Anfrage an Amplitude senden
response = requests.get('https://amplitude.com/api/2/export?start=' + startdate + 'T0&end=' + enddate + 'T0', auth=(api_key, secret_key))
print('1. Anfrage gesendet')

Schritt 3.3. Archiv mit Daten herunterladen

Wir erfinden einen Namen für das Archiv und speichern ihn in der Variablen filename. Zu meinem Komfort gebe ich den Zeitraum an + ich gebe an, dass es sich um Amplitude-Daten handelt. Danach speichern wir die erhaltene Antwort von Amplitude im Archiv.

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

Schritt 3.4. Dateien im Ordner auf dem Computer extrahieren

Hier kommt die Bibliothek zipfile ins Spiel, die beim Extrahieren von Dateien hilft. Achten Sie darauf, in der dritten Zeile Ihren Pfad anzugeben, wo es Ihnen einfacher fällt, die Extraktion durchzuführen.

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

Schritt 3.5. json umwandeln

Nach dem Extrahieren der Dateien aus dem Archiv müssen die json-Dateien, die sich im .gz-Format befinden, umgewandelt und in ein DataFrame für die weitere Verwendung geschrieben werden.

Ich weise darauf hin, dass hier der Pfad erneut an Ihren angepasst werden muss und statt 000000 Ihre Projektnummer aus Amplitude eingetragen werden muss (oder öffnen Sie manuell den Pfad, wohin das Archiv extrahiert wurde, und sehen Sie sich den Namen des Ordners an).

In der Reihenfolge:

Die Verzeichnisstruktur in eine Variable speichern, die Liste der Dateien aus dem Verzeichnis abrufen, ein leeres DataFrame erstellen, time.sleep(1) für die ordnungsgemäße Funktion von tqdm, innerhalb der Schleife .gz-Dateien öffnen und sofort mit pandas json lesen und das angegebene DataFrame befüllen.

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

Schritt 3.6. DataFrame in Excel speichern

Der Export in Excel ist hier lediglich ein Beispiel. In vielen Fällen ist es einfacher, mit dem erhaltenen Datenrahmen in Python zu arbeiten oder die Daten in einem Speicher abzulegen.

Den Exportpfad für die Daten muss auch hier wieder auf Ihren eigenen angepasst werden.

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

Schritt 3.7. Die Laufzeit des Skripts berechnen

Das aktuelle Datum in die Variable b speichern, die Differenz und die Anzahl der Minuten berechnen und die Gesamtzahl der Minuten ausgeben. Dies ist der letzte Schritt.

b = time.time()
diff = b-a
minutes = diff//60
print('Die Ausführung des Codes dauerte: {:.0f} Minute(n)'.format( minutes))

Fazit

Um die Tabelle aufzurufen und mit ihr zu arbeiten, können Sie die Variable amplitude_dataframe aufrufen, in der die Daten gespeichert sind. Sie enthält etwa 50 Spalten, von denen Sie in 80 % der Fälle folgende verwenden werden: event_type — der Name des Events, event_properties — die Eigenschaften des Events, event_time — die Zeit des Events, uuid — die ID des Clients, user_properties — die Eigenschaften des Clients. Es ist sinnvoll, zuerst mit diesen zu arbeiten. Und bei der Überprüfung der Zahlen aus eigenen Berechnungen im Vergleich zu den Kennzahlen aus den Amplitude-Dashboards sollte nicht vergessen werden, dass das System seine eigene Methodologie zur Berechnung von einzigartigen Clients/Funnels usw. verwendet, und zuvor sollte unbedingt die Dokumentation von Amplitude konsultiert werden.

Vielen Dank für Ihre Aufmerksamkeit! Jetzt können Sie Rohdaten zu Ereignissen in Amplitude exportieren und diese in Ihrer Arbeit vollständig nutzen.

Das gesamte Skript:

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

Quelle: habr.com

60GB SSD 8Gb DDR4