ஒரு ரோபோவுக்கு எளிய அறிக்கைகளை எவ்வாறு வழங்குவது. 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 டெவெலப்பர்ஸ் கன்சோல் புதிய திட்டத்தை உருவாக்கவும் (அல்லது ஏற்கனவே உள்ள ஒன்றைத் தேர்ந்தெடுக்கவும்).

கட்டுப்பாட்டுப் பலகத்தில், ANABLE APIS மற்றும் SERVICES என்பதைத் தேர்ந்தெடுத்து, BigQuery APIயைத் தேடவும்.

ஒரு ரோபோவுக்கு எளிய அறிக்கைகளை எவ்வாறு வழங்குவது. Python மற்றும் Google BigQuery இல் ஒரு போட் எழுதுதல்

API ஐ இணைக்க இயக்கு என்பதைத் தேர்ந்தெடுக்கவும்.

ஒரு ரோபோவுக்கு எளிய அறிக்கைகளை எவ்வாறு வழங்குவது. Python மற்றும் Google BigQuery இல் ஒரு போட் எழுதுதல்

கணக்கு விசையை உருவாக்கவும்

மீண்டும் செல்வோம் Google டெவெலப்பர்ஸ் கன்சோல், நற்சான்றிதழ்கள் தாவலைத் தேர்ந்தெடுக்கவும், நற்சான்றிதழ்களை உருவாக்கவும் மற்றும் சேவை கணக்கு விசையை உருவாக்கவும்.

பின்னர் - புதிய சேவை கணக்கு, மற்றும் சேவை கணக்கு பெயர் புலத்தில் பெயரை உள்ளிடவும்.

பங்கு கீழ்தோன்றும் பட்டியலில் இருந்து, திட்டம் > உரிமையாளர் என்பதைத் தேர்ந்தெடுத்து, பின்னர் உருவாக்கவும்.

ஒரு ரோபோவுக்கு எளிய அறிக்கைகளை எவ்வாறு வழங்குவது. Python மற்றும் Google BigQuery இல் ஒரு போட் எழுதுதல்

தானாக பதிவிறக்கம் செய்யப்படும் கோப்பு creds.json என்று அழைக்கப்படுகிறது.

GOOGLE_APPLICATION_CREDENTIALSஐ அமைக்கவும், முனையத்தில் creds.jsonக்கான பாதையைக் குறிப்பிடவும்.

ஏற்றுமதி GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'

எல்லாம் சரியாக நடந்தால், நிரலை எழுதத் தொடங்க வேண்டிய நேரம் இது.

ஒரு பயன்பாட்டை உருவாக்குதல்

டுடோரியலுக்கு, bigquery-public-data.stackoverflow இலிருந்து தரவைப் பயன்படுத்துவோம், எங்கள் அறிக்கைக்காக தினசரி வெளியீடுகளின் எண்ணிக்கையைத் தேர்ந்தெடுப்போம்.

எல்லாம் மிகவும் எளிமையானது.

அட்டவணையை வினவவும் -> தரவைக் காட்சிப்படுத்தவும் -> காட்சிப்படுத்தலைச் சேமிக்கவும் -> படத்தை அனுப்பவும்

ஒவ்வொரு நூலையும் வரையறுக்க ஒரு செயல்பாட்டை உருவாக்குவோம்.

BigQuery க்கு வினவல்

முதலில் நூலகத்தை இறக்குமதி செய்கிறோம்.

google.Cloud இறக்குமதி bigquery இலிருந்து

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 செயல்பாட்டை அழைக்கவும்.

dataframe = query_to_bigquery(query)

பின்னர் x-அச்சுக்கான தேதி தரவு நெடுவரிசையையும், y-அச்சுக்கான total_posts நெடுவரிசையையும் பயன்படுத்துகிறோம்.

x = dataframe['date'].tolist()
y = டேட்டாஃப்ரேம்['total_posts'].tolist()

Visualize_bar_chart செயல்பாட்டைப் பயன்படுத்தி அதை காட்சிப்படுத்துகிறோம் மற்றும் அதை ஒரு படமாக சேமிக்கிறோம்.

plt = visualize_bar_chart(x=x, x_label='Date', 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 கோடுகள் அடங்கிய ரோபோ உள்ளது, அது எங்கள் தலையீடு இல்லாமல் அறிக்கைகளை உருவாக்குகிறது.

போட் சரிபார்ப்போம் இங்கிருந்து/ அனுப்பு கட்டளையைத் தேர்ந்தெடுப்பதன் மூலம்.

ஒரு ரோபோவுக்கு எளிய அறிக்கைகளை எவ்வாறு வழங்குவது. Python மற்றும் Google BigQuery இல் ஒரு போட் எழுதுதல்

நீங்கள் முடிக்கப்பட்ட குறியீட்டைப் பெறலாம் எனது GitHub.

Skillbox பரிந்துரைக்கிறது:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்