Recuperando dados de amplitude via API

Introdução

O Amplitude provou ser uma ferramenta de análise de produtos muito boa devido à sua fácil configuração de eventos e flexibilidade de visualização. E muitas vezes há a necessidade de configurar seu próprio modelo de atribuição, agrupar usuários ou construir um dashboard em outro sistema de BI. Só é possível realizar tal fraude com dados brutos de eventos do Amplitude. Este artigo explicará como obter esses dados com conhecimento mínimo de programação.

Pré-requisitos

  1. Um projeto em Amplitude em que os eventos já estão configurados corretamente e as estatísticas são coletadas sobre eles
  2. Python está instalado (estou trabalhando na versão 3.8.3), com o qual o potencial leitor já pode trabalhar pelo menos em um nível básico

Instrução

Etapa 1. Obtenção da chave API e da chave secreta

Para fazer upload de dados, primeiro você precisa obter uma chave de API e uma chave secreta.

Você pode encontrá-los seguindo o seguinte caminho:

  1. “Gerenciar dados” (localizado na parte inferior esquerda da tela)
  2. Selecione o projeto desejado do qual os dados serão baixados e acesse-o
  3. No menu do projeto que é aberto, selecione “Configurações do projeto”
  4. Encontramos as strings da chave API e da chave secreta, copiamos e salvamos em um local seguro.

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

Passo 2: Verificando a presença das bibliotecas necessárias

A boa notícia é que é quase certo que você já tenha essas bibliotecas instaladas por padrão ou baixadas, mas é preciso verificar. A lista completa de bibliotecas que usei no momento da escrita (as versões entre parênteses são indicadas quando apropriado):

  1. requests (2.10.0) – enviando uma solicitação via API para receber dados
  2. pandas (1.0.1) – lendo json, criando um dataframe e depois gravando em um arquivo
  3. zipfile - extrai arquivos de um arquivo recebido via API
  4. gzip - descompactando arquivos json de .gz
  5. os - obtendo uma lista de arquivos de um arquivo descompactado
  6. time - opcional, meça o tempo de execução do script
  7. tqdm – opcional, para fácil monitoramento do progresso do processamento de arquivos

Etapa 3. Escrevendo um script de carregamento de dados

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

Etapa 3.1. Importando bibliotecas

Importamos todas as bibliotecas listadas na segunda etapa.

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

Etapa 3.2. Enviando uma solicitação para Amplitude

Vamos detectar o início da execução do script e gravá-lo na variável a.

startdate e enddate são responsáveis ​​pelo período de download dos dados e estão embutidos no texto da solicitação enviada ao servidor Amplitude; além da data, você também pode 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 razões de segurança, especifico aqui sequências aleatórias em vez das minhas.

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

Etapa 3.3. Baixando um arquivo com dados

Criamos um nome para o arquivo e o escrevemos na variável filename. Para minha comodidade, indico o período + indico que se trata de dados de amplitude. A seguir, registramos 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. Архив с файлами успешно скачан')  

Etapa 3.4. Recuperando arquivos de uma pasta no seu computador

A biblioteca zipfile entra em ação para ajudar a extrair arquivos. Na terceira linha, tome cuidado e anote o seu caminho onde for mais conveniente extrair.

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

Etapa 3.5. conversão JSON

Depois de extrair os arquivos do arquivo, você precisa converter os arquivos json no formato .gz e gravá-los em um dataframe para trabalho posterior.

Observe que aqui você precisa alterar o caminho novamente para o seu próprio e, em vez de 000000, escrever o número do seu projeto no Amplitude (ou abrir manualmente o caminho onde o arquivo foi extraído e ver o nome da pasta dentro dele).

Em ordem:

Escrevendo um diretório em uma variável, obtendo uma lista de arquivos de um diretório, criando um dataframe vazio, time.sleep(1) para que o tqdm funcione corretamente, dentro do loop abrimos arquivos .gz e imediatamente usamos pandas para ler json e preencher o quadro de dados fornecido.

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

Etapa 3.6. Escrevendo dataframe no Excel

O upload para Excel é apenas um exemplo aqui. Em muitos casos, é mais conveniente trabalhar com o quadro de dados resultante dentro do python ou armazenar os dados.

Você também terá que substituir o caminho de upload de dados aqui pelo seu próprio.

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

Etapa 3.7. Contamos o tempo de execução do script

Registrando o tempo atual na variável b, calculando a diferença e a quantidade de minutos, exibindo o total de minutos. Este é o último passo.

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

Conclusão

Você pode chamar a tabela e começar a trabalhar com ela chamando a variável amplitude_dataframe na qual os dados foram gravados. 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, você deve começar a trabalhar com eles primeiro . E ao comparar os números de seus próprios cálculos com os indicadores dos painéis do Amplitude, você não deve esquecer que o sistema usa sua própria metodologia para calcular clientes/funis únicos, etc., e antes de fazer isso, você definitivamente deve ler a documentação do Amplitude.

Obrigado pela sua atenção! Agora você pode fazer upload de dados brutos de eventos para o Amplitude e usá-los totalmente em seu trabalho.

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

Fonte: habr.com

Adicionar um comentário