
کیا آپ کے پاس ایسے کام ہیں جو دن بہ دن دہراتے ہیں، ہفتے کے بعد ہفتے؟ مثال کے طور پر رپورٹیں لکھنا۔ آپ ڈیٹا کی درخواست کرتے ہیں، اس کا تجزیہ کرتے ہیں، اسے تصور کرتے ہیں (گرافس، چارٹ بنائیں) اور پھر اسے اپنے باس کو بھیجیں۔ لیکن کیا ہوگا اگر یہ سب خودکار ہو؟
اس ٹیوٹوریل میں ہم ٹیلیگرام کے لیے ایک بوٹ بنائیں گے جو خودکار رپورٹنگ میں مدد کرے گا۔ اور سب سے اچھی بات یہ ہے کہ پورا پروگرام کوڈ کی صرف 50 لائنوں پر مشتمل ہوگا! اگر آپ پہلی بار ٹیلی گرام کے لیے بوٹ بنا رہے ہیں، تو آپ کو یہ بھی پڑھنا چاہیے۔ .
Skillbox تجویز کرتا ہے: پریکٹیکل کورس .
ہم آپ کو یاد دلاتے ہیں: "Habr" کے تمام قارئین کے لیے - "Habr" پروموشنل کوڈ کا استعمال کرتے ہوئے کسی بھی Skillbox کورس میں داخلہ لینے پر 10 rubles کی رعایت۔
آو شروع کریں
لائبریریوں کی تنصیب
ہم استعمال کریں گے۔ Google BigQuery سے ڈیٹا حاصل کرنے کے لیے۔ , и آپ کو اپنے ڈیٹا کو دیکھنے میں مدد ملے گی۔ تیار شدہ ڈیٹا ٹیلیگرام کو بھیجے گا۔
pip3 google-cloud-bigquery matplotlib numpy pandas python-telegram-bot انسٹال کریں
Google BigQuery API کو مربوط کرنا
اگر ہم سروس استعمال کرنا چاہتے ہیں تو ہمیں Google BigQuery API کو جوڑنے کی ضرورت ہے۔ ایسا کرنے کے لیے ہم جاتے ہیں۔ اور ایک نیا پروجیکٹ بنائیں (یا موجودہ کو منتخب کریں)۔
کنٹرول پینل میں، APIs اور خدمات کو فعال کریں کو منتخب کریں اور BigQuery API تلاش کریں۔

API کو مربوط کرنے کے لیے اہل کو منتخب کریں۔

اکاؤنٹ کی کلید بنائیں
چلو پھر سے چلتے ہیں۔ ، اسناد کے ٹیب کو منتخب کریں، اسناد بنائیں اور سروس اکاؤنٹ کی کلید۔
پھر - نیا سروس اکاؤنٹ، اور سروس اکاؤنٹ کے نام کے خانے میں نام درج کریں۔
رول ڈراپ ڈاؤن فہرست سے، پروجیکٹ > مالک منتخب کریں، پھر تخلیق کریں۔

فائل جو خود بخود ڈاؤن لوڈ ہو جائے گی اسے 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 کمانڈ کو منتخب کرکے۔

آپ تیار شدہ کوڈ پر حاصل کر سکتے ہیں۔ .
Skillbox تجویز کرتا ہے:
- دو سالہ پریکٹیکل کورس .
- آن لائن کورس۔ .
- عملی سال کا کورس .
ماخذ: www.habr.com
