เดฆเดฟเดตเดธเด เดคเตเดฑเตเด, เดเดดเตเดเดคเตเดฑเตเด เดเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจ เดเดพเดธเตโเดเตเดเตเดเตพ เดจเดฟเดเตเดเตพเดเตเดเตเดฃเตเดเต? เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฑเดฟเดชเตเดชเตเตผเดเตเดเตเดเตพ เดเดดเตเดคเตเด. เดจเดฟเดเตเดเตพ เดกเดพเดฑเตเดฑ เด
เดญเตเดฏเตผเดคเตเดฅเดฟเดเตเดเตเด, เด
เดคเต เดตเดฟเดถเดเดฒเดจเด เดเตเดฏเตเดฏเตเด, เดฆเตเดถเตเดฏเดตเตฝเดเตเดเดฐเดฟเดเตเดเตเด (เดเตเดฐเดพเดซเตเดเตพ, เดเดพเตผเดเตเดเตเดเตพ เดเดฃเตเดเดพเดเตเดเตเด), เดคเตเดเตผเดจเตเดจเต เด
เดคเต เดจเดฟเดเตเดเดณเตเดเต เดฌเตเดธเดฟเดจเต เด
เดฏเดฏเตเดเตเดเตเด. เดเดจเตเดจเดพเตฝ เดเดคเตเดฒเตเดฒเดพเด เดเดเตเดเตเดฎเตเดฑเตเดฑเดกเต เดเดฃเตเดเตเดเดฟเดฒเต?
เด เดเตเดฏเตเดเตเดเตเดฑเดฟเดฏเดฒเดฟเตฝ เดเดเตเดเตพ เดเตเดฒเดฟเดเตเดฐเดพเดฎเดฟเดจเดพเดฏเดฟ เดเดฐเต เดฌเตเดเตเดเต เดธเตเดทเตเดเดฟเดเตเดเตเด, เด
เดคเต เดฑเดฟเดชเตเดชเตเตผเดเตเดเดฟเดเดเต เดเดเตเดเตเดฎเตเดฑเตเดฑเต เดเตเดฏเตเดฏเดพเตป เดธเดนเดพเดฏเดฟเดเตเดเตเด. เดเดฑเตเดฑเดตเตเด เดฐเดธเดเดฐเดฎเดพเดฏ เดเดพเดฐเตเดฏเด, เดฎเตเดดเตเดตเตป เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเดฒเตเด 50 เดตเดฐเดฟ เดเตเดกเต เดฎเดพเดคเตเดฐเดฎเต เดเดฃเตเดเดพเดเต เดเดจเตเดจเดคเดพเดฃเต! เดจเดฟเดเตเดเตพ เดเดฆเตเดฏเดฎเดพเดฏเดฟ เดเตเดฒเดฟเดเตเดฐเดพเดฎเดฟเดจเดพเดฏเดฟ เดเดฐเต เดฌเตเดเตเดเต เดธเตเดทเตเดเดฟเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดจเดฟเดเตเดเตพ เดเดคเตเด เดตเดพเดฏเดฟเดเตเดเดฃเด
เดธเตเดเดฟเตฝเดฌเตเดเตเดธเต เดถเตเดชเดพเตผเดถ เดเตเดฏเตเดฏเตเดจเตเดจเต: เดชเตเดฐเดพเดฏเตเดเดฟเด เดเตเดดเตเดธเต
เดเดฆเตเดฏเด เดฎเตเดคเตฝ เดชเตเดคเตเดคเตบ เดกเตเดตเดฒเดชเตเดชเตผ .เดเดเตเดเตพ เดเตผเดฎเตเดฎเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต: "Habr"-เดจเตเดฑเต เดเดฒเตเดฒเดพ เดตเดพเดฏเดจเดเตเดเดพเตผเดเตเดเตเด - "Habr" เดชเตเดฐเตเดฎเตเดทเดฃเตฝ เดเตเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต เดเดคเตเดเตเดเดฟเดฒเตเด เดธเตเดเดฟเตฝเดฌเตเดเตเดธเต เดเตเดดเตเดธเดฟเตฝ เดเตเดฐเตเดฎเตเดชเตเตพ 10 เดฑเตเดฌเดฟเตพเดธเต เดเดฟเดดเดฟเดตเต.
เดจเดฎเตเดเตเดเต เดคเตเดเดเตเดเดพเด
เดฒเตเดฌเตเดฐเดฑเดฟเดเตพ เดธเตเดฅเดพเดชเดฟเดเตเดเตเดจเตเดจเต
เดเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเด
pip3 google-Cloud-bigquery matplotlib numpy pandas python-telegram-bot เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดฏเตเด
Google BigQuery API เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต
เดเดเตเดเตพเดเตเดเต เดธเตเดตเดจเด เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดเตเดเตเดเดฟเตฝ, เดเดเตเดเตพ Google BigQuery API เดเดฃเดเตเดฑเตเดฑเตเดเตเดฏเตเดฏเตเดฃเตเดเดคเตเดฃเตเดเต. เดเดคเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดเดเตเดเตพ เดชเตเดเตเดจเตเดจเต
เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดชเดพเดจเดฒเดฟเตฝ, APIS เดเด เดธเตเดตเดจเดเตเดเดณเตเด เดชเตเดฐเดพเดชเตเดคเดฎเดพเดเตเดเตเด เดคเดฟเดฐเดเตเดเตเดเตเดคเตเดคเต BigQuery API เดคเดฟเดฐเดฏเตเด.
API เดเดฃเดเตเดฑเตเดฑเตเดเตเดฏเตเดฏเดพเตป เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดทเดฎเดฎเดพเดเตเดเตเด เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด.
เดเดฐเต เด
เดเตเดเตเดฃเตเดเต เดเต เดธเตเดทเตเดเดฟเดเตเดเตเด
เดจเดฎเตเดเตเดเต เดตเตเดฃเตเดเตเด เดชเตเดเดพเด
เดคเตเดเตผเดจเตเดจเต - เดชเตเดคเดฟเดฏ เดธเตเดตเดจ เด เดเตเดเตเดฃเตเดเต, เดธเตเดตเดจ เด เดเตเดเตเดฃเตเดเต เดจเดพเดฎ เดซเตเตฝเดกเดฟเตฝ เดชเตเดฐเต เดจเตฝเดเตเด.
เดฑเตเตพ เดกเตเดฐเตเดชเตเดชเต-เดกเตเตบ เดฒเดฟเดธเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต, เดชเตเดฐเตเดเดเตเดฑเตเดฑเต > เดเดเดฎ เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดคเตเดเตผเดจเตเดจเต เดธเตเดทเตเดเดฟเดเตเดเตเด.
เดธเตเดตเดฏเดฎเตเดต เดกเตเตบเดฒเตเดกเต เดเตเดฏเตเดฏเตเดจเตเดจ เดซเดฏเดฒเดฟเดจเต 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 เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเตผ เด เดฑเดฟเดฏเตเดฃเตเดเดคเตเดฃเตเดเต.
เดเดเตเดเตพ เดเดชเดฏเตเดพเดเดฟเดเตเดเตเดจเตเดจเต
เดเดชเตเดชเตเตพ เดจเดฎเตเดเตเดเต 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 เดตเดฐเดฟ เดเตเดกเต เด เดเดเตเดเดฟเดฏ เดเดฐเต เดฑเตเดฌเตเดเตเดเตเดฃเตเดเต.
เดจเดฎเตเดเตเดเต เดฌเตเดเตเดเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดพเด
เดจเดฟเดเตเดเตพเดเตเดเต เดชเตเตผเดคเตเดคเดฟเดฏเดพเดเตเดเดฟเดฏ เดเตเดกเต เดเดตเดฟเดเต เดฒเดญเดฟเดเตเดเตเด
เดธเตเดเดฟเตฝเดฌเตเดเตเดธเต เดถเตเดชเดพเตผเดถ เดเตเดฏเตเดฏเตเดจเตเดจเต:
- เดฐเดฃเตเดเตเดตเตผเดทเดคเตเดคเต เดชเตเดฐเดพเดเตเดเดฟเดเตเดเตฝ เดเตเดดเตเดธเต
"เดเดพเตป เดเดฐเต PRO เดตเตเดฌเต เดกเตเดตเดฒเดชเตเดชเตผ เดเดฃเต" .- เดเตบเดฒเตเตป เดเตเดดเตเดธเต
"0 เดฎเตเดคเตฝ C# เดกเตเดตเดฒเดชเตเดชเตผ" .- เดชเตเดฐเดพเดฏเตเดเดฟเด เดตเตผเดท เดเตเดดเตเดธเต
"0 เดฎเตเดคเตฝ PRO เดตเดฐเตเดฏเตเดณเตเดณ PHP เดกเดตเดฒเดชเตเดชเตผ" .
เด เดตเดฒเดเดฌเด: www.habr.com