
Habesne munera quae de die in diem, hebdomadam post hebdomadam repetunt? Ad exemplum scripturae refert. Rogas datam, analysim eam, visualize (graphas, chartas fac), ac deinde ad bulla tua mitte. Sed quid si haec automated?
In hoc tutorial nos bot pro Telegram creabimus quod relatione automate adiuvabit. Frigidissima res est quod tota progressio ex sola L lineae codicis constabit! Si telegraphum primum creas, deinde hoc quoque legere debes .
Skillbox commendat: Cursus practicus .
admonemus; omnibus legentibus "Habr" - discount 10 rublorum cum scribendo in quavis Skillbox utens "Habr" codice promotivo.
Demus incipias
Installing libraries
Nos utemur ut notitia ex Google BigQuery. , и visualize vestri notitia auxiliatus sum tibi. mittet notitia perfecta ad Telegram.
pip3 install google-nubem matplotlib numpy pandas python-telegram-bot
Coniungens Google BigQuery API
Si servitio uti velimus, coniungere Google BigQuery API necesse est. Ad hoc itur ad et novum consilium creare (vel unum existentium eligere).
In tabula dicione, eligite APIS ET OFFICIIS FACIO et quaeramus BigQuery API.

Lego API Admitte coniungere.

Create an ratio clavem
Eamus iterum , Credentialium tab elige, documentorum crea et servitii rationem clavem.
Deinde - Novam rationem muneris, et nomen in servitii ratione nomen agri intrant.
Ex munere drop-down list, select Project > Possessor, tunc crea.

Tabella quae automatice recepta est, creds.json appellatur.
GOOGLE_APPLICATION_CREDENTIALS pone, specificans viam ad creds.json in termino.
export GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'
Si omnia bene evenerunt, tempus est ut rationem scribendi incipias.
Creando applicationem
Pro tutore utemur notitia ex bigquery-public-data.stackoverflow, propter famam nostram numerum publicationum quotidianarum eligemus.
Omnia satis simplicia sunt.
Require mensam -> Visualize datam -> Serva visualisationi -> Mitte imaginem
Munus unum efficiamus ut singula fila definiamus.
Query ad BigQuery
Primum bibliothecam importamus.
ex google.cloud import bigquery
Munus creamus quod query_to_bigquery appellatur, ubi modulus quaesitus est.
def query_to_bigquery(query):
client = bigquery.Client()
query_job = client.query(query)
result = query_job.result()
dataframe = result.to_dataframe()
return dataframeMunus hoc postulationem reddet ut tabulae datae.
Visualizing notitia
Ad hanc quaestionem solvendam, elige matplotlib.
import matplotlib.pyplot ut plt
Parametris quinque indigemus, ubi x est x-axis notitia, x_label titulus est axis, y est y-axis notitia, y_label titulus est pro axe, titulus est titulus totius visualizationis.
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 pltServo imaginem
Nunc duo munera utamur, ut visualizationem creando et salvam facias.
Numerum epistolarum cottidianarum editarum mittemus. Primo scribimus petitionem.
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
"""Investigatio adiuvat notitias colligere per duas septimanas incipiendo die 2 mensis Decembris, anno MMXVIII.
Hoc date utimur quia 2018-12-02 notitia novissima scripta est in bigquery-public-data.stackoverflow.post_historia, in aliis casibus uti potes CURRENT_DATE() ut novissimas notitias accipias.
Quaesitum_to_bigquery munus voca ut notitias accipias.
dataframe = query_to_bigquery(quaestio)
Tunc utimur columna data pro axe x-axo, et columna tota pro axe y-.
x = dataframe['date'].tolist()
y = dataframe['total_posts'].tolist()
Visualize_bar_chart utens munere nos visualise eamque ut imaginem servas.
plt = visualize_bar_chart(x=x, x_label='Date', y=y, y_label='Total Posts', title='Dily Posts')
plt.savefig('viz.png')
Hunc codicem involvimus in functione dicta get_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')Mitte imaginem
Ut relationem recipienti mittas, debes scire parametrum chat_id.
Utimur et typus /initium. Bot cum informationibus necessariis respondet, chat_id in campo id continetur.
Nunc munus mittere_image crearemus. Munus adepto_and_save_image adhibebit ad imaginem recuperandam et servandam. Et tunc omnia ad rectam contactum mittimus.
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'))Propositum principale
Denique munus aliud, praecipuum, applicationis launchendi sumus. Noli oblivisci your_TOKEN mutare pro automati.
Memento: hoc programma mittet imaginem ipso tempore quo designatus est. Verbi gratia, quotidie mane hora novem relationem mittemus.
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()Quam ob rem applicatio nostra sic erit:
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()Serva tabellam et vocant main.py.
Applicationem deprimimus per intrantes mandatum in termino:
python3 main.py
Omnia parata sunt. Nunc robot constans ex 50 lineis codicis, qui relationes sine nostro interventu gignit.
Sit scriptor reprehendo in bot eligendo / imperium mittere.

Vos can adepto perfecti in codice .
Skillbox commendat:
- Duo annorum cursum .
- Online cursum .
- Cursus practicus .
Source: www.habr.com
