
рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рджрд┐рди-рдкреНрд░рддрд┐рджрд┐рди рджреЛрд╣рд░рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рдкреНрддрд╛рд╣ рд╕реЗ рд╕рдкреНрддрд╛рд╣ рддрдХ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдкреЛрд░реНрдЯ рд▓рд┐рдЦрдирд╛ред рдЖрдк рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ (рд░реЗрдЦрд╛рдВрдХрди, рдЪрд╛рд░реНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ), рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдмреЙрд╕ рдХреЛ рднреЗрдЬреЗрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рд╕рдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИ?
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдФрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ 50 рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА! рдЕрдЧрд░ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдмреЙрдЯ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ
рдпрд╣рд╛рдВ рдЗрд╕
рдкреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ: рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдХ рд╣рд╛рде рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдЕрдЬрдЧрд░ рдбреЗрд╡рд▓рдкрд░ ред
рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред
рдиреАрдЪреЗ рдЙрддрд░рдирд╛
рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрд╣рдо Google BigQuery рд╕реЗ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Google-
рдХреНрд▓рд╛рдЙрдб-рдмрд┐рдЧрдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
matplotlib ,
numpy рдФрд░
рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред
рдЕрдЬрдЧрд░-рдЯреЗрд▓реАрдЧреНрд░рд╛рдо-рдмреЙрдЯ рддреИрдпрд╛рд░ рдбреЗрдЯрд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЛ рднреЗрдЬреЗрдЧрд╛ред
pip3 рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ google-cloud-bigquery matplotlib numpy рдкрд╛рдВрдбрд╛ python-telegram-botGoogle BigQuery рдПрдкреАрдЖрдИ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдпрджрд┐ рд╣рдо рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ Google BigQuery API рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
Google рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ (рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ)ред
рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рдореЗрдВ, рд╕рдХреНрд╖рдо APIS рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ BigQuery рдПрдкреАрдЖрдИ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВред

рдПрдкреАрдЖрдИ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдЪреБрдиреЗрдВред
рдПрдХ рдЦрд╛рддрд╛ рдХреБрдВрдЬреА рдмрдирд╛рдПрдБрд╣рдо рдлрд┐рд░ рд╕реЗ
Google рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ , рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдФрд░ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдХреБрдВрдЬреА рдЯреИрдм рдмрдирд╛рддреЗ рд╣реИрдВред
рдлрд┐рд░ - рдирдпрд╛ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛, рдФрд░ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдирд╛рдо рдлрд╝реАрд▓реНрдб рдореЗрдВ, рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВред
рд░реЛрд▓ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╕реЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ> рд╕реНрд╡рд╛рдореА рдЪреБрдиреЗрдВ, рдлрд┐рд░ рдмрдирд╛рдПрдБред

рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рд╣реЛрдЧреА рдЙрд╕реЗ рдХреНрд░реЗрдбреЗрд╕рд╕рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо 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 рдЪреБрдиреЗрдВред
рдкреНрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд matplotlib.pyplotрд╣рдореЗрдВ рдкрд╛рдВрдЪ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ 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 рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
dataframe = 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 = 'рдХреБрд▓ рдкреЛрд╕реНрдЯ', рд╢реАрд░реНрд╖рдХ = 'рджреИрдирд┐рдХ рдкреЛрд╕реНрдЯ')
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 рдФрд░ type / start рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдмреЙрдЯ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЪреИрдЯ_рдЖрдИрдбреА рдЖрдИрдбреА рдлрд╝реАрд▓реНрдб рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред
рдЕрдм 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()
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЗрд╕реЗ рдореБрдЦреНрдп рдирд╛рдо рджреЗрдВред
рд╣рдо рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ:
python3 main.pyрд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд░реЛрдмреЛрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рдХреА 50 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдмрд┐рдирд╛ рд░рд┐рдкреЛрд░реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдЖрдЗрдП / рд╕реЗрдВрдб рдХрдорд╛рдВрдб рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ
рдпрд╣рд╛рдБ рд╕реЗ рдмреЙрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

рдЖрдк рддреИрдпрд╛рд░ рдХреЛрдб
рдореЗрд░реЗ GitHub рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: