Abrufen von Amplitudendaten über die API

Einführung

Amplitude hat sich aufgrund seiner einfachen Event-Einrichtung und Visualisierungsflexibilität als Produktanalysetool sehr gut bewährt. Und oft besteht die Notwendigkeit, ein eigenes Attributionsmodell einzurichten, Benutzer zu gruppieren oder ein Dashboard in einem anderen BI-System zu erstellen. Ein solcher Betrug ist nur mit rohen Ereignisdaten von Amplitude möglich. In diesem Artikel erfahren Sie, wie Sie diese Daten mit minimalen Programmierkenntnissen erhalten.

Voraussetzungen

  1. Ein Projekt in Amplitude, in dem Ereignisse bereits korrekt konfiguriert sind und Statistiken darüber gesammelt werden
  2. Python ist installiert (ich arbeite in der Version 3.8.3), womit der potenzielle Leser zumindest auf einem grundlegenden Niveau bereits arbeiten kann

Unterricht

Schritt 1. API-Schlüssel und Geheimschlüssel erhalten

Um Daten hochzuladen, müssen Sie zunächst einen API-Schlüssel und einen geheimen Schlüssel erhalten.

Sie können sie finden, indem Sie dem folgenden Pfad folgen:

  1. „Daten verwalten“ (unten links auf dem Bildschirm)
  2. Wählen Sie das gewünschte Projekt aus, von dem Daten heruntergeladen werden sollen, und gehen Sie dorthin
  3. Wählen Sie im sich öffnenden Projektmenü „Projekteinstellungen“
  4. Wir finden die API-Schlüssel- und Geheimschlüssel-Strings, kopieren sie und speichern sie an einem sicheren Ort.

Ohne Anklicken können Sie dem Link folgen, der im Allgemeinen so aussieht:
Analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
Dabei ist $$$$$$ der Amplituden-Login Ihrer Organisation und ****** die Projektnummer

Schritt 2: Überprüfen Sie das Vorhandensein der erforderlichen Bibliotheken

Die gute Nachricht ist, dass Sie diese Bibliotheken mit ziemlicher Sicherheit bereits standardmäßig installiert oder heruntergeladen haben, aber Sie müssen dies überprüfen. Die vollständige Liste der Bibliotheken, die ich zum Zeitpunkt des Schreibens verwendet habe (Versionen in Klammern sind gegebenenfalls angegeben):

  1. Anfragen (2.10.0) – Senden einer Anfrage über die API zum Empfangen von Daten
  2. Pandas (1.0.1) – JSON lesen, einen Datenrahmen erstellen und dann in eine Datei schreiben
  3. zipfile – Dateien aus einem Archiv extrahieren, das über die API empfangen wurde
  4. gzip – JSON-Dateien aus .gz entpacken
  5. os – Abrufen einer Liste von Dateien aus einem entpackten Archiv
  6. time – optional, misst die Laufzeit des Skripts
  7. tqdm – optional, zur einfachen Überwachung des Dateiverarbeitungsfortschritts

Schritt 3. Schreiben eines Datenladeskripts

Hinweis: Das vollständige Download-Skript finden Sie am Ende des Artikels. Wenn Sie möchten, können Sie es sofort zur Hand nehmen und bei Bedarf die Schritt-für-Schritt-Erklärungen nachschlagen.

Schritt 3.1. Bibliotheken importieren

Wir importieren alle im zweiten Schritt aufgeführten Bibliotheken.

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

Schritt 3.2. Senden einer Anfrage an Amplitude

Lassen Sie uns den Beginn der Skriptausführung erkennen und in die Variable a schreiben.

startdate und enddate sind für den Zeitraum für das Herunterladen von Daten verantwortlich und werden in den Text der an den Amplitude-Server gesendeten Anfrage eingebaut. Zusätzlich zum Datum können Sie auch die Stunde angeben, indem Sie den Wert nach „T“ in der Anfrage ändern.

api_key und Secret_key entsprechen den im ersten Schritt erhaltenen Werten; aus Sicherheitsgründen gebe ich hier Zufallssequenzen anstelle meiner eigenen an.

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

Schritt 3.3. Herunterladen eines Archivs mit Daten

Wir überlegen uns einen Namen für das Archiv und schreiben ihn in die Dateinamenvariable. Der Einfachheit halber gebe ich den Punkt + an, um anzuzeigen, dass es sich um Amplitudendaten handelt. Als nächstes zeichnen wir die empfangene Antwort von Amplitude im Archiv auf.

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

Schritt 3.4. Abrufen von Dateien aus einem Ordner auf Ihrem Computer

Die Zipfile-Bibliothek kommt ins Spiel, um beim Extrahieren von Dateien zu helfen. Seien Sie in der dritten Zeile vorsichtig und notieren Sie Ihren Pfad dort, wo es für Sie bequemer ist, ihn zu extrahieren.

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

Schritt 3.5. JSON-Konvertierung

Nachdem Sie die Dateien aus dem Archiv extrahiert haben, müssen Sie JSON-Dateien in das .gz-Format konvertieren und sie zur weiteren Arbeit in einen Datenrahmen schreiben.

Bitte beachten Sie, dass Sie hier den Pfad erneut in Ihren eigenen ändern und anstelle von 000000 Ihre Projektnummer aus Amplitude schreiben müssen (oder manuell den Pfad öffnen, in den das Archiv extrahiert wurde, und sich den Namen des darin enthaltenen Ordners ansehen müssen).

In Ordnung:

Ein Verzeichnis in eine Variable schreiben, eine Liste von Dateien aus einem Verzeichnis abrufen, einen leeren Datenrahmen erstellen, time.sleep(1), damit tqdm korrekt funktioniert, innerhalb der Schleife öffnen wir .gz-Dateien und verwenden sofort Pandas, um JSON zu lesen und zu füllen der angegebene Datenrahmen.

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

Schritt 3.6. Datenrahmen in Excel schreiben

Der Upload nach Excel ist hier nur ein Beispiel. In vielen Fällen ist es bequemer, mit dem resultierenden Datenrahmen in Python zu arbeiten oder die Daten im Speicher abzulegen.

Sie müssen hier auch den Daten-Upload-Pfad durch Ihren eigenen ersetzen.

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

Schritt 3.7. Wir zählen die Laufzeit des Skripts

Aufnahme der aktuellen Uhrzeit in der Variable b, Berechnung der Differenz und der Minutenanzahl, Anzeige der Gesamtminuten. Dies ist der letzte Schritt.

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

Abschluss

Sie können die Tabelle aufrufen und mit ihr arbeiten, indem Sie die Variable amplitude_dataframe aufrufen, in die die Daten geschrieben wurden. Es wird etwa 50 Spalten haben, von denen Sie in 80 % der Fälle Folgendes verwenden werden: event_type – Ereignisname, event_properties – Ereignisparameter, event_time – Ereigniszeit, uuid – Client-ID, user_properties – Client-Parameter. Sie sollten zuerst damit beginnen, damit zu arbeiten . Und wenn Sie Zahlen aus Ihren eigenen Berechnungen mit Indikatoren aus Amplitude-Dashboards vergleichen, dürfen Sie nicht vergessen, dass das System eine eigene Methodik zur Berechnung eindeutiger Kunden/Trichter usw. verwendet. Bevor Sie dies tun, sollten Sie unbedingt die Amplitude-Dokumentation lesen.

Vielen Dank für Ihre Aufmerksamkeit! Jetzt können Sie rohe Ereignisdaten auf Amplitude hochladen und sie in Ihrer Arbeit vollständig nutzen.

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

Source: habr.com

Kommentar hinzufügen