Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Ma haysaa hawlo soo noqnoqda maalinba maalinta ka dambaysa, toddobaadba toddobaadka ka dambeeya? Tusaale ahaan, qorista warbixinnada. Waxaad codsataa xogta, falanqeyso, sawirtaa (samee garaafyo, jaantusyo), ka dibna u dir madaxaaga. Laakiin maxaa dhacaya haddii waxaas oo dhan ay ahaayeen kuwo otomaatig ah?

Casharradan waxaan u abuuri doonaa bot Telegram kaas oo kaa caawin doona in si otomaatig ah loo tebiyo. Waxa ugu fiican ayaa ah in barnaamijka oo dhan uu ka koobnaan doono 50 xariiq oo kood ah! Haddii aad u abuurayso bot Telegram markii ugu horeysay, markaa waa inaad sidoo kale akhridaa kan dhajin.

Skillbox waxay ku talinaysaa: Koorso wax ku ool ah Soo saare Python meel eber ah.

Waxaan xusuusineynaa: dhammaan akhristayaasha "Habr" - qiimo dhimis ah 10 rubles marka la qorayo koorso kasta oo Skillbox ah iyadoo la adeegsanayo koodhka xayeysiinta "Habr".

Aan bilowno

Ku rakibida maktabadaha

Waan isticmaali doonaa google-cloud-bigquery si aad xogta uga hesho Google BigQuery. matplotlib, kabuubsan и pandas waxay kaa caawin doontaa inaad sawirto xogtaada. Python-telegram-bot xogta dhammaatay waxay u diri doontaa Telegram.

pip3 ku rakib google-cloud-bigquery matplotlib numpy pandas python-telegram-bot

Isku xidhka Google BigQuery API

Haddii aan rabno inaan isticmaalno adeegga, waxaan u baahanahay inaan ku xirno Google BigQuery API. Si aan tan u sameyno waxaan aadeynaa Qalabixiyaha Google Developers oo samee mashruuc cusub (ama dooro mid jira).

Qaybta kantaroolka, dooro ENABLE APIS AND SERVICES oo raadi BigQuery API.

Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Dooro Awood in lagu xidho API-ga

Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Samee furaha akoontiga

Aan mar kale tagno Qalabixiyaha Google Developers, dooro tabka aqoonsiga, Abuur aqoonsiga iyo furaha akoonka adeega.

Kadib - Akoonka Adeegga Cusub, oo geli magaca goobta magaca akoonka Adeegga.

Liiska hoos-u-dhaca doorka, dooro Project> Mulkiilaha, ka dibna Abuur.

Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Faylka si toos ah loo soo dejin doono waxaa loo yaqaan creds.json.

Deji GOOGLE_APPLICATION_CREDENTIALS, adoo cayimaya dariiqa loo maro creds.json ee ku yaala terminaalka.

dhoofi GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'

Haddii wax waliba si fiican u dhaceen, waa waqtigii la bilaabi lahaa qorista barnaamijka.

Abuuritaanka codsi

Tababarka waxaan u isticmaali doonaa xogta bigquery-public-data.stackoverflow, warbixinteena waxaan dooran doonaa tirada daabacaadaha maalinlaha ah.

Way fududahay.

Weydii miiska -> Arag xogta -> Keydi aragtida -> Dir sawirka

Aan abuurno hal shaqo si aan u qeexno dun kasta.

Weydiinta BigQuery

Marka hore waxaan soo dejinaa maktabadda.

ka google.cloud soo dejinta bigquery

Waxaan abuurnaa shaqo la yiraahdo query_to_bigquery, halkaasoo halbeeggu yahay weydiin.

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

Shaqadani waxay soo celin doontaa codsiga qaab xogeed ahaan.

Xogta sawirida

Si loo xalliyo dhibaatadan, dooro matplotlib.

soo dejiso matplotlib.pyplot sida plt

Waxaan u baahanahay shan cabbir, halka x ay tahay xogta dhidibka x, x_label waa ciwaanka dhidibka, y waa xogta dhidibka y, y_label waa ciwaanka dhidibka, ciwaankana waa ciwaanka muuqaalka oo dhan.

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

Kaydi sawirka

Hadda aan isticmaalno laba hawlood si aan u abuurno muuqaal oo aan u badbaadino.

Waxaan soo diri doonaa tirada qoraallada la daabacay maalin kasta. Marka hore waxaan qornaa codsi.

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

Weydiinta waxay caawisaa ururinta xogta laba toddobaad laga bilaabo Disembar 2, 2018.

Waxaan isticmaalnaa taariikhdaan sababtoo ah 2018-12-02 waa xogtii ugu dambeysay ee lagu duubay bigquery-public-data.stackoverflow.post_history, xaaladaha kale waxaad isticmaali kartaa CURRENT_DATE() si aad u hesho xogta cusub.

Wac shaqada query_to_bigquery si aad xogta u hesho.

dataframe = su'aal_to_bigquery( waydiin)

Kadibna waxaan isticmaalnaa tiirka xogta taariikhda dhidibka x, iyo tiirka guud_posts ee dhidibka y.

x = qaab-dhismeedka xogta ['taariikhda'].tolist()
y = qaab-dhismeedka xogta ['total_posts'].tolist()

Waxaan u sawirnaa annagoo isticmaalna shaqada visualize_bar_chart oo waxaan u kaydinnaa sawir ahaan.

plt = visualize_bar_chart
plt.savefig('viz.png')

Waxaan ku duubnaa summadan hawl la yiraahdo 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')

Soo dir sawir

Si aad warbixin ugu dirto qaataha, waxaad u baahan tahay inaad ogaato qiyaasta chat_id.

Waxaan isticmaalnaa userinfobot oo ku qor/bilow. Botku wuxuu kaga jawaabayaa macluumaadka lagama maarmaanka ah, chat_id wuxuu ku jiraa goobta aqoonsiga.

Hadda aynu abuurno shaqada send_image. Waxay isticmaali doontaa shaqada get_and_save_image si ay u soo ceshato oo u kaydiso sawirka. Kadibna wax walba waxaan u direynaa xiriirka saxda ah.

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

Barnaamijka ugu muhiimsan

Ugu dambeyntii, waxaan abuurnaa shaqo kale, ugu weyn, si loo bilaabo codsiga. Ha iloobin inaad u bedesho YOU_TOKEN bot.

Xusuusnow: barnaamijkani wuxuu si toos ah u soo diri doonaa sawirka wakhtiga aad sheegtay. Tusaale ahaan, waxaanu soo diri doonaa warbixin sagaalka subaxnimo maalin kasta.

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

Natiijo ahaan, codsigayagu wuxuu u ekaan doonaa sidan:

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

Kaydi faylka oo wac main.py.

Waxaan bilownaa arjiga anagoo galinayna taliska gudaha terminalka:

Python3 ugu weyn.py

Dhammaan waa diyaar. Hadda waxaan haynaa robot ka kooban 50 xariiq oo kood ah kaas oo soo saara warbixino anaga oo aan faragelin.

Aan hubino bot-ka halkanadiga oo dooranaya amarka/dir

Sida loo wakiisho warbixino fudud robot. Ku qorista bot Python iyo Google BigQuery

Waxaad ka heli kartaa koodka la dhammeeyay my GitHub.

Skillbox waxay ku talinaysaa:

Source: www.habr.com

Add a comment