Reakiro de Amplitudaj datumoj per API

Enkonduko

Amplitude pruvis sin tre bone kiel produkto-analitika ilo pro sia facila aranĝa aranĝo kaj bildiga fleksebleco. Kaj ofte necesas agordi vian propran atribuan modelon, amasigi uzantojn aŭ konstrui instrumentpanelon en alia BI-sistemo. Eblas fari tian fraŭdon nur kun krudaj okazaj datumoj de Amplitude. Ĉi tiu artikolo diros al vi kiel akiri ĉi tiujn datumojn kun minimuma programado.

Antaŭkondiĉoj

  1. Projekto en Amplitude, en kiu eventoj jam ĝuste agordas kaj statistikoj estas kolektitaj pri ili
  2. Python estas instalita (mi laboras en versio 3.8.3), kun kiu la eventuala leganto jam povas labori almenaŭ je baza nivelo.

Instrukcioj

Paŝo 1. Akirante API-ŝlosilon kaj sekretan ŝlosilon

Por alŝuti datumojn, vi unue devas akiri API-ŝlosilon kaj sekretan ŝlosilon.

Vi povas trovi ilin sekvante la sekvan vojon:

  1. "Administri datumojn" (situanta malsupre maldekstre de la ekrano)
  2. Elektu la deziratan projekton el kiu datumoj estos elŝutitaj kaj iru al ĝi
  3. En la projekto menuo kiu malfermiĝas, elektu "Projektaj agordoj"
  4. Ni trovas la API-ŝlosilajn kaj sekretajn ŝlosilojn, kopiu kaj konservas ilin en sekura loko.

Sen klako, vi povas sekvi la ligilon, kiu ĝenerale aspektas jene:
analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
kie $$$$$$ estas la ampleksa ensaluto de via organizo, ****** estas la projektnumero

Paŝo 2: Kontrolante la ĉeeston de la bezonataj bibliotekoj

La bona novaĵo estas, ke vi preskaŭ certe jam havas ĉi tiujn bibliotekojn instalitajn defaŭlte aŭ elŝutitajn, sed vi devas kontroli. La kompleta listo de bibliotekoj kiujn mi uzis dum la skribado (versioj inter krampoj estas indikitaj kie konvene):

  1. petoj (2.10.0) - sendante peton per api por ricevi datumojn
  2. pandas (1.0.1) - legante json, kreante datumkadron kaj poste skribante al dosiero
  3. zipfile - ĉerpi dosierojn el arkivo ricevita per la API
  4. gzip - malpakante json dosierojn de .gz
  5. os - ricevi liston de dosieroj el malpakita arkivo
  6. tempo - nedeviga, mezuru la rultempon de la skripto
  7. tqdm - nedeviga, por facila monitorado de progreso de dosiero prilaborado

Paŝo 3. Skribante datuman ŝargan skripton

Konsilo: la plena elŝuta skripto estas ĉe la fino de la artikolo; se vi volas, vi povas tuj preni ĝin kaj referenci al la paŝo post paŝo klarigoj se necese.

Paŝo 3.1. Importado de bibliotekoj

Ni importas ĉiujn bibliotekojn listigitajn en la dua paŝo.

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

Paŝo 3.2. Sendante peton al Amplitude

Ni detektu la komencon de skripto-ekzekuto kaj skribu ĝin al variablo a.

startdato kaj findato respondecas pri la periodo por elŝuti datumojn kaj estas enkonstruitaj en la teksto de la sendita peto al la Amplitude-servilo; krom la dato, vi ankaŭ povas specifi la horon ŝanĝante la valoron post 'T' en la peto.

api_key kaj secret_key respondas al la valoroj akiritaj en la unua paŝo; pro sekurecaj kialoj, mi specifas ĉi tie hazardajn sekvencojn anstataŭ miajn proprajn.

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

Paŝo 3.3. Elŝuti arkivon kun datumoj

Ni elpensas nomon por la arkivo kaj skribas ĝin al la dosiernomo variablo. Por mia komforto, mi indikas la periodon + indikas, ke tio estas amplekso-datumoj. Poste ni registras la ricevitan respondon de Amplitude en la arkivon.

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

Paŝo 3.4. Prenante dosierojn el dosierujo en via komputilo

La zipfile-biblioteko venas en ludon por helpi ĉerpi dosierojn. En la tria linio, estu singarda kaj skribu vian vojon, kie estas pli oportune por vi ĉerpi.

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

Paŝo 3.5. json konvertiĝo

Post eltiri la dosierojn el la arkivo, vi devas konverti json-dosierojn en .gz-formato kaj skribi ilin en datumkadron por plua laboro.

Bonvolu noti, ke ĉi tie vi devas ŝanĝi la vojon denove al via, kaj anstataŭ 000000 skribi vian projektan numeron el Amplitude (aŭ permane malfermi la vojon, kie la arkivo estis eltirita kaj rigardi la nomon de la dosierujo ene).

En ordo:

Skribante dosierujon al variablo, ricevi liston de dosieroj el dosierujo, kreante malplenan datumkadron, time.sleep(1) por ke tqdm funkciu ĝuste, ene de la buklo ni malfermas .gz-dosierojn kaj tuj uzas pandojn por legi json kaj plenigi. la donita datumkadro.

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

Paŝo 3.6. Skribante datumkadron en Excel

La alŝuto al excel estas nur ekzemplo ĉi tie. En multaj kazoj, estas pli oportune labori kun la rezulta datumkadro ene de python aŭ meti la datumojn en stokado.

Vi ankaŭ devos anstataŭigi la datuman alŝutan vojon ĉi tie per via propra.

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

Paŝo 3.7. Ni kalkulas la rultempon de la skripto

Registrante la nunan tempon en la variablo b, kalkulante la diferencon kaj la nombron da minutoj, montrante la totalajn minutojn. Ĉi tiu estas la lasta paŝo.

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

konkludo

Vi povas voki la tablon kaj komenci labori kun ĝi vokante la variablon amplitude_dataframe en kiu la datumoj estis skribitaj. Ĝi havos ĉirkaŭ 50 kolumnojn, el kiuj en 80% de kazoj vi uzos: event_type - event name, event_properties - event parametroj, event_time - event time, uuid - kliento id, user_properties - kliento parametroj, vi unue komencu labori kun ili. . Kaj kiam vi komparas ciferojn de viaj propraj kalkuloj kun indikiloj de Amplitude paneloj, vi ne forgesu, ke la sistemo uzas sian propran metodaron por kalkuli unikajn klientojn/funelojn ktp., kaj antaŭ ol fari tion, vi certe devas legi la dokumentaron de Amplitude.

Dankon pro via atento! Nun vi povas alŝuti krudajn okazaĵajn datumojn al Amplitude kaj plene uzi ĝin en via laboro.

Tuta skripto:

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

fonto: www.habr.com

Aldoni komenton