Получаване на данни от Amplitude чрез API

Въведение

Amplitude като инструмент за продуктова аналитика е доказал ефективността си благодарение на лесната настройка на събития и гъвкавостта на визуализациите. Често възниква необходимостта да се създаде собствена атрибутивна модел, да се проведе кластеризация на потребителите или да се изгради табло в друга BI система. Изпълнението на подобна операция е възможно само с налични сурови данни за събития от Amplitude. В тази статия ще разгледаме как да получите тези данни с минимални познания по програмиране.

Предварителни условия

  1. Проект в Amplitude, в който вече са настроени правилно събитията и се събира статистика
  2. Инсталиран python (работя с версия 3.8.3), с който потенциалният читател вече трябва да може да работи поне на базово ниво

Инструкция

Стъпка 1. Получаване на API-ключ и secret-ключ

За да изтеглим данни, първо трябва да получим API-ключ и secret-ключ.

Можете да ги намерите, като следвате следния път:

  1. «Управление на данни» (намира се в долния ляв ъгъл на екрана)
  2. Избираме нужния проект, от който ще се извлекат данните, и преминаваме в него
  3. В отвореното меню на проекта избираме «Настройки на проекта»
  4. Намираме редовете API-ключ и secret-ключ, копираме ги и ги запазваме на сигурно място.

Без кликания можем да преминем по линка, който в общ вид изглежда така:
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 (или ръчно да отворите пътя, където е извлечен архива, и да видите името на папката в него).

По реда на следване:

Записване на директорията в променлива, получаване на списък с файлове от директорията, създаване на празен dataframe, 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster