Truy xuất dữ liệu Biên độ qua API

Giới thiệu

Biên độ đã chứng tỏ mình là một công cụ phân tích sản phẩm rất tốt nhờ khả năng thiết lập sự kiện dễ dàng và tính linh hoạt trực quan hóa. Và thường có nhu cầu thiết lập mô hình phân bổ của riêng bạn, phân nhóm người dùng hoặc xây dựng trang tổng quan trong hệ thống BI khác. Chỉ có thể thực hiện hành vi gian lận như vậy với dữ liệu sự kiện thô từ Biên độ. Bài viết này sẽ cho bạn biết cách lấy dữ liệu này với kiến ​​thức lập trình tối thiểu.

Điều kiện tiên quyết

  1. Một dự án trong Biên độ trong đó các sự kiện đã được định cấu hình chính xác và số liệu thống kê được thu thập về chúng
  2. Python đã được cài đặt (tôi đang làm việc ở phiên bản 3.8.3), mà người đọc tiềm năng có thể đã làm việc được ít nhất ở cấp độ cơ bản

Hướng dẫn

Bước 1. Lấy API-key và secret-key

Để tải dữ liệu lên, trước tiên bạn cần lấy khóa API và khóa bí mật.

Bạn có thể tìm thấy chúng bằng cách đi theo đường dẫn sau:

  1. “Quản lý dữ liệu” (nằm ở phía dưới bên trái màn hình)
  2. Chọn dự án mong muốn mà dữ liệu sẽ được tải xuống và đi đến dự án đó
  3. Trong menu dự án mở ra, chọn “Cài đặt dự án”
  4. Chúng tôi tìm chuỗi khóa API và khóa bí mật, sao chép và lưu chúng ở nơi an toàn.

Không cần nhấp vào, bạn có thể theo liên kết, nhìn chung trông như thế này:
Analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
trong đó $$$$$$ là biên độ đăng nhập của tổ chức bạn, ******* là số dự án

Bước 2: Kiểm tra sự hiện diện của các thư viện cần thiết

Tin vui là bạn gần như chắc chắn đã cài đặt hoặc tải xuống những thư viện này theo mặc định, nhưng bạn cần kiểm tra. Danh sách đầy đủ các thư viện tôi đã sử dụng tại thời điểm viết bài (các phiên bản trong ngoặc đơn được chỉ định khi thích hợp):

  1. yêu cầu (2.10.0) - gửi yêu cầu qua api để nhận dữ liệu
  2. pandas (1.0.1) - đọc json, tạo khung dữ liệu và sau đó ghi vào tệp
  3. zipfile - giải nén tệp từ kho lưu trữ nhận được qua API
  4. gzip - giải nén các tệp json từ .gz
  5. os - lấy danh sách các tập tin từ kho lưu trữ đã giải nén
  6. thời gian - tùy chọn, đo thời gian chạy của tập lệnh
  7. tqdm - tùy chọn, để dễ dàng theo dõi tiến trình xử lý tệp

Bước 3. Viết script tải dữ liệu

Gợi ý: tập lệnh tải xuống đầy đủ nằm ở cuối bài viết, nếu muốn, bạn có thể lấy ngay và tham khảo phần giải thích từng bước nếu cần.

Bước 3.1. Nhập thư viện

Chúng tôi nhập tất cả các thư viện được liệt kê ở bước thứ hai.

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

Bước 3.2. Gửi yêu cầu tới Biên độ

Hãy phát hiện thời điểm bắt đầu thực thi tập lệnh và ghi nó vào biến a.

ngày bắt đầu và ngày kết thúc chịu trách nhiệm về khoảng thời gian tải xuống dữ liệu và được tích hợp vào văn bản của yêu cầu được gửi đến máy chủ Biên độ; ngoài ngày, bạn cũng có thể chỉ định giờ bằng cách thay đổi giá trị sau chữ 'T' trong yêu cầu.

api_key và secret_key tương ứng với các giá trị thu được ở bước đầu tiên; vì lý do bảo mật, tôi chỉ định các chuỗi ngẫu nhiên ở đây thay vì của riêng tôi.

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

Bước 3.3. Tải xuống kho lưu trữ có dữ liệu

Chúng tôi nghĩ ra tên cho kho lưu trữ và ghi nó vào biến tên tệp. Để thuận tiện, tôi chỉ ra khoảng thời gian + cho biết đây là dữ liệu biên độ. Tiếp theo, chúng tôi ghi lại phản hồi nhận được từ Biên độ vào kho lưu trữ.

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

Bước 3.4. Truy xuất tập tin từ một thư mục trên máy tính của bạn

Thư viện zipfile có tác dụng giúp giải nén các tập tin. Ở dòng thứ ba, hãy cẩn thận và viết ra đường dẫn của bạn ở nơi thuận tiện hơn cho bạn khi giải nén.

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

Bước 3.5. chuyển đổi json

Sau khi giải nén các tệp từ kho lưu trữ, bạn cần chuyển đổi các tệp json ở định dạng .gz và ghi chúng vào khung dữ liệu để tiếp tục công việc.

Xin lưu ý rằng ở đây, bạn cần thay đổi lại đường dẫn thành đường dẫn của riêng mình và thay vì 000000, hãy ghi số dự án của bạn từ Biên độ (hoặc mở thủ công đường dẫn nơi kho lưu trữ được giải nén và xem tên của thư mục bên trong).

Theo thứ tự:

Viết thư mục vào một biến, lấy danh sách các tệp từ một thư mục, tạo một khung dữ liệu trống, time.sleep(1) để tqdm hoạt động chính xác, bên trong vòng lặp, chúng ta mở các tệp .gz và ngay lập tức sử dụng pandas để đọc json và điền vào khung dữ liệu đã cho.

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

Bước 3.6. Viết khung dữ liệu trong excel

Việc tải lên excel chỉ là một ví dụ ở đây. Trong nhiều trường hợp, sẽ thuận tiện hơn khi làm việc với khung dữ liệu kết quả bên trong python hoặc đưa dữ liệu vào bộ lưu trữ.

Bạn cũng sẽ phải thay thế đường dẫn tải lên dữ liệu ở đây bằng đường dẫn của riêng bạn.

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

Bước 3.7. Chúng tôi đếm thời gian chạy của tập lệnh

Ghi thời gian hiện tại vào biến b, tính chênh lệch và số phút, hiển thị tổng số phút. Đây là bước cuối cùng.

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

Kết luận

Bạn có thể gọi bảng và bắt đầu làm việc với nó bằng cách gọi biến biên độ_dataframe mà dữ liệu được ghi vào đó. Nó sẽ có khoảng 50 cột, trong đó 80% trường hợp bạn sẽ sử dụng: event_type - tên sự kiện, event_properties - thông số sự kiện, event_time - thời gian sự kiện, uuid - id khách hàng, user_properties - thông số khách hàng, bạn nên bắt đầu làm việc với chúng trước . Và khi so sánh số liệu từ các phép tính của riêng bạn với các chỉ báo từ bảng điều khiển Biên độ, bạn không được quên rằng hệ thống sử dụng phương pháp riêng để tính toán các khách hàng/phễu duy nhất, v.v. và trước khi thực hiện việc này, bạn chắc chắn nên đọc tài liệu Biên độ.

Cám ơn vì sự quan tâm của bạn! Giờ đây, bạn có thể tải dữ liệu sự kiện thô lên Amplitude và sử dụng đầy đủ dữ liệu đó trong công việc của mình.

Toàn bộ kịch bản:

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

Nguồn: www.habr.com

Thêm một lời nhận xét