Увядзенне
Amplitude як прылада прадуктовай аналітыкі вельмі добрае зарэкамендаваў сябе дзякуючы нескладанай наладзе падзей і гнуткасці візуалізацый. І нярэдка ўзнікае запатрабаванне наладзіць уласную мадэль атрыбуцыі, правесці кластарызацыю карыстачоў ці пабудаваць дашборд у іншай BI-сістэме. Выканаць падобную махінацыю магчыма, толькі маючы волкія дадзеныя аб падзеях з Amplitude. Пра тое, як атрымаць гэтыя дадзеныя з мінімальнымі ведамі праграмавання - і будзе ў гэтым артыкуле.
Прэрэквізіт
- Праект у Amplitude, у якім ужо карэктна настроены падзеі, і па іх збіраецца статыстыка
- Усталяваны python (працую ў версіі 3.8.3), з якім патэнцыйны чытач ужо ўмее працаваць хаця б на базавым узроўні.
Інструкцыя
Крок 1. Атрыманне API-key і secret-key
Каб выгрузіць дадзеныя, у першую чаргу неабходна атрымаць API-key і secret-key.
Знайсці іх можна, перайшоўшы па наступным шляху:
- "Manage data" (знаходзіцца ў левай ніжняй частцы экрана)
- Выбіраемы патрэбны праект, з якога будуць выгружацца дадзеныя, і пераходзім у яго
- У якое адкрылася меню праекта выбіраемы «Project settings»
- Знаходзім радкі API-key і secret-key, які капіюецца і захоўваем іх у надзейным месцы.
Без пракліквання можна перайсці па спасылцы, якая ў агульным выглядзе выглядае так:
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+'# Преобразование 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. Запіс 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+'# Импорт библиотек
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