استرداد بيانات السعة عبر API

مقدمة

لقد أثبتت Amplitude نفسها كأداة لتحليل المنتجات نظرًا لسهولة إعداد الأحداث ومرونة التصور. وغالبًا ما تكون هناك حاجة لإعداد نموذج الإسناد الخاص بك، أو مجموعة المستخدمين، أو إنشاء لوحة معلومات في نظام ذكاء أعمال آخر. لا يمكن إجراء مثل هذا الاحتيال إلا باستخدام بيانات الأحداث الأولية من Amplitude. ستخبرك هذه المقالة بكيفية الحصول على هذه البيانات بأقل قدر من المعرفة البرمجية.

المتطلبات الأساسية

  1. مشروع في Amplitude يتم فيه تكوين الأحداث بشكل صحيح ويتم جمع الإحصائيات عنها
  2. تم تثبيت Python (أنا أعمل في الإصدار 3.8.3)، والذي يمكن للقارئ المحتمل العمل معه بالفعل على المستوى الأساسي على الأقل

تعليمات

الخطوة 1. الحصول على مفتاح API والمفتاح السري

لتحميل البيانات، تحتاج أولاً إلى الحصول على مفتاح واجهة برمجة التطبيقات (API) والمفتاح السري.

يمكنك العثور عليهم باتباع المسار التالي:

  1. "إدارة البيانات" (الموجودة في أسفل يسار الشاشة)
  2. حدد المشروع المطلوب الذي سيتم تنزيل البيانات منه وانتقل إليه
  3. في قائمة المشروع التي تفتح، حدد "إعدادات المشروع"
  4. نجد سلاسل مفتاح API والمفتاح السري وننسخها ونحفظها في مكان آمن.

بدون النقر، يمكنك اتباع الرابط الذي يبدو بشكل عام كما يلي:
analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
حيث $$$$$$ هو رقم تسجيل الدخول لمؤسستك، و****** هو رقم المشروع

الخطوة 2: التحقق من وجود المكتبات المطلوبة

والخبر السار هو أنه من المؤكد تقريبًا أن هذه المكتبات مثبتة بالفعل أو تم تنزيلها بشكل افتراضي، ولكن عليك التحقق. القائمة الكاملة للمكتبات التي استخدمتها وقت كتابة هذا التقرير (يُشار إلى الإصدارات الموجودة بين قوسين عند الاقتضاء):

  1. الطلبات (2.10.0) - إرسال طلب عبر واجهة برمجة التطبيقات لتلقي البيانات
  2. الباندا (1.0.1) - قراءة json وإنشاء إطار بيانات ثم الكتابة إلى ملف
  3. zipfile - استخراج الملفات من الأرشيف المستلم عبر واجهة برمجة التطبيقات
  4. gzip - تفريغ ملفات json من .gz
  5. نظام التشغيل - الحصول على قائمة الملفات من أرشيف غير مضغوط
  6. الوقت - اختياري، قم بقياس وقت تشغيل البرنامج النصي
  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. تقديم طلب إلى السعة

لنكتشف بداية تنفيذ البرنامج النصي ونكتبه في المتغير a.

يعد تاريخ البدء وتاريخ الانتهاء مسؤولين عن فترة تنزيل البيانات ويتم تضمينهما في نص الطلب المرسل إلى خادم 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. تنزيل أرشيف مع البيانات

نتوصل إلى اسم للأرشيف ونكتبه في متغير اسم الملف. لراحتي، أشير إلى الفترة + أشير إلى أن هذه بيانات السعة. بعد ذلك، نقوم بتسجيل الاستجابة المستلمة من 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 بتنسيق .gz وكتابتها في إطار بيانات لمزيد من العمل.

يرجى ملاحظة أنك هنا تحتاج إلى تغيير المسار مرة أخرى إلى المسار الخاص بك، وبدلاً من 000000، اكتب رقم مشروعك من Amplitude (أو افتح المسار الذي تم استخراج الأرشيف فيه يدويًا وانظر إلى اسم المجلد الموجود بالداخل).

مرتب:

كتابة دليل لمتغير، والحصول على قائمة الملفات من الدليل، وإنشاء إطار بيانات فارغ، time.sleep(1) لكي يعمل tqdm بشكل صحيح، داخل الحلقة نفتح ملفات .gz ونستخدم الباندا على الفور لقراءة json وملء إطار البيانات المحدد.

# Преобразование 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. كتابة إطار البيانات في Excel

التحميل إلى Excel هو مجرد مثال هنا. في كثير من الحالات، يكون من الملائم أكثر العمل مع إطار البيانات الناتج داخل بايثون أو تخزين البيانات.

سيتعين عليك أيضًا استبدال مسار تحميل البيانات هنا بمسارك الخاص.

# Записать полученной таблицы в 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 - اسم الحدث، events_properties - معلمات الحدث، events_time - وقت الحدث، uuid - معرف العميل، 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))

المصدر: www.habr.com

إضافة تعليق