เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™ Amplitude เบœเปˆเบฒเบ™ API

เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบต

เบ„เบงเบฒเบกเบเบงเป‰เบฒเบ‡เปƒเบซเบเปˆเป„เบ”เป‰เบžเบดเบชเบนเบ”เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เป„เบ”เป‰เบ”เบตเบซเบผเบฒเบเป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเปเบฅเบฐเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เปƒเบ™เบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™. เปเบฅเบฐเป€เบฅเบทเป‰เบญเบเป†เบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบšเบšเบเบฒเบ™เปƒเบซเป‰เป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡, เบœเบนเป‰เปƒเบŠเป‰เบเบธเปˆเบก, เบซเบผเบทเบชเป‰เบฒเบ‡ dashboard เปƒเบ™เบฅเบฐเบšเบปเบš BI เบญเบทเปˆเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเปเป‰เป‚เบเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบซเบ”เบเบฒเบ™เบ”เบดเบšเบˆเบฒเบ Amplitude. เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เบ™เบตเป‰โ€‹เบˆเบฐโ€‹เบšเบญเบโ€‹เบ—เปˆเบฒเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ™เบตเป‰โ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบฎเบนเป‰โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบซเบ™เป‰เบญเบโ€‹.

เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™

  1. เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ Amplitude เบ—เบตเปˆเป€เบซเบ”เบเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเป‰เบงเปเบฅเบฐเบชเบฐเบ–เบดเบ•เบดเป„เบ”เป‰เบ–เบทเบเป€เบเบฑเบšเบเปเบฒเบเปˆเบฝเบงเบเบฑเบšเบžเบงเบเบกเบฑเบ™
  2. Python เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡ (เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบฎเบธเปˆเบ™ 3.8.3), เป€เบŠเบดเปˆเบ‡เบœเบนเป‰เบญเปˆเบฒเบ™เบ—เบตเปˆเบกเบตเบ—เปˆเบฒเปเบฎเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเปƒเบ™เบฅเบฐเบ”เบฑเบšเบžเบทเป‰เบ™เบ–เบฒเบ™.

เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 1. เป„เบ”เป‰เบฎเบฑเบš API-key เปเบฅเบฐ secret-key

เป€เบžเบทเปˆเบญเบญเบฑเบšเป‚เบซเบฅเบ”เบ‚เปเป‰เบกเบนเบ™, เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ” เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบฅเบฐเบซเบฑเบ” API เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เบฅเบฑเบš.

เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบžเบงเบเบกเบฑเบ™เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  1. โ€œเบˆเบฑเบ”เบเบฒเบ™เบ‚เปเป‰เบกเบนเบ™โ€ (เบขเบนเปˆเบฅเบธเปˆเบกเบŠเป‰เบฒเบเบ‚เบญเบ‡เปœเป‰เบฒเบˆเป)
  2. เป€เบฅเบทเบญเบเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฒเบเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบˆเบฐเบ”เบฒเบงเป‚เบซเบฅเบ”เปเบฅเบฐเป„เบ›เบซเบฒเบกเบฑเบ™
  3. เปƒเบ™เป€เบกเบ™เบนเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเป€เบ›เบตเบ”, เป€เบฅเบทเบญเบ "เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™"
  4. เบžเบงเบเป€เบฎเบปเบฒเบŠเบญเบเบซเบฒ API-key เปเบฅเบฐ secret-key strings, เบ„เบฑเบ”เบฅเบญเบเปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบžเบงเบเบกเบฑเบ™เป„เบงเป‰เปƒเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบ›เบญเบ”เป„เบž.

เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เป€เบŠเบดเปˆเบ‡เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰:
analytics.amplitude.com/$$$$$$$/manage/project/******/settings,
เบšเปˆเบญเบ™เบ—เบตเปˆ $$$$$$ เปเบกเปˆเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบญเบปเบ‡เบเบฒเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ, ****** เปเบกเปˆเบ™เบ•เบปเบงเป€เบฅเบเป‚เบ„เบ‡เบเบฒเบ™

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 2: เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบกเบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™

เบ‚เปˆเบฒเบงเบ”เบตเปเบกเปˆเบ™เบงเปˆเบฒเป€เบˆเบปเป‰เบฒเป€เบเบทเบญเบšเปเบ™เปˆเบ™เบญเบ™เบกเบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป„เบงเป‰เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบซเบผเบทเบ”เบฒเบงเป‚เบซเบฅเบ”, เปเบ•เปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบงเบ”เป€เบšเบดเปˆเบ‡. เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป€เบ•เบฑเบกเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰เปƒเบ™เป€เบงเบฅเบฒเบ‚เบฝเบ™ (เบชเบฐเบšเบฑเบšเปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเบ–เบทเบเบฅเบฐเบšเบธเบšเปˆเบญเบ™เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก):

  1. requests (2.10.0) - เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบœเปˆเบฒเบ™ api เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™
  2. pandas (1.0.1) - เบญเปˆเบฒเบ™ json, เบชเป‰เบฒเบ‡ dataframe เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เบฝเบ™เปƒเบชเปˆเป„เบŸเบฅเปŒ
  3. zipfile - เบชเบฐเบเบฑเบ”เป„เบŸเบฅเปŒเบˆเบฒเบเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบœเปˆเบฒเบ™ API
  4. gzip - unpacking เป„เบŸเบฅเปŒ json เบˆเบฒเบ .gz
  5. os - เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบˆเบฒเบเบเบฒเบ™เบฎเบงเบšเบฎเบงเบก unpacked
  6. time - เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบงเบฑเบ”เปเบ—เบเป€เบงเบฅเบฒเปเบฅเปˆเบ™เบ‚เบญเบ‡ script
  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. เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰ Amplitude

เบ‚เปเปƒเบซเป‰เบเบงเบ”เบžเบปเบšเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” script เปเบฅเบฐเบ‚เบฝเบ™เบกเบฑเบ™เปƒเบชเปˆเบ•เบปเบงเปเบ› 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. เบเบณเบฅเบฑเบ‡เบ”เบฒเบงเป‚เบซเบผเบ”เปเบŸเป‰เบกเบˆเบฑเบ”เป€เบเบฑเบšเบ”เป‰เบงเบเบ‚เปเป‰เบกเบนเบ™

เบžเบงเบเป€เบฎเบปเบฒเบกเบฒเบเบฑเบšเบŠเบทเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเบงเบšเบฎเบงเบกเปเบฅเบฐเบ‚เบฝเบ™เบกเบฑเบ™เปƒเบชเปˆเบ•เบปเบงเปเบ›เบŠเบทเปˆเป„เบŸเบฅเปŒ. เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ‚เป‰เบญเบเบŠเบตเป‰เบšเบญเบเป„เบฅเบเบฐเป€เบงเบฅเบฒ + เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เบ„เบงเบฒเบกเบเบงเป‰เบฒเบ‡เป„เบ. เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบ 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

เบซเบผเบฑเบ‡เบˆเบฒเบเบชเบฐเบเบฑเบ”เป„เบŸเบฅเปŒเบญเบญเบเบˆเบฒเบเบฎเบงเบšเบฎเบงเบก, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ›เปˆเบฝเบ™เป„เบŸเบฅเปŒ json เปƒเบ™เบฎเบนเบšเปเบšเบš .gz เปเบฅเบฐเบ‚เบฝเบ™เบžเบงเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบญเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบ•เปเปˆเป„เบ›.

เบเบฐเบฅเบธเบ™เบฒเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปƒเบซเป‰เบเบฑเบšเบ•เบปเบงเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡, เปเบฅเบฐเปเบ—เบ™เบ—เบตเปˆเบˆเบฐ 000000 เบ‚เบฝเบ™เบˆเปเบฒเบ™เบงเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบˆเบฒเบ Amplitude (เบซเบผเบทเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป€เบ›เบตเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบชเบฐเบเบฑเบ”เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบŠเบทเปˆเบ‚เบญเบ‡เป‚เบŸเบ™เป€เบ”เบตเบžเบฒเบเปƒเบ™).

เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡:

เบเบฒเบ™เบ‚เบฝเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปƒเบซเป‰เบเบฑเบšเบ•เบปเบงเปเบ›, เป€เบญเบปเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต, เบชเป‰เบฒเบ‡ dataframe เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ, time.sleep(1) เบชเปเบฒเบฅเบฑเบš tqdm เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เบžเบฒเบเปƒเบ™ loop เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เป„เบŸเบฅเปŒ .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. เบ‚เบฝเบ™ dataframe เปƒเบ™ 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 name, event_properties - event parameters, event_time - event time, uuid - client id, user_properties - client parameters, you should start work with them first. . เปเบฅเบฐเป€เบกเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบšเบ•เบปเบงเป€เบฅเบเบˆเบฒเบเบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เบเบฑเบšเบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ”เบˆเบฒเบ dashboards Amplitude, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบšเปเปˆเบฅเบทเบกเบงเปˆเบฒเบฅเบฐเบšเบปเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบฅเบนเบเบ„เป‰เบฒ / funnels เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ, เปเบฅเบฐเบญเบทเปˆเบ™เป†, เปเบฅเบฐเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบญเปˆเบฒเบ™เป€เบญเบเบฐเบชเบฒเบ™ 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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™