Obtención de datos de Amplitude a través de la API.

Introducción

Amplitude como herramienta de análisis de productos ha demostrado ser muy efectiva gracias a su sencilla configuración de eventos y flexibilidad en las visualizaciones. A menudo surge la necesidad de establecer un modelo de atribución propio, realizar la segmentación de usuarios o construir un dashboard en otro sistema de BI. Este tipo de maniobra solo es posible teniendo los datos en bruto de los eventos de Amplitude. En este artículo, se explicará cómo obtener estos datos con conocimientos mínimos de programación.

Prerrequisito

  1. Proyecto en Amplitude en el que ya están configurados correctamente los eventos y se está recopilando estadística sobre ellos
  2. Python instalado (estoy trabajando en la versión 3.8.3), con el que el lector potencial ya sabe trabajar al menos a nivel básico

Instrucción

Paso 1. Obtener API-key y secret-key

Para exportar datos, primero es necesario obtener el API-key y el secret-key.

Puedes encontrarlos siguiendo la siguiente ruta:

  1. «Manage data» (se encuentra en la parte inferior izquierda de la pantalla)
  2. Selecciona el proyecto del cual se exportarán los datos y accede a él
  3. En el menú abierto del proyecto, selecciona «Project settings»
  4. Busca las líneas de API-key y secret-key, cópialas y guárdalas en un lugar seguro.

Sin hacer clic, puedes ir al enlace que en general se ve así:
analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
donde $$$$$$$ es el nombre de tu organización en Amplitude, ****** es el número del proyecto

Paso 2. Verificación de las bibliotecas necesarias

La buena noticia es que estas bibliotecas casi con seguridad ya están instaladas por defecto o descargadas, pero es necesario verificar. Aquí está la lista completa de bibliotecas que estoy utilizando en el momento de escribir este artículo (en paréntesis se indican las versiones donde es apropiado):

  1. requests (2.10.0) - envío de solicitudes a través de la API para obtener datos
  2. pandas (1.0.1) - lectura de JSON, creación de DataFrame y posterior escritura en archivo
  3. zipfile - extraer archivos de un archivo comprimido obtenido a través de la API
  4. gzip - descompresión de archivos JSON de .gz
  5. os - obtener la lista de archivos del archivo descomprimido
  6. time - opcional, medición del tiempo de ejecución del script
  7. tqdm - opcional, para facilitar la visualización del progreso del procesamiento de archivos

Paso 3. Escritura del script de carga de datos

Sugerencia: El script completo de carga se encuentra al final del artículo; si lo deseas, puedes tomarlo y referirte a las explicaciones paso a paso si es necesario.

Paso 3.1. Importar bibliotecas

Realizamos la importación de todas las bibliotecas enumeradas en el segundo paso.

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

Paso 3.2. Enviando una solicitud a Amplitude

Marcaremos el inicio de la ejecución del script y registraremos en la variable a.

startdate y enddate representan el periodo para la exportación de datos y se integran en el texto de la solicitud enviada a servidor Amplitude, además de la fecha, también se puede especificar la hora, cambiando el valor después de 'T' en la solicitud.

api_key y secret_key corresponden a los valores obtenidos en el primer paso; por razones de seguridad, aquí indico secuencias aleatorias en lugar de mis propios valores.

a = time.time()
# Parámetros de fecha de inicio y fin
startdate = '20200627'
enddate = '20200628'

api_key = 'kldfg844203rkwekfjs9234'
secret_key = '094tfjdsfmw93mxwfek'
# Enviando la solicitud a Amplitude
response = requests.get('https://amplitude.com/api/2/export?start=' + startdate + 'T0&end=' + enddate + 'T0', auth = (api_key, secret_key))
print('1. Solicitud enviada')

Paso 3.3. Descargando el archivo de datos

Creamos un nombre para el archivo y lo registramos en la variable filename. Para mayor comodidad, indico el período + menciono que son datos de Amplitude. Luego, registramos la respuesta obtenida de Amplitude en el archivo.

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

Paso 3.4. Extracción de archivos en la carpeta de la computadora

Aquí entra en juego la biblioteca zipfile, que ayudará a realizar la extracción de archivos. En la tercera línea, asegúrate de indicar tu ruta donde te sea más cómodo realizar la extracción.

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

Paso 3.5. Transformación de json

Después de extraer los archivos del archivo comprimido, es necesario transformar los archivos json que están en formato .gz y registrarlos en un dataframe para un trabajo posterior.

Presta atención en que aquí debes cambiar nuevamente la ruta por la tuya, y en lugar de 000000, escribe tu número de proyecto de Amplitude (o abre manualmente el camino donde se extrajo el archivo y observa el nombre de la carpeta dentro).

Por orden de sucesión:

Registrar el directorio en la variable, obtener la lista de archivos del directorio, crear un dataframe vacío, time.sleep(1) para el correcto funcionamiento de tqdm, dentro del ciclo abrimos los archivos .gz y de inmediato usamos pandas para leer json y llenar el dataframe establecido.

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

Paso 3.6. Escribiendo el dataframe en excel

La exportación a excel aquí es simplemente como ejemplo. En muchos casos es más conveniente trabajar con el dataframe obtenido dentro de python o almacenar los datos en un repositorio.

También aquí tendrás que reemplazar la ruta de exportación de los datos por la tuya.

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

Paso 3.7. Calculando el tiempo de ejecución del script

Registrar la hora actual en la variable b, calcular la diferencia y el número de minutos, mostrando el total de minutos. Este es el último paso.

b = time.time()
diff = b-a
minutes = diff//60
print('La ejecución del código tomó: {:.0f} minuto(s)'.format(minutes))

Conclusión

Para invocar la tabla y comenzar a trabajar con ella, se puede llamar a la variable amplitude_dataframe, donde se han registrado los datos. Habrá alrededor de 50 columnas, de las cuales en el 80% de los casos utilizará: event_type — el nombre del evento, event_properties — los parámetros del evento, event_time — el tiempo del evento, uuid — el ID del cliente, user_properties — los parámetros del cliente. Debe comenzar a trabajar principalmente con estos. Y al comparar los números de sus propios cálculos con las métricas de los paneles de Amplitude, no se debe olvidar que el sistema utiliza su propia metodología para calcular usuarios únicos/funnels, etc., y es importante familiarizarse siempre con la documentación de Amplitude antes de eso.

¡Gracias por su atención! Ahora puede exportar datos en bruto sobre eventos en Amplitude y utilizarlos plenamente en su trabajo.

Todo el 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))

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster