導入
Amplitude は、その簡単なイベント設定と視覚化の柔軟性により、製品分析ツールとして非常に優れていることが証明されています。 また、多くの場合、独自のアトリビューション モデルを設定したり、ユーザーをクラスター化したり、別の BI システムでダッシュボードを構築したりする必要があります。 このような詐欺を実行できるのは、Amplitude からの生のイベント データを使用した場合のみです。 この記事では、最小限のプログラミング知識でこのデータを取得する方法を説明します。
前提条件
- イベントがすでに正しく構成されており、イベントに関する統計が収集されている Amplitude のプロジェクト
- Python がインストールされています (私はバージョン 3.8.3 で作業しています)。潜在的な読者はすでに少なくとも基本レベルで作業できます。
命令
ステップ 1. API キーと秘密キーの取得
データをアップロードするには、まず API キーと秘密キーを取得する必要があります。
次のパスをたどるとそれらを見つけることができます。
- 「データ管理」(画面左下)
- データをダウンロードする目的のプロジェクトを選択し、そこに移動します
- 開いたプロジェクトメニューで「プロジェクト設定」を選択します。
- API キーと秘密キーの文字列を見つけてコピーし、安全な場所に保存します。
クリックせずにリンクをたどることができます。リンクは通常次のようになります。
Analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
$$$$$$ は組織の振幅ログイン、****** はプロジェクト番号です。
ステップ 2: 必要なライブラリの存在を確認する
幸いなことに、これらのライブラリはデフォルトでインストールまたはダウンロードされていることがほとんどですが、確認する必要があります。 執筆時に使用したライブラリの完全なリスト (必要に応じて括弧内のバージョンを示します):
- リクエスト (2.10.0) - データを受信するために API 経由でリクエストを送信します
- pandas (1.0.1) - json を読み取り、データフレームを作成し、ファイルに書き込みます
- zipfile - API 経由で受信したアーカイブからファイルを抽出します
- gzip - .gz からの json ファイルの解凍
- os - 解凍されたアーカイブからファイルのリストを取得する
- time - オプション、スクリプトの実行時間を測定します。
- tqdm - ファイル処理の進行状況を簡単に監視するためのオプション
ステップ 3. データ読み込みスクリプトの作成
ヒント: 完全なダウンロード スクリプトはこの記事の最後にあります。必要に応じて、すぐに入手して、必要に応じてステップバイステップの説明を参照できます。
ステップ3.1。 ライブラリのインポート
XNUMX 番目のステップでリストされたすべてのライブラリをインポートします。
# Импорт библиотек
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 から受信した応答をアーカイブに記録します。
# Скачивание архива с данными
filename = 'period_since'+startdate+'to'+enddate+'_amplitude_data'
with open(filename + '.zip', "wb") as code:
code.write(response.content)
print('2. Архив с файлами успешно скачан')
ステップ3.4。 コンピュータ上のフォルダからファイルを取得する
zipfile ライブラリは、ファイルの抽出に役立ちます。 XNUMX 行目では、抽出しやすい場所にパスを注意して書き留めます。
# Извлечение файлов в папку на компьютере
z = zipfile.ZipFile(filename + '.zip', 'r')
z.extractall(path = 'C:\Users\...\'+filename)
print('3. Архив с файлами извлечен и записан в папку ' + filename)
ステップ3.5。 json変換
アーカイブからファイルを抽出した後、さらなる作業のために json ファイルを .gz 形式に変換し、データフレームに書き込む必要があります。
ここで、パスを自分のものに再度変更し、000000 の代わりに Amplitude からのプロジェクト番号を書き込む必要があることに注意してください (または、アーカイブが抽出されたパスを手動で開き、その中のフォルダーの名前を確認します)。
順番に:
ディレクトリを変数に書き込み、ディレクトリからファイルのリストを取得し、空のデータフレームを作成し、tqdm が正しく動作するように time.sleep(1) します。ループ内で .gz ファイルを開き、すぐに pandas を使用して 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 へのアップロードは、ここでは単なる例です。 多くの場合、結果のデータ フレームを 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+'# Импорт библиотек
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))
出所: habr.com