通过 API 检索幅度数据

介绍

由于其简单的事件设置和可视化灵活性,Amplitude 已证明自己是一款出色的产品分析工具。 通常需要建立自己的归因模型、集群用户或在另一个 BI 系统中构建仪表板。 只能使用 Amplitude 的原始事件数据来执行此类欺诈。 本文将告诉您如何以最少的编程知识获取这些数据。

先决条件

  1. Amplitude 中的一个项目,其中事件已正确配置并收集了统计数据
  2. Python 已经安装(我正在使用 3.8.3 版本),潜在读者至少已经可以在基础水平上使用它

说明

步骤1.获取API-key和secret-key

上传数据首先需要获取API key和秘钥。

您可以通过以下路径找到它们:

  1. “管理数据”(位于屏幕左下角)
  2. 选择要从中下载数据的所需项目并转到该项目
  3. 在打开的项目菜单中,选择“项目设置”
  4. 我们找到 API 密钥和秘密密钥字符串,复制并将它们保存在安全的地方。

无需点击,您就可以点击链接,该链接通常如下所示:
analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
其中 $$$$$$ 是您组织的振幅登录名,******** 是项目编号

第 2 步:检查所需库是否存在

好消息是,您几乎肯定已经默认安装或下载了这些库,但您需要检查。 我在撰写本文时使用的库的完整列表(括号中的版本在适当的情况下表示):

  1. requests (2.10.0) - 通过 api 发送请求以接收数据
  2. pandas (1.0.1) - 读取 json,创建数据帧,然后写入文件
  3. zipfile - 从通过 API 接收的存档中提取文件
  4. gzip - 从 .gz 解压 json 文件
  5. os - 从解压的存档中获取文件列表
  6. time - 可选,测量脚本的运行时间
  7. tqdm - 可选,用于轻松监控文件处理进度

步骤3.编写数据加载脚本

提示:完整的下载脚本位于文章末尾;如果您愿意,可以立即获取并在必要时参考分步说明。

步骤 3.1。 导入库

我们导入第二步中列出的所有库。

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

步骤 3.2。 向 Amplitude 提交请求

让我们检测脚本执行的开始并将其写入变量 a。

startdate 和 enddate 负责下载数据的时间段,并内置于向 Amplitude 服务器发送的请求文本中;除了日期之外,您还可以通过更改请求中“T”后面的值来指定小时。

api_key和secret_key对应第一步获得的值;出于安全考虑,我在这里指定随机序列而不是我自己的。

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

步骤 3.3。 下载包含数据的存档

我们为存档命名并将其写入 filename 变量。 为了方便起见,我用周期+表示这是幅度数据。 接下来,我们将从 Amplitude 收到的响应记录到存档中。

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

步骤 3.4。 从计算机上的文件夹中检索文件

zipfile 库可以帮助提取文件。 在第三行中,请小心并写下您更方便提取的路径。

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

步骤 3.5。 json转换

从存档中提取文件后,您需要将 json 文件转换为 .gz 格式并将其写入数据帧以供进一步工作。

请注意,这里您需要再次将路径更改为您自己的路径,而不是 000000 写入 Amplitude 中的项目编号(或手动打开解压存档的路径并查看其中文件夹的名称)。

为了:

将目录写入变量,从目录中获取文件列表,创建一个空数据框,time.sleep(1) 以使 tqdm 正常工作,在循环中我们打开 .gz 文件并立即使用 pandas 读取 json 并填充给定的数据框。

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

步骤 3.6。 在Excel中写入数据框

这里上传到excel只是一个例子。 在许多情况下,在 python 中处理生成的数据框或将数据存储起来会更方便。

您还必须将此处的数据上传路径替换为您自己的。

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

步骤 3.7。 我们计算脚本的运行时间

将当前时间记录在变量b中,计算差值和分钟数,显示总分钟数。 这是最后一步。

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

结论

您可以通过调用写入数据的amplitude_dataframe 变量来调用该表并开始使用它。 它将有大约 50 列,其中 80% 的情况下您将使用:event_type - 事件名称、event_properties - 事件参数、event_time - 事件时间、uuid - 客户端 ID、user_properties - 客户端参数,您应该首先开始使用它们。 当将您自己计算的数字与 Amplitude 仪表板的指标进行比较时,您一定不要忘记系统使用自己的方法来计算独特的客户/渠道等,在执行此操作之前,您一定应该阅读 Amplitude 文档。

感谢您的关注! 现在,您可以将原始事件数据上传到 Amplitude 并在工作中充分使用它。

整个脚本:

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

来源: habr.com

添加评论