Récupération des données d'amplitude via l'API

introduction

Amplitude a fait ses preuves en tant qu'outil d'analyse de produits en raison de sa simplicité de configuration d'événements et de sa flexibilité de visualisation. Et il est souvent nécessaire de configurer votre propre modèle d'attribution, de regrouper les utilisateurs ou de créer un tableau de bord dans un autre système BI. Il n'est possible de réaliser une telle fraude qu'avec les données brutes d'événements d'Amplitude. Cet article vous expliquera comment obtenir ces données avec un minimum de connaissances en programmation.

Conditions préalables

  1. Un projet dans Amplitude dans lequel les événements sont déjà configurés correctement et des statistiques sont collectées sur eux
  2. Python est installé (je travaille en version 3.8.3), avec lequel le lecteur potentiel peut déjà travailler au moins à un niveau de base

Instruction

Étape 1. Obtention de la clé API et de la clé secrète

Pour télécharger des données, vous devez d'abord obtenir une clé API et une clé secrète.

Vous pouvez les trouver en suivant le chemin suivant :

  1. « Gérer les données » (situé en bas à gauche de l'écran)
  2. Sélectionnez le projet souhaité à partir duquel les données seront téléchargées et accédez-y
  3. Dans le menu du projet qui s'ouvre, sélectionnez « Paramètres du projet »
  4. Nous trouvons les chaînes de clé API et de clé secrète, les copions et les enregistrons dans un endroit sûr.

Sans cliquer, vous pouvez suivre le lien, qui ressemble en général à ceci :
Analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
où $$$$$$ est le login amplitude de votre organisation, ****** est le numéro de projet

Étape 2 : Vérification de la présence des bibliothèques requises

La bonne nouvelle est que ces bibliothèques sont presque certainement déjà installées par défaut ou téléchargées, mais vous devez vérifier. La liste complète des bibliothèques que j'ai utilisées au moment de la rédaction (les versions entre parenthèses sont indiquées le cas échéant) :

  1. requêtes (2.10.0) - envoi d'une requête via l'API pour recevoir des données
  2. pandas (1.0.1) - lecture de json, création d'une trame de données puis écriture dans un fichier
  3. zipfile - extraire les fichiers d'une archive reçue via l'API
  4. gzip - décompression des fichiers json de .gz
  5. os - obtenir une liste de fichiers à partir d'une archive décompressée
  6. time - facultatif, mesurez la durée d'exécution du script
  7. tqdm - facultatif, pour un suivi facile de la progression du traitement des fichiers

Étape 3. Écrire un script de chargement de données

Astuce : le script de téléchargement complet se trouve à la fin de l'article ; si vous le souhaitez, vous pouvez le récupérer immédiatement et vous référer aux explications étape par étape si nécessaire.

Étape 3.1. Importation de bibliothèques

Nous importons toutes les bibliothèques répertoriées dans la deuxième étape.

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

Étape 3.2. Soumettre une demande à Amplitude

Détectons le début de l'exécution du script et écrivons-le dans la variable a.

startdate et enddate sont responsables de la période de téléchargement des données et sont intégrés dans le texte de la requête envoyée au serveur Amplitude ; en plus de la date, vous pouvez également spécifier l'heure en modifiant la valeur après « T » dans la requête.

api_key et secret_key correspondent aux valeurs obtenues lors de la première étape ; pour des raisons de sécurité, je précise ici des séquences aléatoires au lieu des miennes.

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

Étape 3.3. Téléchargement d'une archive avec des données

Nous trouvons un nom pour l'archive et l'écrivons dans la variable filename. Pour ma commodité, j'indique la période + indique qu'il s'agit d'une donnée d'amplitude. Ensuite, nous enregistrons la réponse reçue d'Amplitude dans l'archive.

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

Étape 3.4. Récupérer des fichiers d'un dossier sur votre ordinateur

La bibliothèque zipfile entre en jeu pour aider à extraire les fichiers. Dans la troisième ligne, soyez prudent et notez votre chemin là où il vous est plus pratique d'extraire.

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

Étape 3.5. conversion json

Après avoir extrait les fichiers de l'archive, vous devez convertir les fichiers json au format .gz et les écrire dans une trame de données pour un travail ultérieur.

Veuillez noter qu'ici, vous devez à nouveau remplacer le chemin par le vôtre et, au lieu de 000000, écrivez votre numéro de projet depuis Amplitude (ou ouvrez manuellement le chemin où l'archive a été extraite et regardez le nom du dossier à l'intérieur).

En ordre:

Écrire un répertoire dans une variable, obtenir une liste de fichiers d'un répertoire, créer une trame de données vide, time.sleep(1) pour que tqdm fonctionne correctement, à l'intérieur de la boucle, nous ouvrons les fichiers .gz et utilisons immédiatement pandas pour lire json et remplir la trame de données donnée.

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

Étape 3.6. Écrire une trame de données dans Excel

Le téléchargement vers Excel n’est qu’un exemple ici. Dans de nombreux cas, il est plus pratique de travailler avec le bloc de données résultant dans Python ou de stocker les données.

Vous devrez également remplacer le chemin de téléchargement des données ici par le vôtre.

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

Étape 3.7. On compte le temps d'exécution du script

Enregistrer l'heure actuelle dans la variable b, calculer la différence et le nombre de minutes, afficher le total des minutes. C'est la dernière étape.

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

Conclusion

Vous pouvez appeler la table et commencer à travailler avec elle en appelant la variable amplitude_dataframe dans laquelle les données ont été écrites. Il comportera environ 50 colonnes, dont vous utiliserez dans 80 % des cas : event_type - nom de l'événement, event_properties - paramètres de l'événement, event_time - heure de l'événement, uuid - identifiant client, user_properties - paramètres client, vous devriez d'abord commencer à travailler avec eux . Et lorsque vous comparez les chiffres de vos propres calculs avec les indicateurs des tableaux de bord Amplitude, vous ne devez pas oublier que le système utilise sa propre méthodologie pour calculer les clients/entonnoirs uniques, etc., et avant de faire cela, vous devez absolument lire la documentation d'Amplitude.

Merci pour votre attention! Vous pouvez désormais télécharger des données d'événement brutes sur Amplitude et les utiliser pleinement dans votre travail.

Scénario entier :

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

Ajouter un commentaire