Атрыманне дадзеных Amplitude праз API

Увядзенне

Amplitude як прылада прадуктовай аналітыкі вельмі добрае зарэкамендаваў сябе дзякуючы нескладанай наладзе падзей і гнуткасці візуалізацый. І нярэдка ўзнікае запатрабаванне наладзіць уласную мадэль атрыбуцыі, правесці кластарызацыю карыстачоў ці пабудаваць дашборд у іншай BI-сістэме. Выканаць падобную махінацыю магчыма, толькі маючы волкія дадзеныя аб падзеях з Amplitude. Пра тое, як атрымаць гэтыя дадзеныя з мінімальнымі ведамі праграмавання - і будзе ў гэтым артыкуле.

Прэрэквізіт

  1. Праект у Amplitude, у якім ужо карэктна настроены падзеі, і па іх збіраецца статыстыка
  2. Усталяваны python (працую ў версіі 3.8.3), з якім патэнцыйны чытач ужо ўмее працаваць хаця б на базавым узроўні.

Інструкцыя

Крок 1. Атрыманне API-key і secret-key

Каб выгрузіць дадзеныя, у першую чаргу неабходна атрымаць API-key і secret-key.

Знайсці іх можна, перайшоўшы па наступным шляху:

  1. "Manage data" (знаходзіцца ў левай ніжняй частцы экрана)
  2. Выбіраемы патрэбны праект, з якога будуць выгружацца дадзеныя, і пераходзім у яго
  3. У якое адкрылася меню праекта выбіраемы «Project settings»
  4. Знаходзім радкі API-key і secret-key, які капіюецца і захоўваем іх у надзейным месцы.

Без пракліквання можна перайсці па спасылцы, якая ў агульным выглядзе выглядае так:
analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
дзе $$$$$$ - лагін вашай арганізацыі ў amplitude, ****** - нумар праекта

Крок 2. Праверка наяўнасці патрэбных бібліятэк

Добрая навіна ў тым, што гэтыя бібліятэкі амаль напэўна ўжо ў вас устаноўлены па змаўчанні або запампаваны, але праверыць неабходна. Поўны спіс выкарыстоўваных мною бібліятэк на момант напісання артыкула (у дужках пазначаны версіі, дзе дарэчы):

  1. requests (2.10.0)- адпраўленне запыту праз api для атрымання дадзеных
  2. pandas (1.0.1) - чытанне json, стварэнне dataframe і наступны запіс у файл
  3. zipfile - атрымаць файлы з архіва, атрыманага праз API
  4. gzip - распакаванне json файлаў з .gz
  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. Далей запісваем атрыманы адказ ад 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

Дадаць каментар