Otu esi enyefe robot akụkọ dị mfe. Anyị na-ede bot na Python na Google BigQuery

Otu esi enyefe robot akụkọ dị mfe. Anyị na-ede bot na Python na Google BigQuery

Ị nwere ọrụ na-emeghachi kwa ụbọchị, kwa izu na izu? Dịka ọmụmaatụ, ide akụkọ. Ị na-arịọ data, nyochaa ya, jiri anya nke uche hụ ya (mee eserese, eserese), wee zigara onye isi gị. Ma gịnị ma ọ bụrụ na ihe a niile bụ akpaaka?

N'ime nkuzi a, anyị ga-emepụta bot maka Telegram nke ga-enyere aka ịme mkpesa. Ihe kacha mma bụ na mmemme ahụ niile ga-enwe naanị ahịrị 50 nke koodu! Ọ bụrụ na ị na-eke bot maka Telegram na nke mbụ, ị ga-agụkwa nke a posta.

Skillbox na-atụ aro: Usoro bara uru Onye nrụpụta Python sitere na ọkọ.

Anyị na -echetara: maka ndị na-agụ Habr niile - ego 10 ruble mgbe ị na-edebanye aha na nkuzi Skillbox ọ bụla site na iji koodu mgbasa ozi Habr.

Ka anyị malite

Ịwụnye ọba akwụkwọ

Anyị ga -eji google-cloud-bigquery iji nweta data site na Google BigQuery. matplotlib, ujo и pandas ga-enyere gị aka iji anya nke uche hụ data gị. Python-telegram-bot ga-eziga data emechara na Telegram.

pip3 wụnye google-cloud-bigquery matplotlib numpy pandas python-telegram-bot

Ijikọ Google BigQuery API

Ọ bụrụ na anyị chọrọ iji ọrụ ahụ, anyị kwesịrị ijikọ Google BigQuery API. Iji mee nke a, anyị na-aga Nchịkọta Ndị Nkwado Google ma mepụta ọrụ ọhụrụ (ma ọ bụ họrọ nke dị adị).

N'ime njikwa njikwa, họrọ Kwado APIS NA Ọrụ wee chọọ BigQuery API.

Otu esi enyefe robot akụkọ dị mfe. Anyị na-ede bot na Python na Google BigQuery

Họrọ Kwado ijikọ API.

Otu esi enyefe robot akụkọ dị mfe. Anyị na-ede bot na Python na Google BigQuery

Mepụta igodo akaụntụ

Ka anyị gaa ọzọ Nchịkọta Ndị Nkwado Google, họrọ nzere nzere, Mepụta nzere na igodo akaụntụ ọrụ.

Mgbe ahụ - Akaụntụ ọrụ ọhụrụ, ma tinye aha ahụ n'ọhịa aha akaụntụ ọrụ.

Site na listi ndọpụta ọrụ, họrọ Project> Onye nwe, wee Mepụta.

Otu esi enyefe robot akụkọ dị mfe. Anyị na-ede bot na Python na Google BigQuery

A na-akpọ faịlụ a ga-ebudata na-akpaghị aka creds.json.

Tọọ GOOGLE_APPLICATION_CREDENTIALS, kọwapụta ụzọ iji nweta creds.json n'ọnụ ọnụ.

mbupu GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'

Ọ bụrụ na ihe niile gara nke ọma, oge eruola ịmalite ide mmemme.

Ịmepụta ngwa

Maka nkuzi anyị ga-eji data sitere na bigquery-public-data.stackoverflow, maka akụkọ anyị, anyị ga-ahọrọ ọnụọgụ mbipụta kwa ụbọchị.

Ihe niile dị nnọọ mfe.

Chọọ tebụl -> Chekwaa data ahụ -> Chekwaa nhụta a -> Zipụ onyonyo a

Ka anyị mepụta otu ọrụ iji kọwaa eri ọ bụla.

Ajuju na BigQuery

Mbụ anyị na-ebubata ọba akwụkwọ.

si na google.cloud bubata bigquery

Anyị na-emepụta ọrụ a na-akpọ query_to_bigquery, ebe paramita bụ ajụjụ.

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

Ọrụ a ga-eweghachi arịrịọ a dị ka etiti data.

Ikiri data

Iji dozie nsogbu a, họrọ matplotlib.

mbubata matplotlib.pyplot ka plt

Anyị chọrọ paramita ise, ebe x bụ data x-axis, x_label bụ aha maka axis, y bụ y-axis data, y_label bụ aha maka axis, na aha bụ aha nke ihe ngosi niile.

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

Chekwa foto a

Ugbu a, ka anyị jiri ọrụ abụọ mepụta nhụta anya wee chekwaa ya.

Anyị ga-ezipụ ọnụ ọgụgụ nke posts ebipụtara kwa ụbọchị. Mbụ anyị dee arịrịọ.

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

Ajụjụ a na-enyere aka ịnakọta data izu abụọ malite na Disemba 2, 2018.

Anyị na-eji ụbọchị a n'ihi na 2018-12-02 bụ data kachasị ọhụrụ edekọ na bigquery-public-data.stackoverflow.post_history, n'ọnọdụ ndị ọzọ ị nwere ike iji CURRENT_DATE() iji nweta data kachasị ọhụrụ.

Kpọọ ọrụ query_to_bigquery iji nweta data ahụ.

dataframe = query_to_bigquery(ajụjụ)

Mgbe ahụ, anyị na-eji kọlụm data ụbọchị maka x-axis, yana kọlụm mkpokọta_posts maka y-axis.

x = dataframe['ụbọchị'].tolist()
y = nchekwa data ['total_posts'].tolist()

Anyị na-eji anya nke uche hụ ya site na iji ọrụ visualize_bar_chart wee chekwaa ya dị ka onyonyo.

plt = visualize_bar_chart (x = x, x_label = 'Ụbọchị', y=y, y_label='Mkpokọta akwụkwọ ozi', aha =' Posts kwa ụbọchị')
plt.savefig('viz.png')

Anyị kechie koodu a n'ọrụ akpọrọ 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')

Zipu onyonyo

Ka iziga onye nnata akụkọ, ị ga-amata paramita chat_id.

Anyị na-eji userinfobot ma pịnye/bido. Bot ahụ na-aza ozi dị mkpa, chat_id dị n'ime oghere id.

Ugbu a, ka anyị mepụta ọrụ send_image. Ọ ga-eji ọrụ get_and_save_image weghachi ma chekwaa onyonyo a. Ma mgbe ahụ, anyị na-eziga ihe niile na kọntaktị ziri ezi.

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

Isi mmemme

N'ikpeazụ, anyị na-emepụta ọrụ ọzọ, isi, iji malite ngwa ahụ. Echefula ịgbanwe YOU_TOKEN maka bot.

Cheta: mmemme a ga-eziga onyonyo na-akpaghị aka n'oge ị depụtara. Dịka ọmụmaatụ, anyị ga-eziga akụkọ n'elekere itoolu nke ụtụtụ kwa ụbọchị.

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

N'ihi ya, ngwa anyị ga-adị ka nke a:

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

Chekwaa faịlụ ma kpọọ ya main.py.

Anyị na-amalite ngwa ahụ site na itinye iwu na njedebe:

Python3 isi.py

Ihe niile dị njikere. Ugbu a, anyị nwere robot nke nwere ahịrị 50 nke koodu na-ewepụta akụkọ na-enweghị enyemaka anyị.

Ka anyị lelee bot site n'ebe asite n'ịhọrọ /zipụ iwu.

Otu esi enyefe robot akụkọ dị mfe. Anyị na-ede bot na Python na Google BigQuery

Ị nwere ike nweta koodu emechara na GitHub m.

Skillbox na-atụ aro:

isi: www.habr.com

Tinye a comment