рд░реЛрдмреЛрдЯ рдХреЛ рд╕рд╛рдзрд╛рд░рдг рд░рд┐рдкреЛрд░реНрдЯ рдХреИрд╕реЗ рд╕реМрдВрдкреЗрдВред рдкрд╛рдпрдерди рдФрд░ Google BigQuery рдореЗрдВ рдПрдХ рдмреЙрдЯ рд▓рд┐рдЦрдирд╛



рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рджрд┐рди-рдкреНрд░рддрд┐рджрд┐рди рджреЛрд╣рд░рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рдкреНрддрд╛рд╣ рд╕реЗ рд╕рдкреНрддрд╛рд╣ рддрдХ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдкреЛрд░реНрдЯ рд▓рд┐рдЦрдирд╛ред рдЖрдк рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ (рд░реЗрдЦрд╛рдВрдХрди, рдЪрд╛рд░реНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ), рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдмреЙрд╕ рдХреЛ рднреЗрдЬреЗрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рд╕рдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИ?

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдФрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ 50 рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА! рдЕрдЧрд░ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдмреЙрдЯ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ: рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдХ рд╣рд╛рде рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдЕрдЬрдЧрд░ рдбреЗрд╡рд▓рдкрд░ ред

рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред

рдиреАрдЪреЗ рдЙрддрд░рдирд╛


рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рд╣рдо Google BigQuery рд╕реЗ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Google- рдХреНрд▓рд╛рдЙрдб-рдмрд┐рдЧрдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред matplotlib , numpy рдФрд░ рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдЕрдЬрдЧрд░-рдЯреЗрд▓реАрдЧреНрд░рд╛рдо-рдмреЙрдЯ рддреИрдпрд╛рд░ рдбреЗрдЯрд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЛ рднреЗрдЬреЗрдЧрд╛ред

pip3 рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ google-cloud-bigquery matplotlib numpy рдкрд╛рдВрдбрд╛ python-telegram-bot

Google 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 рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ:

Source: https://habr.com/ru/post/hi443702/


All Articles