Quomodo simplicia relationes ad robot delegare. Bot in Pythone et Google BigQuery scribens

Quomodo simplicia relationes ad robot delegare. Bot in Pythone et Google BigQuery scribens

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 post.

Skillbox commendat: Cursus practicus Python elit a scabere.

admonemus; omnibus legentibus "Habr" - discount 10 rublorum cum scribendo in quavis Skillbox utens "Habr" codice promotivo.

Demus incipias

Installing libraries

Nos utemur google-nubes-bigquery ut notitia ex Google BigQuery. matplotlib', numpy и pandas visualize vestri notitia auxiliatus sum tibi. python-telegram-bot 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 Developers Consolamini Google et novum consilium creare (vel unum existentium eligere).

In tabula dicione, eligite APIS ET OFFICIIS FACIO et quaeramus BigQuery API.

Quomodo simplicia relationes ad robot delegare. Bot in Pythone et Google BigQuery scribens

Lego API Admitte coniungere.

Quomodo simplicia relationes ad robot delegare. Bot in Pythone et Google BigQuery scribens

Create an ratio clavem

Eamus iterum Developers Consolamini Google, 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.

Quomodo simplicia relationes ad robot delegare. Bot in Pythone et Google BigQuery scribens

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 dataframe

Munus 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 plt

Servo 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 userinfobot 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 hiceligendo / imperium mittere.

Quomodo simplicia relationes ad robot delegare. Bot in Pythone et Google BigQuery scribens

Vos can adepto perfecti in codice mihi GitHub.

Skillbox commendat:

Source: www.habr.com

Emptum certos hospites pro locis cum praesidio DDoS, VPS VDS servers 🔥 Eme hospitium interretiale fidum cum praesidio DDoS, servitores VPS VDS | ProHoster