సాధారణ నివేదికలను రోబోట్‌కి ఎలా అప్పగించాలి. మేము Python మరియు Google BigQueryలో ఒక బాట్‌ని వ్రాస్తాము

సాధారణ నివేదికలను రోబోట్‌కి ఎలా అప్పగించాలి. మేము Python మరియు Google BigQueryలో ఒక బాట్‌ని వ్రాస్తాము

రోజు తర్వాత, వారం వారం పునరావృతమయ్యే పనులు మీకు ఉన్నాయా? ఉదాహరణకు, నివేదికలు రాయడం. మీరు డేటాను అభ్యర్థించండి, దానిని విశ్లేషించండి, దానిని దృశ్యమానం చేయండి (గ్రాఫ్‌లు, చార్ట్‌లను రూపొందించండి), ఆపై దానిని మీ యజమానికి పంపండి. అయితే ఇదంతా ఆటోమేటెడ్ అయితే?

ఈ ట్యుటోరియల్‌లో మేము టెలిగ్రామ్ కోసం ఒక బాట్‌ను సృష్టిస్తాము, అది రిపోర్టింగ్‌ని ఆటోమేట్ చేయడంలో సహాయపడుతుంది. మరియు చక్కని విషయం ఏమిటంటే, ప్రోగ్రామ్ మొత్తం 50 లైన్ల కోడ్‌ను మాత్రమే కలిగి ఉంటుంది! మీరు మొదటిసారిగా టెలిగ్రామ్ కోసం బాట్‌ను సృష్టిస్తున్నట్లయితే, మీరు దీన్ని కూడా చదవాలి పోస్ట్.

Skillbox సిఫార్సు చేస్తోంది: ప్రాక్టికల్ కోర్సు మొదటి నుండి పైథాన్ డెవలపర్.

మేము గుర్తు చేస్తున్నాము: Habr పాఠకులందరికీ - Habr ప్రోమో కోడ్‌ని ఉపయోగించి ఏదైనా Skillbox కోర్సులో నమోదు చేసుకున్నప్పుడు 10 రూబుల్ తగ్గింపు.

ప్రారంభిద్దాం

లైబ్రరీలను ఇన్‌స్టాల్ చేస్తోంది

మేము ఉపయోగిస్తాము google-Cloud-bigquery Google BigQuery నుండి డేటాను పొందడానికి. matplotlib, తిమ్మిరి и పాండాలు మీ డేటాను దృశ్యమానం చేయడంలో మీకు సహాయం చేస్తుంది. python-telegram-bot పూర్తయిన డేటాను టెలిగ్రామ్‌కి పంపుతుంది.

pip3 Google-Cloud-bigquery matplotlib numpy pandas python-telegram-botని ఇన్‌స్టాల్ చేయండి

Google BigQuery APIని కనెక్ట్ చేస్తోంది

మేము సేవను ఉపయోగించాలనుకుంటే, మేము Google BigQuery APIని కనెక్ట్ చేయాలి. దీన్ని చేయడానికి మేము వెళ్తాము Google డెవలపర్స్ కన్సోల్ మరియు కొత్త ప్రాజెక్ట్‌ను సృష్టించండి (లేదా ఇప్పటికే ఉన్నదాన్ని ఎంచుకోండి).

నియంత్రణ ప్యానెల్‌లో, APIS మరియు సేవలను ప్రారంభించు ఎంచుకోండి మరియు BigQuery API కోసం చూడండి.

సాధారణ నివేదికలను రోబోట్‌కి ఎలా అప్పగించాలి. మేము Python మరియు Google BigQueryలో ఒక బాట్‌ని వ్రాస్తాము

APIని కనెక్ట్ చేయడానికి ప్రారంభించు ఎంచుకోండి.

సాధారణ నివేదికలను రోబోట్‌కి ఎలా అప్పగించాలి. మేము Python మరియు Google BigQueryలో ఒక బాట్‌ని వ్రాస్తాము

ఖాతా కీని సృష్టించండి

మళ్ళీ వెళ్దాం Google డెవలపర్స్ కన్సోల్, క్రెడెన్షియల్స్ ట్యాబ్‌ను ఎంచుకోండి, ఆధారాలను సృష్టించండి మరియు సేవా ఖాతా కీని సృష్టించండి.

అప్పుడు - కొత్త సేవా ఖాతా, మరియు సేవా ఖాతా పేరు ఫీల్డ్‌లో పేరును నమోదు చేయండి.

పాత్ర డ్రాప్-డౌన్ జాబితా నుండి, ప్రాజెక్ట్ > యజమానిని ఎంచుకుని, ఆపై సృష్టించండి.

సాధారణ నివేదికలను రోబోట్‌కి ఎలా అప్పగించాలి. మేము Python మరియు Google BigQueryలో ఒక బాట్‌ని వ్రాస్తాము

స్వయంచాలకంగా డౌన్‌లోడ్ చేయబడే ఫైల్‌ని creds.json అంటారు.

టెర్మినల్‌లో creds.jsonకి మార్గాన్ని పేర్కొంటూ GOOGLE_APPLICATION_CREDENTIALSని సెట్ చేయండి.

ఎగుమతి GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'

ప్రతిదీ సరిగ్గా జరిగితే, ప్రోగ్రామ్ రాయడం ప్రారంభించడానికి ఇది సమయం.

అప్లికేషన్‌ను సృష్టిస్తోంది

ట్యుటోరియల్ కోసం మేము bigquery-public-data.stackoverflow నుండి డేటాను ఉపయోగిస్తాము, మా నివేదిక కోసం మేము రోజువారీ ప్రచురణల సంఖ్యను ఎంచుకుంటాము.

ప్రతిదీ తగినంత సులభం.

పట్టికను ప్రశ్నించండి -> డేటాను దృశ్యమానం చేయండి -> విజువలైజేషన్‌ను సేవ్ చేయండి -> చిత్రాన్ని పంపండి

ప్రతి థ్రెడ్‌ను నిర్వచించడానికి ఒక ఫంక్షన్‌ని క్రియేట్ చేద్దాం.

BigQueryకి ప్రశ్న

మొదట మేము లైబ్రరీని దిగుమతి చేస్తాము.

google.cloud దిగుమతి పెద్ద ప్రశ్న నుండి

మేము query_to_bigquery అనే ఫంక్షన్‌ని సృష్టిస్తాము, ఇక్కడ పరామితి ప్రశ్న.

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

ఈ ఫంక్షన్ అభ్యర్థనను డేటా ఫ్రేమ్‌గా అందిస్తుంది.

డేటాను దృశ్యమానం చేస్తోంది

ఈ సమస్యను పరిష్కరించడానికి, matplotlib ఎంచుకోండి.

matplotlib.pyplotని pltగా దిగుమతి చేయండి

మనకు ఐదు పారామితులు అవసరం, ఇక్కడ x అనేది x-యాక్సిస్ డేటా, x_label అనేది అక్షానికి శీర్షిక, y అనేది y-యాక్సిస్ డేటా, y_label అనేది అక్షానికి శీర్షిక మరియు టైటిల్ అనేది మొత్తం విజువలైజేషన్ యొక్క శీర్షిక.

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

చిత్రాన్ని సేవ్ చేయండి

ఇప్పుడు విజువలైజేషన్‌ని సృష్టించడానికి మరియు దానిని సేవ్ చేయడానికి రెండు ఫంక్షన్‌లను ఉపయోగించుకుందాం.

మేము ప్రతిరోజూ ప్రచురించే పోస్ట్‌ల సంఖ్యను పంపుతాము. మొదట మేము ఒక అభ్యర్థనను వ్రాస్తాము.

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

ఈ ప్రశ్న డిసెంబర్ 2, 2018 నుండి రెండు వారాల పాటు డేటాను సేకరించడంలో సహాయపడుతుంది.

మేము ఈ తేదీని ఉపయోగిస్తాము ఎందుకంటే 2018-12-02 అనేది bigquery-public-data.stackoverflow.post_historyలో రికార్డ్ చేయబడిన తాజా డేటా, ఇతర సందర్భాల్లో మీరు సరికొత్త డేటాను పొందడానికి CURRENT_DATE()ని ఉపయోగించవచ్చు.

డేటాను పొందడానికి query_to_bigquery ఫంక్షన్‌కు కాల్ చేయండి.

డేటాఫ్రేమ్ = query_to_bigquery(query)

తర్వాత మేము x-axis కోసం తేదీ డేటా కాలమ్‌ని మరియు y-axis కోసం total_posts నిలువు వరుసను ఉపయోగిస్తాము.

x = డేటాఫ్రేమ్['తేదీ'].tolist()
y = డేటాఫ్రేమ్['total_posts'].tolist()

మేము Visualize_bar_chart ఫంక్షన్‌ని ఉపయోగించి దాన్ని దృశ్యమానం చేస్తాము మరియు దానిని చిత్రంగా సేవ్ చేస్తాము.

plt = visualize_bar_chart(x=x, x_label='తేదీ', y=y, y_label='మొత్తం పోస్ట్‌లు', శీర్షిక='రోజువారీ పోస్ట్‌లు')
plt.savefig('viz.png')

మేము ఈ కోడ్‌ని 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')

ఒక చిత్రాన్ని పంపండి

గ్రహీతకు నివేదికను పంపడానికి, మీరు chat_id పరామితిని తెలుసుకోవాలి.

మేము ఉపయోగిస్తాము userinfobot మరియు టైప్ / స్టార్ట్ చేయండి. బోట్ అవసరమైన సమాచారంతో ప్రతిస్పందిస్తుంది, chat_id ఐడి ఫీల్డ్‌లో ఉంటుంది.

ఇప్పుడు send_image ఫంక్షన్‌ని క్రియేట్ చేద్దాం. ఇది ఇమేజ్‌ని తిరిగి పొందడానికి మరియు సేవ్ చేయడానికి get_and_save_image ఫంక్షన్‌ని ఉపయోగిస్తుంది. ఆపై మేము ప్రతిదీ సరైన పరిచయానికి పంపుతాము.

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

ప్రధాన కార్యక్రమం

చివరగా, అప్లికేషన్‌ను ప్రారంభించడానికి మేము మరొక ఫంక్షన్‌ను, మెయిన్‌గా సృష్టిస్తాము. బాట్ కోసం YOUR_TOKENని మార్చడం మర్చిపోవద్దు.

గుర్తుంచుకోండి: మీరు పేర్కొన్న సమయంలో ఈ ప్రోగ్రామ్ స్వయంచాలకంగా చిత్రాన్ని పంపుతుంది. ఉదాహరణకు, మేము ప్రతిరోజూ ఉదయం తొమ్మిది గంటలకు ఒక నివేదికను పంపుతాము.

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

ఫలితంగా, మా అప్లికేషన్ ఇలా కనిపిస్తుంది:

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

ఫైల్‌ను సేవ్ చేసి, దానికి main.py కాల్ చేయండి.

మేము టెర్మినల్‌లో ఆదేశాన్ని నమోదు చేయడం ద్వారా అప్లికేషన్‌ను ప్రారంభిస్తాము:

python3 main.py

అన్నీ సిద్ధంగా ఉన్నాయి. ఇప్పుడు మన ప్రమేయం లేకుండానే నివేదికలను రూపొందించే 50 లైన్ల కోడ్‌తో కూడిన రోబోట్ ఉంది.

బాట్‌ని తనిఖీ చేద్దాం ఇక్కడ నుండి/send ఆదేశాన్ని ఎంచుకోవడం ద్వారా.

సాధారణ నివేదికలను రోబోట్‌కి ఎలా అప్పగించాలి. మేము Python మరియు Google BigQueryలో ఒక బాట్‌ని వ్రాస్తాము

మీరు పూర్తి చేసిన కోడ్‌ని ఇక్కడ పొందవచ్చు నా GitHub.

Skillbox సిఫార్సు చేస్తోంది:

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి