เด’เดฐเต เดฑเต‹เดฌเต‹เดŸเตเดŸเดฟเดจเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดŽเด™เตเด™เดจเต† เด•เตˆเดฎเดพเดฑเดพเด‚. Python, Google BigQuery เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต

เด’เดฐเต เดฑเต‹เดฌเต‹เดŸเตเดŸเดฟเดจเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดŽเด™เตเด™เดจเต† เด•เตˆเดฎเดพเดฑเดพเด‚. Python, Google BigQuery เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต

เดฆเดฟเดตเดธเด‚ เดคเต‹เดฑเตเด‚, เด†เดดเตเดšเดคเต‹เดฑเตเด‚ เด†เดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เตเดฃเตเดŸเต‹? เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดŽเดดเตเดคเตเด•. เดจเดฟเด™เตเด™เตพ เดกเดพเดฑเตเดฑ เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เตเด•, เด…เดคเต เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเด•, เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฟเด•เตเด•เตเด• (เด—เตเดฐเดพเดซเตเด•เตพ, เดšเดพเตผเดŸเตเดŸเตเด•เตพ เด‰เดฃเตเดŸเดพเด•เตเด•เตเด•), เดคเตเดŸเตผเดจเตเดจเต เด…เดคเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฌเต‹เดธเดฟเดจเต เด…เดฏเดฏเตเด•เตเด•เตเด•. เดŽเดจเตเดจเดพเตฝ เด‡เดคเต†เดฒเตเดฒเดพเด‚ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเดกเต เด†เดฃเต†เด™เตเด•เดฟเดฒเต‹?

เดˆ เดŸเตเดฏเต‚เดŸเตเดŸเต‹เดฑเดฟเดฏเดฒเดฟเตฝ เดžเด™เตเด™เตพ เดŸเต†เดฒเดฟเด—เตเดฐเดพเดฎเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด‚, เด…เดคเต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเดฟเด‚เด—เต เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚. เดเดฑเตเดฑเดตเตเด‚ เดฐเดธเด•เดฐเดฎเดพเดฏ เด•เดพเดฐเตเดฏเด‚, เดฎเตเดดเตเดตเตป เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดฒเตเด‚ 50 เดตเดฐเดฟ เด•เต‹เดกเต เดฎเดพเดคเตเดฐเดฎเต‡ เด‰เดฃเตเดŸเดพเด•เต‚ เดŽเดจเตเดจเดคเดพเดฃเต! เดจเดฟเด™เตเด™เตพ เด†เดฆเตเดฏเดฎเดพเดฏเดฟ เดŸเต†เดฒเดฟเด—เตเดฐเดพเดฎเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพ เด‡เดคเตเด‚ เดตเดพเดฏเดฟเด•เตเด•เดฃเด‚ เด’เดฐเต เดชเต‹เดธเตเดฑเตเดฑเต.

เดธเตเด•เดฟเตฝเดฌเต‹เด•เตเดธเต เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต: เดชเตเดฐเดพเดฏเต‹เด—เดฟเด• เด•เต‹เดดเตเดธเต เด†เดฆเตเดฏเด‚ เดฎเตเดคเตฝ เดชเตˆเดคเตเดคเตบ เดกเต†เดตเดฒเดชเตเดชเตผ.

เดžเด™เตเด™เตพ เด“เตผเดฎเตเดฎเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต: "Habr"-เดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เดตเดพเดฏเดจเด•เตเด•เดพเตผเด•เตเด•เตเด‚ - "Habr" เดชเตเดฐเตŠเดฎเต‹เดทเดฃเตฝ เด•เต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดธเตเด•เดฟเตฝเดฌเต‹เด•เตเดธเต เด•เต‹เดดเตเดธเดฟเตฝ เดšเต‡เดฐเตเดฎเตเดชเต‹เตพ 10 เดฑเต‚เดฌเดฟเตพเดธเต เด•เดฟเดดเดฟเดตเต.

เดจเดฎเตเด•เตเด•เต เดคเตเดŸเด™เตเด™เดพเด‚

เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚ google-Cloud-bigquery Google BigQuery-เตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เดจเต‡เดŸเตเดจเตเดจเดคเดฟเดจเต. เดฎเดพเดฑเตเดฑเตเดชเตเดฒเต‹เดŸเตเดŸเตเดฒเดฟเดฌเต, เดจเดฎเตเดชเดฟ ะธ เดชเดพเดฃเตเดŸเด•เตพ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดกเดพเดฑเตเดฑ เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚. เดชเตˆเดคเตเดคเตบ-เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚-เดฌเต‹เดŸเตเดŸเต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏ เดกเดพเดฑเตเดฑ เดŸเต†เดฒเดฟเด—เตเดฐเดพเดฎเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเด‚.

pip3 google-Cloud-bigquery matplotlib numpy pandas python-telegram-bot เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•

Google BigQuery API เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดžเด™เตเด™เตพเด•เตเด•เต เดธเต‡เดตเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ Google BigQuery API เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดชเต‹เด•เตเดจเตเดจเต Google เดกเต†เดตเดฒเดชเตเดชเตผ เด•เตบเดธเต‹เตพ เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เด’เดจเตเดจเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•).

เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดชเดพเดจเดฒเดฟเตฝ, APIS เด‰เด‚ เดธเต‡เดตเดจเด™เตเด™เดณเตเด‚ เดชเตเดฐเดพเดชเตเดคเดฎเดพเด•เตเด•เตเด• เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต BigQuery API เดคเดฟเดฐเดฏเตเด•.

เด’เดฐเต เดฑเต‹เดฌเต‹เดŸเตเดŸเดฟเดจเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดŽเด™เตเด™เดจเต† เด•เตˆเดฎเดพเดฑเดพเด‚. Python, Google BigQuery เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต

API เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเตป เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เตเด• เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•.

เด’เดฐเต เดฑเต‹เดฌเต‹เดŸเตเดŸเดฟเดจเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดŽเด™เตเด™เดจเต† เด•เตˆเดฎเดพเดฑเดพเด‚. Python, Google BigQuery เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต

เด’เดฐเต เด…เด•เตเด•เต—เดฃเตเดŸเต เด•เต€ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•

เดจเดฎเตเด•เตเด•เต เดตเต€เดฃเตเดŸเตเด‚ เดชเต‹เด•เดพเด‚ Google เดกเต†เดตเดฒเดชเตเดชเตผ เด•เตบเดธเต‹เตพ, เด•เตเดฐเต†เดกเตปเดทเตเดฏเดฒเตเด•เตพ เดŸเดพเดฌเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•, เด•เตเดฐเต†เดกเตปเดทเตเดฏเดฒเตเด•เดณเตเด‚ เดธเต‡เดตเดจ เด…เด•เตเด•เต—เดฃเตเดŸเต เด•เต€เดฏเตเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•.

เดคเตเดŸเตผเดจเตเดจเต - เดชเตเดคเดฟเดฏ เดธเต‡เดตเดจ เด…เด•เตเด•เต—เดฃเตเดŸเต, เดธเต‡เดตเดจ เด…เด•เตเด•เต—เดฃเตเดŸเต เดจเดพเดฎ เดซเต€เตฝเดกเดฟเตฝ เดชเต‡เดฐเต เดจเตฝเด•เตเด•.

เดฑเต‹เตพ เดกเตเดฐเต‹เดชเตเดชเต-เดกเต—เตบ เดฒเดฟเดธเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต, เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต > เด‰เดŸเดฎ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•, เดคเตเดŸเตผเดจเตเดจเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•.

เด’เดฐเต เดฑเต‹เดฌเต‹เดŸเตเดŸเดฟเดจเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดŽเด™เตเด™เดจเต† เด•เตˆเดฎเดพเดฑเดพเด‚. Python, Google BigQuery เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต

เดธเตเดตเดฏเดฎเต‡เดต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เดซเดฏเดฒเดฟเดจเต† creds.json เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต.

เดŸเต†เตผเดฎเดฟเดจเดฒเดฟเตฝ creds.json-เดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดค เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเด•เตเด•เตŠเดฃเตเดŸเต GOOGLE_APPLICATION_CREDENTIALS เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด•.

GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]' เด•เดฏเดฑเตเดฑเตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเด•

เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟเดฐเตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ, เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดŽเดดเตเดคเดพเตป เดคเตเดŸเด™เตเด™เต‡เดฃเตเดŸ เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเต.

เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต

เดŸเตเดฏเต‚เดŸเตเดŸเต‹เดฑเดฟเดฏเดฒเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ bigquery-public-data.stackoverflow-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดกเดพเดฑเตเดฑ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เดžเด™เตเด™เดณเตเดŸเต† เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดชเตเดฐเดคเดฟเดฆเดฟเดจ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเด™เตเด™เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด‚.

เดŽเดฒเตเดฒเดพเด‚ เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต.

เดชเดŸเตเดŸเดฟเด• เด…เดจเตเดตเต‡เดทเดฟเด•เตเด•เตเด• -> เดกเดพเดฑเตเดฑ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด•เตเด• -> เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฃเด‚ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด• -> เดšเดฟเดคเตเดฐเด‚ เด…เดฏเดฏเตเด•เตเด•เตเด•

เด“เดฐเต‹ เดคเตเดฐเต†เดกเตเด‚ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดซเด‚เด—เตเดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚.

BigQuery-เดฒเต‡เด•เตเด•เตเดณเตเดณ เด…เดจเตเดตเต‡เดทเดฃเด‚

เด†เดฆเตเดฏเด‚ เดžเด™เตเด™เตพ เดฒเตˆเดฌเตเดฐเดฑเดฟ เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

google.Cloud เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดฌเดฟเด—เตเด•เตเดตเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต

เดžเด™เตเด™เตพ query_to_bigquery เดŽเดจเตเดจ เด’เดฐเต เดซเด‚เด—เตโ€Œเดทเตป เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดตเดฟเดŸเต† เดชเดฐเดพเดฎเต€เดฑเตเดฑเตผ เดšเต‹เดฆเตเดฏเด‚ เด†เดฃเต.

def query_to_bigquery(query):
    client = bigquery.Client()
    query_job = client.query(query)
    result = query_job.result()
    dataframe = result.to_dataframe()
    return dataframe

เดˆ เดซเด‚เด—เตโ€Œเดทเตป เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเต† เด’เดฐเต เดกเดพเดฑเตเดฑ เดซเตเดฐเต†เดฏเดฟเดฎเดพเดฏเดฟ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด‚.

เดกเดพเดฑเตเดฑ เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

เดˆ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป, matplotlib เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•.

mattlotlib.pyplot เดจเต† plt เด†เดฏเดฟ เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเด•

เดžเด™เตเด™เตพเด•เตเด•เต เด…เดžเตเดšเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เด‡เดตเดฟเดŸเต† x เดŽเดจเตเดจเดคเต x-เด…เด•เตเดทเด‚ เดกเดพเดฑเตเดฑเดฏเดพเดฃเต, x_label เดŽเดจเตเดจเดคเต เด…เด•เตเดทเดคเตเดคเดฟเดจเตเดฑเต† เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดพเดฃเต, y เดŽเดจเตเดจเดคเต y-เด…เด•เตเดทเด‚ เดกเดพเดฑเตเดฑเดฏเดพเดฃเต, y_label เดŽเดจเตเดจเดคเต เด…เด•เตเดทเดคเตเดคเดฟเดจเตเดฑเต† เดถเต€เตผเดทเด•เดฎเดพเดฃเต, เดถเต€เตผเดทเด•เด‚ เดฎเตเดดเตเดตเตป เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดพเดฃเต.

def visualize_bar_chart(x, x_label, y, y_label, title):
    plt.title(title)
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    index = np.arange(len(x))
    plt.xticks(index, x, fontsize=5, rotation=30)
    plt.bar(index, y)
    return plt

เดšเดฟเดคเตเดฐเด‚ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด•

เด’เดฐเต เดตเดฟเดทเตเดตเดฒเตˆเดธเต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเดจเตเด‚ เด…เดคเต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดพเดจเตเด‚ เด‡เดชเตเดชเต‹เตพ เดฐเดฃเตเดŸเต เดซเด‚เด—เตเดทเดจเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚.

เดฆเดฟเดตเดธเดตเตเด‚ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเต‹เดธเตเดฑเตเดฑเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เดžเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เตเด‚. เด†เดฆเตเดฏเด‚ เดžเด™เตเด™เตพ เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดŽเดดเตเดคเตเดจเตเดจเต.

query = """
        SELECT DATE(creation_date) date, COUNT(*) total_posts
        FROM `bigquery-public-data.stackoverflow.post_history`
        GROUP BY 1
        HAVING date > DATE_SUB('2018-12-02', INTERVAL 14 DAY)
        ORDER BY 1
        """

2 เดกเดฟเดธเด‚เดฌเตผ 2018 เดฎเตเดคเตฝ เดฐเดฃเตเดŸเดพเดดเตเดšเดคเตเดคเต‡เด•เตเด•เตเดณเตเดณ เดกเดพเดฑเตเดฑ เดถเต‡เด–เดฐเดฟเด•เตเด•เดพเตป เดšเต‹เดฆเตเดฏเด‚ เดธเดนเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต.

2018-12-02, bigquery-public-data.stackoverflow.post_history เดŽเดจเตเดจเดคเดฟเตฝ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดเดฑเตเดฑเดตเตเด‚ เดชเตเดคเดฟเดฏ เดกเดพเดฑเตเดฑเดฏเดพเดฏเดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เดˆ เดคเต€เดฏเดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เดฎเดฑเตเดฑเต เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ เดเดฑเตเดฑเดตเตเด‚ เดชเตเดคเดฟเดฏ เดกเดพเดฑเตเดฑ เดฒเดญเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต CURRENT_DATE() เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚.

เดกเดพเดฑเตเดฑ เดฒเดญเดฟเด•เตเด•เดพเตป query_to_bigquery เดซเด‚เด—เตโ€Œเดทเดจเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดณเดฟเด•เตเด•เตเด•.

เดกเดพเดฑเตเดฑ เดซเตเดฐเต†เดฏเดฟเด‚ = query_to_bigquery(query)

เดคเตเดŸเตผเดจเตเดจเต เดžเด™เตเด™เตพ x-เด…เด•เตเดทเดคเตเดคเดฟเดจเต เดคเต€เดฏเดคเดฟ เดกเดพเดฑเตเดฑ เด•เต‹เดณเดตเตเด‚ y-เด…เด•เตเดทเดคเตเดคเดฟเดจเต total_posts เด•เต‹เดณเดตเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

x = เดกเดพเดฑเตเดฑเดพเดซเตเดฐเต†เดฏเดฟเด‚['เดคเต€เดฏเดคเดฟ'].tolist()
y = เดกเดพเดฑเตเดฑเดพเดซเตเดฐเต†เดฏเดฟเด‚['total_posts'].tolist()

Visualize_bar_chart เดซเด‚เด—เตโ€Œเดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เด‡เดคเต เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เด‡เดฎเต‡เดœเดพเดฏเดฟ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

plt = visualize_bar_chart(x=x, x_label='Date', y=y, y_label='เดฎเตŠเดคเตเดคเด‚ เดชเต‹เดธเตเดฑเตเดฑเตเด•เตพ', เดถเต€เตผเดทเด•เด‚='เดชเตเดฐเดคเดฟเดฆเดฟเดจ เดชเต‹เดธเตเดฑเตเดฑเตเด•เตพ')
plt.savefig('viz.png')

get_and_save_image เดŽเดจเตเดจ เดซเด‚เด—เตโ€Œเดทเดจเดฟเตฝ เดžเด™เตเด™เตพ เดˆ เด•เต‹เดกเต เดชเตŠเดคเดฟเดฏเตเดจเตเดจเต.

def get_and_save_image():
    query = """
            SELECT DATE(creation_date) date, COUNT(*) total_posts
            FROM `bigquery-public-data.stackoverflow.post_history`
            GROUP BY 1
            HAVING date > DATE_SUB('2018-12-02', INTERVAL 14 DAY)
            ORDER BY 1
            """
    dataframe = query_to_bigquery(query)  
    x = dataframe['date'].tolist()
    y = dataframe['total_posts'].tolist()
    plt = visualize_bar_chart(x=x, x_label='Date', y=y, y_label='Total Posts', title='Daily Posts')
    plt.savefig('viz.png')

เด’เดฐเต เดšเดฟเดคเตเดฐเด‚ เด…เดฏเดฏเตเด•เตเด•เตเด•

เดธเตเดตเต€เด•เตผเดคเตเดคเดพเดตเดฟเดจเต เด’เดฐเต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ chat_id เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด…เดฑเดฟเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดžเด™เตเด™เตพ เด‰เดชเดฏเต‡เดพเด—เดฟเด•เตเด•เตเดจเตเดจเต userinfobot เด•เต‚เดŸเดพเดคเต† เดŸเตˆเดชเตเดชเต /เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•. เดฌเต‹เดŸเตเดŸเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เดณเตเดฎเดพเดฏเดฟ เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดเดกเดฟ เดซเต€เตฝเดกเดฟเตฝ chat_id เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เต send_image เดซเด‚เด—เตโ€Œเดทเตป เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดพเด‚. เด‡เดฎเต‡เดœเต เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด‡เดคเต get_and_save_image เดซเด‚เด—เตโ€Œเดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚. เดคเตเดŸเตผเดจเตเดจเต เดžเด™เตเด™เตพ เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฏ เด•เต‹เตบเดŸเดพเด•เตเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต.

def send_image(bot, update):
    get_and_save_image()
    chat_id = 'CHAT_ID_RECEIVER'
    bot.send_photo(chat_id=chat_id, photo=open('viz.png','rb'))

เดชเตเดฐเดงเดพเดจ เดชเดฐเดฟเดชเดพเดŸเดฟ

เด…เดตเดธเดพเดจเดฎเดพเดฏเดฟ, เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพ เดฎเดฑเตเดฑเตŠเดฐเต เดซเด‚เด—เตเดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เดชเตเดฐเดงเดพเดจเด‚. เดฌเต‹เดŸเตเดŸเดฟเดจเดพเดฏเดฟ YOUR_TOKEN เดฎเดพเดฑเตเดฑเดพเตป เดฎเดฑเด•เตเด•เดฐเตเดคเต.

เด“เตผเดฎเตเดฎเดฟเด•เตเด•เตเด•: เดจเดฟเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจ เดธเดฎเดฏเดคเตเดคเต เดˆ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดธเตเดตเดฏเดฎเต‡เดต เดšเดฟเดคเตเดฐเด‚ เด…เดฏเดฏเตเด•เตเด•เตเด‚. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดŽเดฒเตเดฒเดพ เดฆเดฟเดตเดธเดตเตเด‚ เดฐเดพเดตเดฟเดฒเต† เด’เดฎเตเดชเดคเต เดฎเดฃเดฟเด•เตเด•เต เด’เดฐเต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เด…เดฏเดฏเตเด•เตเด•เตเด‚.

def main():
    updater = Updater('YOUR_TOKEN')
    updater.job_queue.run_daily(send_image, time=datetime.datetime.strptime('9:00AM', '%I:%M%p').time(), days=(0,1,2,3,4,5,6))
    updater.start_polling()
    updater.idle()
 
if __name__ == '__main__':
    main()

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเด‚:

from google.cloud import bigquery
from telegram.ext import Updater
 
import matplotlib.pyplot as plt
import numpy as np
import datetime
 
def query_to_bigquery(query):
    client = bigquery.Client()
    query_job = client.query(query)
    result = query_job.result()
    dataframe = result.to_dataframe()
    return dataframe
 
def visualize_bar_chart(x, x_label, y, y_label, title):
    plt.title(title)
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    index = np.arange(len(x))
    plt.xticks(index, x, fontsize=5, rotation=30)
    plt.bar(index, y)
    return plt
 
def get_and_save_image():
    query = """
            SELECT DATE(creation_date) date, COUNT(*) total_posts
            FROM `bigquery-public-data.stackoverflow.post_history`
            GROUP BY 1
            HAVING date > DATE_SUB('2018-12-02', INTERVAL 14 DAY)
            ORDER BY 1
            """
    dataframe = query_to_bigquery(query)  
    x = dataframe['date'].tolist()
    y = dataframe['total_posts'].tolist()
    plt = visualize_bar_chart(x=x, x_label='Date', y=y, y_label='Total Posts', title='Daily Posts')
    plt.savefig('viz.png')
 
def send_image(bot, update):
    get_and_save_image()
    chat_id = 'CHAT_ID_RECEIVER'
    bot.send_photo(chat_id=chat_id, photo=open('viz.png', 'rb'))
 
def main():
    updater = Updater('YOUR_TOKEN')
    updater.job_queue.run_daily(send_image, time=datetime.datetime.strptime('9:00AM', '%I:%M%p').time(), days=(0,1,2,3,4,5,6))
    updater.start_polling()
    updater.idle()
 
if __name__ == '__main__':
main()

เดซเดฏเตฝ เดธเด‚เดฐเด•เตเดทเดฟเดšเตเดšเต เด…เดคเดฟเดจเต† main.py เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเด•.

เดŸเต†เตผเดฎเดฟเดจเดฒเดฟเตฝ เด•เดฎเดพเตปเดกเต เดจเตฝเด•เดฟ เดžเด™เตเด™เตพ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต:

python3 main.py

เดŽเดฒเตเดฒเดพเด‚ เดคเดฏเตเดฏเดพเดฑเดพเดฃเต. เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เดณเตเดŸเต† เด‡เดŸเดชเต†เดŸเดฒเดฟเดฒเตเดฒเดพเดคเต† เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจ 50 เดตเดฐเดฟ เด•เต‹เดกเต เด…เดŸเด™เตเด™เดฟเดฏ เด’เดฐเต เดฑเต‹เดฌเต‹เดŸเตเดŸเตเดฃเตเดŸเต.

เดจเดฎเตเด•เตเด•เต เดฌเต‹เดŸเตเดŸเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเด‚ เด‡เดตเดฟเดŸเต† เดจเดฟเดจเตเดจเต/send เด•เดฎเดพเตปเดกเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†.

เด’เดฐเต เดฑเต‹เดฌเต‹เดŸเตเดŸเดฟเดจเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดŽเด™เตเด™เดจเต† เด•เตˆเดฎเดพเดฑเดพเด‚. Python, Google BigQuery เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟเดฏ เด•เต‹เดกเต เด‡เดตเดฟเดŸเต† เดฒเดญเดฟเด•เตเด•เตเด‚ เดŽเดจเตเดฑเต† GitHub.

เดธเตเด•เดฟเตฝเดฌเต‹เด•เตเดธเต เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•