روبوٹ کو سادہ رپورٹس کیسے سونپیں۔ Python اور Google BigQuery میں بوٹ لکھنا

روبوٹ کو سادہ رپورٹس کیسے سونپیں۔ Python اور Google BigQuery میں بوٹ لکھنا

کیا آپ کے پاس ایسے کام ہیں جو دن بہ دن دہراتے ہیں، ہفتے کے بعد ہفتے؟ مثال کے طور پر رپورٹیں لکھنا۔ آپ ڈیٹا کی درخواست کرتے ہیں، اس کا تجزیہ کرتے ہیں، اسے تصور کرتے ہیں (گرافس، چارٹ بنائیں) اور پھر اسے اپنے باس کو بھیجیں۔ لیکن کیا ہوگا اگر یہ سب خودکار ہو؟

اس ٹیوٹوریل میں ہم ٹیلیگرام کے لیے ایک بوٹ بنائیں گے جو خودکار رپورٹنگ میں مدد کرے گا۔ اور سب سے اچھی بات یہ ہے کہ پورا پروگرام کوڈ کی صرف 50 لائنوں پر مشتمل ہوگا! اگر آپ پہلی بار ٹیلی گرام کے لیے بوٹ بنا رہے ہیں، تو آپ کو یہ بھی پڑھنا چاہیے۔ پوسٹ.

Skillbox تجویز کرتا ہے: پریکٹیکل کورس شروع سے ازگر کا ڈویلپر.

ہم آپ کو یاد دلاتے ہیں: "Habr" کے تمام قارئین کے لیے - "Habr" پروموشنل کوڈ کا استعمال کرتے ہوئے کسی بھی Skillbox کورس میں داخلہ لینے پر 10 rubles کی رعایت۔

آو شروع کریں

لائبریریوں کی تنصیب

ہم استعمال کریں گے۔ google-Cloud-bigquery Google BigQuery سے ڈیٹا حاصل کرنے کے لیے۔ matplotlib, عجیب и pandas آپ کو اپنے ڈیٹا کو دیکھنے میں مدد ملے گی۔ 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 سے 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-axis ڈیٹا ہے، x_label محور کا عنوان ہے، y-axis ڈیٹا ہے، 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(استفسار)

پھر ہم x-axis کے لیے ڈیٹ ڈیٹا کالم، اور y-axis کے لیے کل_پوسٹ کالم استعمال کرتے ہیں۔

x = ڈیٹا فریم['date'].tolist()
y = ڈیٹا فریم['total_posts'].tolist()

ہم اسے visualize_bar_chart فنکشن کا استعمال کرتے ہوئے دیکھتے ہیں اور اسے تصویر کے طور پر محفوظ کرتے ہیں۔

plt = visualize_bar_chart(x=x, x_label='Date', y=y, y_label='Total Posts', title='روزانہ پوسٹس')
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 پیرامیٹر جاننے کی ضرورت ہے۔

ہم استعمال کرتے ہیں صارف انفوبوٹ اور ٹائپ کریں /شروع کریں۔ بوٹ ضروری معلومات کے ساتھ جواب دیتا ہے، chat_id 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

نیا تبصرہ شامل کریں