Introduction
Amplitude en tant qu'outil d'analyse produit a fait ses preuves grâce à la facilité de configuration des événements et à la flexibilité des visualisations. Il est souvent nécessaire de mettre en place son propre modèle d'attribution, de réaliser une classification des utilisateurs ou de construire un tableau de bord dans un autre système BI. Cela n'est possible qu'avec les données brutes des événements provenant d'Amplitude. Cet article vous expliquera comment obtenir ces données avec un minimum de connaissances en programmation.
Prérequis
- Projet dans Amplitude, où les événements sont déjà correctement configurés et les statistiques sont collectées
- Python installé (je travaille avec la version 3.8.3), avec lequel le lecteur potentiel sait déjà travailler à un niveau de base
Instruction
Étape 1. Obtention de l'API-key et du secret-key
Pour extraire des données, il est d'abord nécessaire d'obtenir l'API-key et le secret-key.
Vous pouvez les trouver en suivant le chemin suivant :
- «Gérer les données» (situé dans le coin inférieur gauche de l'écran)
- Sélectionnez le projet souhaité d'où les données seront extraites et passez à celui-ci
- Dans le menu du projet ouvert, choisissez «Paramètres du projet»
- Trouvez les lignes API-key et secret-key, copiez-les et conservez-les en lieu sûr.
Sans avoir à cliquer, vous pouvez accéder au lien qui apparaît généralement sous la forme :
analytics.amplitude.com/$$$$$$$/manage/project/*******/settings,
où $$$$$$$ est le nom de votre organisation sur Amplitude, et ****** est le numéro du projet
Étape 2. Vérification de la présence des bibliothèques nécessaires
La bonne nouvelle est que ces bibliothèques sont presque certainement déjà installées par défaut ou téléchargées, mais il est nécessaire de vérifier. Voici la liste complète des bibliothèques que j'utilise au moment de la rédaction de cet article (les versions sont indiquées entre parenthèses, si pertinent) :
- requests (2.10.0) - envoi de requêtes via l'api pour obtenir des données
- pandas (1.0.1) - lecture de json, création de dataframe et enregistrement dans un fichier
- zipfile - extraire des fichiers d'une archive obtenue via l'API
- gzip - décompression de fichiers json issus de .gz
- os - obtenir la liste des fichiers de l'archive décompressée
- time - optionnel, mesure du temps d'exécution du script
- tqdm - optionnel, pour suivre facilement l'avancement du traitement des fichiers
Étape 3. Écriture du script de chargement des données
Avertissement : le script de chargement complet se trouve à la fin de l'article, vous pouvez le prendre immédiatement et vous référer aux explications étape par étape si nécessaire.
Étape 3.1. Importation des bibliothèques
Nous importons toutes les bibliothèques énumérées à l'étape deux.
# Импорт библиотек
import requests
import pandas as pd
import zipfile
import gzip
import os
import time
import tqdm
from tqdm import tqdm
Étape 3.2. Envoi de la requête à Amplitude
Nous chronométrons le début de l'exécution du script et l'enregistrons dans la variable a.
startdate et enddate déterminent la période pour l'extraction des données et sont intégrés dans le texte de la requête envoyée à serveur Amplitude, en plus de la date, il est également possible d'indiquer l'heure en modifiant la valeur après 'T' dans la requête.
api_key et secret_key correspondent aux valeurs obtenues à la première étape, par mesure de sécurité, je mets ici des séquences aléatoires à la place des miennes.
a = time.time()
# Paramètres de la date de début et de fin
startdate = '20200627'
enddate = '20200628'
api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Envoi de la requête à Amplitude
response = requests.get('https://amplitude.com/api/2/export?start=' + startdate + 'T0&end=' + enddate + 'T0', auth = (api_key, secret_key))
print('1. Requête envoyée')
Étape 3.3. Téléchargement de l'archive contenant les données
Nous inventons un nom pour l'archive et l'enregistrons dans la variable filename. Pour plus de commodité, j'indique la période + j'indique que ce sont les données 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. Extraction des fichiers dans un dossier sur l'ordinateur
La bibliothèque zipfile entre en jeu, qui aidera à effectuer l'extraction des fichiers. Dans la troisième ligne, faites attention et écrivez votre chemin, où il vous sera plus pratique d'effectuer l'extraction.
# Извлечение файлов в папку на компьютере
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, il faut convertir les fichiers json, qui sont au format .gz, et les enregistrer dans un dataframe pour un travail ultérieur.
Je souligne qu'il faut à nouveau changer le chemin par le vôtre, et au lieu de 000000, écrire votre numéro de projet dans Amplitude (ou ouvrir manuellement le chemin où l'archive a été extraite et voir le nom du dossier à l'intérieur).
Dans l'ordre :
Enregistrement du répertoire dans une variable, obtention de la liste des fichiers dans le répertoire, création d'un dataframe vide, time.sleep(1) pour un bon fonctionnement de tqdm, à l'intérieur de la boucle, nous ouvrons les fichiers .gz et lisons immédiatement le json avec pandas et remplissons le dataframe spécifié.
# Преобразование 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')
Étape 3.6. Enregistrement du dataframe dans excel
L'exportation vers excel est ici simplement un exemple. Dans de nombreux cas, il est plus pratique de travailler avec le dataframe obtenu dans python ou d'enregistrer les données dans un stockage.
Il faudra également modifier ici le chemin d'exportation des données par le vôtre.
# Записать полученной таблицы в Excel-файл
amplitude_dataframe.to_excel('C:\Users\...\'+filename+'.xlsx',index=False)
print('5. Dataframe успешно записан в файл ' + filename)
Étape 3.7. Calcul du temps d'exécution du script
Enregistrement du temps actuel dans la variable b, calcul de la différence et du nombre de minutes, affichage du total des minutes. C'est la dernière étape.
b = time.time()
diff = b-a
minutes = diff//60
print('L'exécution du code a pris : {:.0f} minute(s)'.format(minutes))
Conclusion
Pour appeler le tableau et commencer à travailler avec, vous pouvez utiliser la variable amplitude_dataframe, qui contient les données. Elle comprendra environ 50 colonnes, dont dans 80 % des cas vous utiliserez : event_type — le nom de l'événement, event_properties — les paramètres de l'événement, event_time — le temps de l'événement, uuid — l'identifiant du client, user_properties — les paramètres du client. Il convient de commencer par eux. En comparant les chiffres de vos propres calculs avec les indicateurs des tableaux de bord Amplitude, il ne faut pas oublier que le système utilise sa propre méthodologie de calcul des clients uniques/des entonnoirs, etc., et il est nécessaire de consulter la documentation d'Amplitude au préalable.
Merci pour votre attention ! Vous pouvez maintenant exporter des données brutes sur les événements dans Amplitude et les utiliser pleinement dans votre travail.
Le script complet :
# Импорт библиотек
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))
Source : habr.com
