Ahoana ny fametrahana tatitra tsotra amin'ny robot. Manoratra bot amin'ny Python sy Google BigQuery izahay

Ahoana ny fametrahana tatitra tsotra amin'ny robot. Manoratra bot amin'ny Python sy Google BigQuery izahay

Manana asa miverimberina isan'andro ve ianao, isan-kerinandro? Ohatra, manoratra tatitra. Mangataka angon-drakitra ianao, manadihady azy, alaivo sary an-tsaina (manaova grafika, tabilao), ary alefaso any amin'ny lehibenao. Ahoana anefa raha mandeha ho azy izany rehetra izany?

Amin'ity lesona ity dia hamorona bot ho an'ny Telegram izahay izay hanampy amin'ny fanaovana automatique ny tatitra. Ary ny tena mahafinaritra dia ny programa manontolo dia tsy misy afa-tsy 50 andalana code! Raha sambany ianao no namorona bot ho an'ny Telegram, dia tokony hamaky ity iray ity koa ianao lahatsoratra.

Skillbox dia manoro hevitra: Mazava ho azy Mpamorona Python hatramin'ny voalohany.

Mampahatsiahy izahay: ho an'ny mpamaky rehetra ny "Habr" - fihenam-bidy 10 roubles rehefa misoratra anarana amin'ny taranja Skillbox rehetra mampiasa ny code promotional "Habr".

Andeha isika hanomboka

Fametrahana tranomboky

Hampiasa izahay google-cloud-bigquery mba hahazoana angona avy amin'ny Google BigQuery. matplotlib, numpy ΠΈ pandas hanampy anao hijery ny angonao. python-telegram-bot handefa ny angona vita amin'ny Telegram.

pip3 mametraka google-cloud-bigquery matplotlib numpy pandas python-telegram-bot

Mampifandray ny Google BigQuery API

Raha te hampiasa ny serivisy isika dia mila mampifandray ny Google BigQuery API. Mba hanaovana izany dia mandeha any Google Console Console ary mamorona tetikasa vaovao (na mifidiana efa misy).

Ao amin'ny tontonana fanaraha-maso, safidio ENBLE APIS AND SERVICES ary tadiavo ny BigQuery API.

Ahoana ny fametrahana tatitra tsotra amin'ny robot. Manoratra bot amin'ny Python sy Google BigQuery izahay

Select Enable hampifandray ny API.

Ahoana ny fametrahana tatitra tsotra amin'ny robot. Manoratra bot amin'ny Python sy Google BigQuery izahay

Mamorona fanalahidin'ny kaonty

Andao indray mandeha Google Console Console, safidio ny tabilao Credentials, Create credentials and Service account key.

Avy eo - Kaonty serivisy vaovao, ary ampidiro ao amin'ny saha Anaran'ny kaonty serivisy.

Avy amin'ny lisitry ny fidinan'ny Role, mifidiana Project > Owner, avy eo Create.

Ahoana ny fametrahana tatitra tsotra amin'ny robot. Manoratra bot amin'ny Python sy Google BigQuery izahay

Ny rakitra izay alaina ho azy dia antsoina hoe creds.json.

Mametraha GOOGLE_APPLICATION_CREDENTIALS, mamaritra ny lalana mankany creds.json ao amin'ny terminal.

manondrana GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'

Raha nandeha tsara ny zava-drehetra, dia izao no fotoana hanombohana ny fanoratana ny fandaharana.

Mamorona fampiharana

Ho an'ny lesona dia hampiasa data avy amin'ny bigquery-public-data.stackoverflow izahay, ho an'ny tatitray dia hisafidy ny isan'ny famoahana isan'andro izahay.

Tsotra ny zava-drehetra.

Manontania ny latabatra -> Alaivo sary an-tsaina ny angon-drakitra -> Tehirizo ny sary -> Alefaso ny sary

Andao hamorona fiasa iray hamaritana ny kofehy tsirairay.

Fanontaniana amin'ny BigQuery

Manafatra ny tranomboky aloha isika.

avy amin'ny google.cloud import bigquery

Mamorona fiasa antsoina hoe query_to_bigquery izahay, izay misy ny paramètre query.

def query_to_bigquery(query):
    client = bigquery.Client()
    query_job = client.query(query)
    result = query_job.result()
    dataframe = result.to_dataframe()
    return dataframe

Ity fiasa ity dia hamerina ny fangatahana ho toy ny frame data.

Mampiseho angon-drakitra

Mba hamahana ity olana ity, mifidiana matplotlib.

import matplotlib.pyplot ho plt

Mila masontsivana dimy isika, izay ny x dia ny angona x-axis, ny x_label dia ny lohatenin'ny axe, ny y ny angona y-axis, ny y_label dia ny lohatenin'ny axe, ary ny lohateny dia ny lohatenin'ny sary manontolo.

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

Tehirizo ilay sary

Andeha isika hampiasa fiasa roa hamoronana sary sy hitahiry azy.

Handefa ny isan'ny lahatsoratra mivoaka isan'andro izahay. Voalohany dia manoratra fangatahana izahay.

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
        """

Manampy amin'ny fanangonana angona mandritra ny tapa-bolana manomboka ny 2 Desambra 2018 ny fanontaniana.

Ampiasainay io daty io satria 2018-12-02 no angona farany voarakitra ao amin'ny bigquery-public-data.stackoverflow.post_history, amin'ny tranga hafa azonao ampiasaina ny CURRENT_DATE() mba hahazoana ny angona vaovao indrindra.

Antsoy ny asa query_to_bigquery mba hahazoana ny angona.

dataframe = query_to_bigquery(query)

Avy eo dia mampiasa ny tsanganana data daty ho an'ny x-axis, ary ny total_posts ho an'ny y-axis.

x = dataframe['daty'].tolist()
y = dataframe['total_posts'].tolist()

Alaintsika sary an-tsaina izany amin'ny fampiasana ny fiasa visualize_bar_chart ary tehirizo ho sary.

plt = visualize_bar_chart(x=x, x_label='Daty', y=y, y_label='Total posts', title='Daily Posts')
plt.savefig('viz.png')

Nofonosinay ity kaody ity amin'ny fiasa antsoina hoe 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')

Mandefasa sary

Mba handefasana tatitra amin'ny mpandray dia mila mahafantatra ny mari-pamantarana chat_id ianao.

Ampiasainay userinfobot ary type/start. Ny bot dia mamaly miaraka amin'ny fampahalalana ilaina, chat_id dia voarakitra ao amin'ny saha id.

Andeha isika hamorona ny asa send_image. Hampiasa ny fiasa get_and_save_image izy io mba haka sy hamonjena ilay sary. Ary avy eo dia alefanay any amin'ny fifandraisana marina ny zava-drehetra.

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'))

Fandaharana fototra

Farany, mamorona fiasa hafa izahay, lehibe, hanombohana ny fampiharana. Aza adino ny manova ny YOUR_TOKEN ho an'ny bot.

Tsarovy: ity programa ity dia handefa ho azy ny sary amin'ny fotoana voafaritrao. Ohatra, handefa tatitra isan’andro amin’ny sivy maraina izahay.

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()

Vokatr'izany dia ho toy izao ny fampiharana ataontsika:

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()

Tehirizo ilay rakitra ary antsoy hoe main.py.

Manomboka ny fampiharana izahay amin'ny alΓ lan'ny fampidirana ny baiko ao amin'ny terminal:

python3 main.py

Efa vonona ny rehetra. Ankehitriny isika dia manana robot misy andalana 50 kaody izay miteraka tatitra tsy misy fitsabahantsika.

Andeha hojerentsika ny bot avy etoamin'ny alΓ lan'ny fisafidianana ny baiko / send.

Ahoana ny fametrahana tatitra tsotra amin'ny robot. Manoratra bot amin'ny Python sy Google BigQuery izahay

Azonao atao ny mahazo ny kaody vita amin'ny ny GitHub.

Skillbox dia manoro hevitra:

Source: www.habr.com

Add a comment