Obtendo dados do Amplitude via API

Introdução

Amplitude como ferramenta de análise de produtos se destacou pela configuração simples de eventos e flexibilidade nas visualizações. Frequentemente, há uma necessidade de estabelecer um modelo próprio de atribuição, realizar a segmentação de usuários ou construir um dashboard em outro sistema BI. Realizar tal tarefa é possível apenas com os dados brutos dos eventos do Amplitude. Este artigo abordará como obter esses dados com conhecimentos mínimos de programação.

Pré-requisito

  1. Um projeto no Amplitude, onde os eventos estão configurados corretamente e a estatística está sendo coletada
  2. Python instalado (estou usando a versão 3.8.3), com o qual o potencial leitor já sabe trabalhar pelo menos em um nível básico

Instrução

Passo 1. Obtenção do API-key e secret-key

Para extrair os dados, primeiro é necessário obter o API-key e o secret-key.

Você pode encontrá-los navegando pelo seguinte caminho:

  1. «Gerenciar dados» (localizado no canto inferior esquerdo da tela)
  2. Selecione o projeto desejado de onde os dados serão extraídos e acesse-o
  3. No menu do projeto aberto, escolha «Configurações do projeto»
  4. Encontre as linhas API-key e secret-key, copie e salve-as em um local seguro.

Sem necessidade de clicar, você pode acessar o link que, em termos gerais, é assim:
analytics.amplitude.com/$$$$$$$/manage/project/*******/settings,
onde $$$$$$$ é o login da sua organização no amplitude, ****** é o número do projeto

Passo 2. Verificação das bibliotecas necessárias

A boa notícia é que essas bibliotecas quase certamente já estão instaladas por padrão ou foram baixadas, mas é necessário verificar. A lista completa das bibliotecas que usei no momento da redação deste artigo (as versões estão entre parênteses, quando apropriado):

  1. requests (2.10.0) - envio de solicitações através da API para obter dados
  2. pandas (1.0.1) - leitura de json, criação de dataframe e posterior gravação em arquivo
  3. zipfile - extrair arquivos do arquivo obtido pela API
  4. gzip - descompactação de arquivos json de .gz
  5. os - obtenção da lista de arquivos do arquivo descompactado
  6. time - opcional, medir o tempo de execução do script
  7. tqdm - opcional, para facilitar o acompanhamento do progresso do processamento dos arquivos

Passo 3. Redação do script de carregamento de dados

Dica: o script completo de carregamento está no final do artigo, se desejado, você pode pegá-lo imediatamente e consultar as explicações passo a passo conforme necessário.

Passo 3.1. Importação das bibliotecas

Realizamos a importação de todas as bibliotecas listadas no segundo passo.

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

Passo 3.2. Enviando a solicitação para o Amplitude

Vamos registrar o início da execução do script e armazenar na variável a.

startdate e enddate definem o período para a exportação de dados e são incorporados no texto da solicitação enviada para servidor Amplitude, além da data, também é possível especificar a hora, alterando o valor após 'T' na solicitação.

api_key e secret_key correspondem aos valores obtidos na primeira etapa, por motivos de segurança aqui coloco sequências aleatórias em vez dos meus.

a = time.time()
# Parâmetros de data de início e fim
startdate = '20200627'
enddate = '20200628'

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

Passo 3.3. Baixando o arquivo com os dados

Criamos um nome para o arquivo e armazenamos na variável filename. Para minha conveniência, estou indicando o período + o que se trata dos dados do amplitude. Em seguida, armazenamos a resposta recebida do Amplitude no arquivo.

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

Passo 3.4. Extraindo arquivos na pasta do computador

Aqui entra a biblioteca zipfile, que ajudará na extração dos arquivos. Na terceira linha, tenha cuidado e especifique o seu caminho, onde for mais conveniente realizar a extração.

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

Passo 3.5. Convertendo json

Após extrair os arquivos do arquivo compactado, é necessário converter os arquivos json, que estão no formato .gz, e armazená-los em um dataframe para trabalho posterior.

Chamo a atenção para o fato de que aqui é preciso alterar o caminho novamente para o seu, e em vez de 000000, escreva o seu número de projeto do Amplitude (ou abra manualmente o caminho onde o arquivo foi extraído e veja o nome da pasta dentro).

Na ordem de sequência:

Gravamos o diretório na variável, obtemos a lista de arquivos do diretório, criamos um dataframe vazio, time.sleep(1) para o funcionamento correto do tqdm, dentro do loop abrimos os arquivos .gz e imediatamente com o pandas lemos o json e preenchemos o dataframe designado.

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

Passo 3.6. Gravando o dataframe no excel

A exportação para o excel aqui é apenas um exemplo. Em muitos casos, é mais conveniente trabalhar com o dataframe obtido dentro do python ou armazenar os dados em um repositório.

Você também precisará substituir o caminho da exportação de dados aqui pelo seu.

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

Passo 3.7. Calculando o tempo de execução do script

Registramos a hora atual na variável b, calculamos a diferença e a quantidade de minutos, e exibimos o total em minutos. Este é o último passo.

b = time.time()
diff = b-a
minutes = diff//60
print('A execução do código levou: {:.0f} minuto(s)'.format(minutes))

Conclusão

Para chamar a tabela e começar a trabalhar com ela, você pode usar a variável amplitude_dataframe, que contém os dados. Ela terá cerca de 50 colunas, das quais em 80% dos casos você usará: event_type — nome do evento, event_properties — parâmetros do evento, event_time — hora do evento, uuid — id do cliente, user_properties — parâmetros do cliente, sendo melhor começar a trabalhar primeiro com eles. E ao comparar os números dos seus próprios cálculos com os indicadores dos painéis do Amplitude, não se deve esquecer que o sistema utiliza sua própria metodologia para calcular clientes únicos/funil etc., e deve-se sempre consultar a documentação do Amplitude antes disso.

Obrigado pela atenção! Agora você pode exportar dados brutos sobre eventos no Amplitude e utilizá-los plenamente em seu trabalho.

O script completo:

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

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster