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
- Um projeto no Amplitude, onde os eventos estão configurados corretamente e a estatística está sendo coletada
- 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:
- «Gerenciar dados» (localizado no canto inferior esquerdo da tela)
- Selecione o projeto desejado de onde os dados serão extraídos e acesse-o
- No menu do projeto aberto, escolha «Configurações do projeto»
- 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):
- requests (2.10.0) - envio de solicitações através da API para obter dados
- pandas (1.0.1) - leitura de json, criação de dataframe e posterior gravação em arquivo
- zipfile - extrair arquivos do arquivo obtido pela API
- gzip - descompactação de arquivos json de .gz
- os - obtenção da lista de arquivos do arquivo descompactado
- time - opcional, medir o tempo de execução do script
- 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
