Въведение
Amplitude като инструмент за продуктова аналитика се е доказал много добре благодарение на лесната настройка на събития и гъвкавостта на визуализациите. Често възниква необходимостта да се изградят собствени модели на атрибуция, да се класифицират потребители или да се създаде табло в друга BI система. Подобна операция е възможна само при наличие на сурови данни за събитията от Amplitude. В тази статия ще разгледаме как да получите тези данни с минимални познания по програмиране.
Пререквизит
- Проект в Amplitude, в който вече са настроени правилно събития и статистика се събира за тях
- Инсталиран python (работя с версия 3.8.3), с който потенциалният читател вече умее да работи поне на основно ниво
Инструкция
Стъпка 1. Получаване на API-ключ и secret-ключ
За да изтеглите данни, първо трябва да получите API-ключ и secret-ключ.
Можете да ги намерите, като преминете през следния път:
- «Управление на данни» (намира се в долния ляв ъгъл на екрана)
- Избираме проекта, от който ще изтегляме данни, и преминаваме в него
- В отвореното меню на проекта избираме «Настройки на проекта»
- Намираме редовете API-ключ и secret-ключ, копираме и ги запазваме на сигурно място.
Без кликане можете да отидете на връзката, която в общ вид изглежда така:
analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
където $$$$$$ — логинът на вашата организация в amplitude, ****** — номерът на проекта
Стъпка 2. Проверка за наличие на необходимите библиотеки
Добрата новина е, че тези библиотеки почти със сигурност вече са инсталирани по подразбиране или свалени, но е необходимо да се провери. Пълен списък на библиотеките, които ползвам в момента на написването на статията (в скобите са посочени версиите, където е уместно):
- requests (2.10.0) - изпращане на заявка през api за получаване на данни
- pandas (1.0.1) — четене на json, създаване на dataframe и последващо записване във файл
- zipfile — извличане на файлове от архива, получен чрез API
- gzip — разархивиране на json файлове от .gz
- os — получаване на списък с файлове от разархивирания архив
- time — незадължително, измерване на времето за изпълнение на скрипта
- 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. След това записвам получения отговор от 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, и да ги запишете в dataframe за по-нататъшна работа.
Обърнете внимание, че тук трябва отново да смените пътя с вашия, а вместо 000000 да напишете номера на вашия проект от Amplitude (или да отворите ръчно пътя, където е извлечен архива, и да видите името на папката вътре).
По ред на следване:
Записване на директорията в променлива, получаване на списък с файлове от директорията, създаване на празен датафрейм, time.sleep(1) за коректно функциониране на tqdm, вътре в цикъла отваряме .gz файловете и веднага с помощта на pandas четем json и запълваме зададения dataframe.
# Преобразование 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')
Стъпка 3.6. Записване на dataframe в 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+'\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))
Източник: habr.com
