Pobieranie danych Amplitude poprzez API

Wprowadzenie

Amplitude sprawdziła się bardzo dobrze jako narzędzie do analizy produktu ze względu na łatwą konfigurację zdarzeń i elastyczność wizualizacji. Często pojawia się także konieczność skonfigurowania własnego modelu atrybucji, klastrowania użytkowników lub zbudowania dashboardu w innym systemie BI. Takiego oszustwa można dokonać jedynie na podstawie surowych danych o zdarzeniach z Amplitude. W tym artykule dowiesz się, jak uzyskać te dane przy minimalnej wiedzy programistycznej.

Warunki wstępne

  1. Projekt w Amplitude, w którym zdarzenia są już poprawnie skonfigurowane i zbierane są na ich temat statystyki
  2. Zainstalowany jest Python (pracuję w wersji 3.8.3), z którym potencjalny czytelnik może już pracować przynajmniej na podstawowym poziomie

Instrukcja

Krok 1. Uzyskanie klucza API i tajnego klucza

Aby przesłać dane, należy najpierw uzyskać klucz API i tajny klucz.

Można je znaleźć, podążając następującą ścieżką:

  1. „Zarządzaj danymi” (znajduje się w lewym dolnym rogu ekranu)
  2. Wybierz żądany projekt, z którego zostaną pobrane dane i przejdź do niego
  3. W otwartym menu projektu wybierz „Ustawienia projektu”
  4. Znajdujemy klucz API i ciągi tajnego klucza, kopiujemy je i zapisujemy w bezpiecznym miejscu.

Bez klikania można skorzystać z linku, który ogólnie wygląda tak:
analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
gdzie $$$$$$ to login amplitudy Twojej organizacji, ****** to numer projektu

Krok 2: Sprawdzenie obecności wymaganych bibliotek

Dobra wiadomość jest taka, że ​​prawie na pewno masz już te biblioteki domyślnie zainstalowane lub pobrane, ale musisz to sprawdzić. Pełna lista bibliotek, z których korzystałem w momencie pisania tego tekstu (w stosownych przypadkach podano wersje w nawiasach):

  1. żądania (2.10.0) - wysyłanie żądania poprzez API w celu otrzymania danych
  2. pandas (1.0.1) - czytanie jsona, tworzenie ramki danych, a następnie zapisywanie do pliku
  3. zipfile - wyodrębnia pliki z archiwum otrzymanego poprzez API
  4. gzip - rozpakowywanie plików json z .gz
  5. os — pobieranie listy plików z rozpakowanego archiwum
  6. time - opcjonalnie, mierzy czas działania skryptu
  7. tqdm - opcjonalny, umożliwiający łatwe monitorowanie postępu przetwarzania plików

Krok 3. Napisanie skryptu ładującego dane

Wskazówka: pełny skrypt do pobrania znajduje się na końcu artykułu, jeśli chcesz, możesz go od razu pobrać i w razie potrzeby zapoznać się z wyjaśnieniami krok po kroku.

Krok 3.1. Importowanie bibliotek

Importujemy wszystkie biblioteki wymienione w drugim kroku.

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

Krok 3.2. Przesyłanie zapytania do Amplitude

Wykryjmy początek wykonywania skryptu i zapiszmy go do zmiennej a.

startdate i enddate odpowiadają za okres przesyłania danych i są wbudowane w treść żądania wysyłanego do serwera Amplitude; oprócz daty można również określić godzinę, zmieniając wartość po literze „T” w żądaniu.

api_key i secret_key odpowiadają wartościom uzyskanym w pierwszym kroku, ze względów bezpieczeństwa podaję tutaj losowe sekwencje zamiast własnych.

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

Krok 3.3. Pobieranie archiwum z danymi

Wymyślamy nazwę archiwum i zapisujemy ją do zmiennej filename. Dla mojej wygody wskazuję okres + wskazuje, że są to dane dotyczące amplitudy. Następnie rejestrujemy otrzymaną odpowiedź od Amplitude do archiwum.

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

Krok 3.4. Pobieranie plików z folderu na komputerze

Biblioteka zipfile wchodzi w grę, aby pomóc w wyodrębnieniu plików. W trzeciej linii zachowaj ostrożność i zapisz swoją ścieżkę, w której wygodniej będzie Ci wyodrębnić.

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

Krok 3.5. konwersja jsona

Po wypakowaniu plików z archiwum należy przekonwertować pliki json do formatu .gz i zapisać je w ramce danych w celu dalszej pracy.

Pamiętaj, że tutaj musisz ponownie zmienić ścieżkę na własną i zamiast 000000 wpisz numer swojego projektu z Amplitude (lub ręcznie otwórz ścieżkę, do której rozpakowano archiwum i spójrz na nazwę folderu w środku).

W celu:

Zapisanie katalogu do zmiennej, pobranie listy plików z katalogu, utworzenie pustej ramki danych, time.sleep(1) aby tqdm działał poprawnie, wewnątrz pętli otwieramy pliki .gz i od razu używamy pand do odczytania jsona i wypełnienia daną ramkę danych.

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

Krok 3.6. Zapisywanie ramki danych w Excelu

Przesyłanie do programu Excel jest tutaj tylko przykładem. W wielu przypadkach wygodniej jest pracować z wynikową ramką danych w Pythonie lub przechowywać dane.

Będziesz także musiał zastąpić tutaj ścieżkę przesyłania danych własną.

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

Krok 3.7. Liczymy czas działania skryptu

Zapisanie aktualnego czasu w zmiennej b, obliczenie różnicy i liczby minut, wyświetlenie sumy minut. To jest ostatni krok.

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

wniosek

Możesz wywołać tabelę i rozpocząć z nią pracę wywołując zmienną amplitude_dataframe, do której zostały zapisane dane. Będzie miał około 50 kolumn, z czego w 80% przypadków użyjesz: event_type - nazwa zdarzenia, event_properties - parametry zdarzenia, event_time - czas zdarzenia, uuid - identyfikator klienta, user_properties - parametry klienta, powinieneś najpierw zacząć z nimi pracować . A porównując dane z własnych obliczeń ze wskaźnikami z dashboardów Amplitude, nie wolno zapominać, że system stosuje własną metodologię wyliczania unikalnych klientów/lejków itp. i przed wykonaniem tej czynności zdecydowanie warto zapoznać się z dokumentacją Amplitude.

Dziękuję za uwagę! Teraz możesz przesłać surowe dane o zdarzeniach do Amplitude i w pełni wykorzystać je w swojej pracy.

Cały skrypt:

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

Źródło: www.habr.com

Dodaj komentarz