
āĻāĻĒāύāĻžāϰ āĻāĻŋ āĻāĻŽāύ āĻāĻžāĻ āĻāĻā§ āϝāĻž āĻĻāĻŋāύā§āϰ āĻĒāϰ āĻĻāĻŋāύ, āϏāĻĒā§āϤāĻžāĻšā§āϰ āĻĒāϰ āϏāĻĒā§āϤāĻžāĻš āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻāϰā§? āϝā§āĻŽāύ āϰāĻŋāĻĒā§āϰā§āĻ āϞā§āĻāĻžāĨ¤ āĻāĻĒāύāĻŋ āĻĄā§āĻāĻžāϰ āĻāύā§āϝ āĻ
āύā§āϰā§āϧ āĻāϰā§āύ, āĻāĻāĻŋ āĻŦāĻŋāĻļā§āϞā§āώāĻŖ āĻāϰā§āύ, āĻāĻāĻŋ āĻāϞā§āĻĒāύāĻž āĻāϰā§āύ (āĻā§āϰāĻžāĻĢ, āĻāĻžāϰā§āĻ āϤā§āϰāĻŋ āĻāϰā§āύ) āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ āĻāĻĒāύāĻžāϰ āĻŦāϏā§āϰ āĻāĻžāĻā§ āĻĒāĻžāĻ āĻžāύāĨ¤ āĻāĻŋāύā§āϤ⧠āĻāĻ āϏāĻŦ āϝāĻĻāĻŋ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻšāϝāĻŧ?
āĻāĻ āĻāĻŋāĻāĻā§āϰāĻŋāϝāĻŧāĻžāϞ⧠āĻāĻŽāϰāĻž āĻā§āϞāĻŋāĻā§āϰāĻžāĻŽā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻŦāĻ āϤā§āϰāĻŋ āĻāϰāĻŦ āϝāĻž āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āϰāĻŋāĻĒā§āϰā§āĻāĻŋāĻ āĻāϰāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰāĻŦā§āĨ¤ āĻāĻŦāĻ āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻžāϞ āĻāĻŋāύāĻŋāϏ āĻšāϞ āϝ⧠āĻĒā§āϰ⧠āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ 50 āϞāĻžāĻāύ āĻā§āĻĄ āύāĻŋāϝāĻŧā§ āĻāĻ āĻŋāϤ āĻšāĻŦā§! āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰā§āϰ āĻāύā§āϝ āĻā§āϞāĻŋāĻā§āϰāĻžāĻŽā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻŦāĻ āϤā§āϰāĻŋ āĻāϰā§āύ, āϤāĻŦā§ āĻāĻĒāύāĻžāϰ āĻāĻāĻŋāĻ āĻĒāĻĄāĻŧāĻž āĻāĻāĻŋāϤ .
Skillbox āϏā§āĻĒāĻžāϰāĻŋāĻļ āĻāϰā§: āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ āĻā§āϰā§āϏ .
āĻāĻŽāϰāĻž āĻŽāύ⧠āĻāϰāĻŋāϝāĻŧā§ āĻĻāĻŋāĻā§āĻāĻŋ: "Habr"-āĻāϰ āϏāĻāϞ āĻĒāĻžāĻ āĻāĻĻā§āϰ āĻāύā§āϝ - "Habr" āĻĒā§āϰāĻāĻžāϰāĻŽā§āϞāĻ āĻā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϝā§āĻā§āύ⧠Skillbox āĻā§āϰā§āϏ⧠āύāĻĨāĻŋāĻā§āĻā§āϤ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ 10 āϰā§āĻŦā§āϞ āĻāĻžāĻĄāĻŧāĨ¤
āĻāϞ āĻļā§āϰ⧠āĻāϰāĻŋ
āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻāύāϏā§āĻāϞ āĻāϰāĻž āĻšāĻā§āĻā§
āĻāĻŽāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§ Google BigQuery āĻĨā§āĻā§ āĻĄā§āĻāĻž āĻĒā§āϤā§āĨ¤ , и āĻāĻĒāύāĻžāĻā§ āĻāĻĒāύāĻžāϰ āĻĄā§āĻāĻž āĻāϞā§āĻĒāύāĻž āĻāϰāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰāĻŦā§āĨ¤ āϏāĻŽāĻžāĻĒā§āϤ āĻĄā§āĻāĻž āĻā§āϞāĻŋāĻā§āϰāĻžāĻŽā§ āĻĒāĻžāĻ āĻžāĻŦā§āĨ¤
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 āĻĨā§āĻā§ bigquery āĻāĻŽāĻĻāĻžāύāĻŋ āĻāϰā§āύ
āĻāĻŽāϰāĻž 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 āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰā§āύāĨ¤
matplotlib.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(āĻā§āϝāĻŧā§āϰāĻŋ)
āϤāĻžāϰāĻĒāϰ⧠āĻāĻŽāϰāĻž x-āĻ āĻā§āώā§āϰ āĻāύā§āϝ āϤāĻžāϰāĻŋāĻ āĻĄā§āĻāĻž āĻāϞāĻžāĻŽ āĻāĻŦāĻ y-āĻ āĻā§āώā§āϰ āĻāύā§āϝ total_posts āĻāϞāĻžāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋāĨ¤
x = āĻĄā§āĻāĻžāĻĢā§āϰā§āĻŽ['āϤāĻžāϰāĻŋāĻ']āĨ¤āĻā§āϞāĻŋāϏā§āĻ()
y = āĻĄā§āĻāĻžāĻĢā§āϰā§āĻŽ['total_posts'].tolist()
āĻāĻŽāϰāĻž visualize_bar_chart āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻŋāĻā§ āĻāϞā§āĻĒāύāĻž āĻāϰāĻŋ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻāĻŋāϤā§āϰ āĻšāĻŋāϏāĻžāĻŦā§ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻŋāĨ¤
plt = visualize_bar_chart(x=x, x_label='date', y=y, y_label='āĻŽā§āĻ āĻĒā§āϏā§āĻ', title='āĻĻā§āύāĻŋāĻ āĻĒā§āϏā§āĻ')
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 āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĻāĻŋ āĻāĻžāύāϤ⧠āĻšāĻŦā§āĨ¤
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāĻŦāĻ āĻāĻžāĻāĻĒ āĻāϰā§āύ/āĻļā§āϰ⧠āĻāϰā§āύāĨ¤ āĻŦāĻ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āϤāĻĨā§āϝ āĻĻāĻŋāϝāĻŧā§ āϏāĻžāĻĄāĻŧāĻž āĻĻā§āϝāĻŧ, 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 āĻāĻŽāĻžāύā§āĻĄ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰā§āĨ¤

āĻāĻĒāύāĻŋ āϏāĻŽāĻžāĻĒā§āϤ āĻā§āĻĄ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύ .
Skillbox āϏā§āĻĒāĻžāϰāĻŋāĻļ āĻāϰā§:
- āĻĻā§āĻ āĻŦāĻāϰā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ āĻā§āϰā§āϏ .
- āĻ āύāϞāĻžāĻāύ āĻā§āϰā§āϏ .
- āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ āĻŦāĻāϰā§āϰ āĻā§āϰā§āϏ .
āĻāϤā§āϏ: www.habr.com
