روبوٹ کو سادہ رپورٹس کیسے سونپیں۔ Python اور Google BigQuery میں بوٹ لکھنا
کیا آپ کے پاس ایسے کام ہیں جو دن بہ دن دہراتے ہیں، ہفتے کے بعد ہفتے؟ مثال کے طور پر رپورٹیں لکھنا۔ آپ ڈیٹا کی درخواست کرتے ہیں، اس کا تجزیہ کرتے ہیں، اسے تصور کرتے ہیں (گرافس، چارٹ بنائیں) اور پھر اسے اپنے باس کو بھیجیں۔ لیکن کیا ہوگا اگر یہ سب خودکار ہو؟
اس ٹیوٹوریل میں ہم ٹیلیگرام کے لیے ایک بوٹ بنائیں گے جو خودکار رپورٹنگ میں مدد کرے گا۔ اور سب سے اچھی بات یہ ہے کہ پورا پروگرام کوڈ کی صرف 50 لائنوں پر مشتمل ہوگا! اگر آپ پہلی بار ٹیلی گرام کے لیے بوٹ بنا رہے ہیں، تو آپ کو یہ بھی پڑھنا چاہیے۔ پوسٹ.
ہم آپ کو یاد دلاتے ہیں:"Habr" کے تمام قارئین کے لیے - "Habr" پروموشنل کوڈ کا استعمال کرتے ہوئے کسی بھی Skillbox کورس میں داخلہ لینے پر 10 rubles کی رعایت۔
اگر ہم سروس استعمال کرنا چاہتے ہیں تو ہمیں Google BigQuery API کو جوڑنے کی ضرورت ہے۔ ایسا کرنے کے لیے ہم جاتے ہیں۔ Google ڈویلپرز کنسول اور ایک نیا پروجیکٹ بنائیں (یا موجودہ کو منتخب کریں)۔
کنٹرول پینل میں، APIs اور خدمات کو فعال کریں کو منتخب کریں اور BigQuery API تلاش کریں۔
API کو مربوط کرنے کے لیے اہل کو منتخب کریں۔
اکاؤنٹ کی کلید بنائیں
چلو پھر سے چلتے ہیں۔ Google ڈویلپرز کنسول، اسناد کے ٹیب کو منتخب کریں، اسناد بنائیں اور سروس اکاؤنٹ کی کلید۔
پھر - نیا سروس اکاؤنٹ، اور سروس اکاؤنٹ کے نام کے خانے میں نام درج کریں۔
رول ڈراپ ڈاؤن فہرست سے، پروجیکٹ > مالک منتخب کریں، پھر تخلیق کریں۔
فائل جو خود بخود ڈاؤن لوڈ ہو جائے گی اسے creds.json کہتے ہیں۔
ٹرمینل میں creds.json کا راستہ بتاتے ہوئے GOOGLE_APPLICATION_CREDENTIALS سیٹ کریں۔
یہ فنکشن درخواست کو ڈیٹا فریم کے طور پر واپس کر دے گا۔
ڈیٹا کا تصور کرنا
اس مسئلے کو حل کرنے کے لیے، 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 فنکشن کا استعمال کرتے ہوئے دیکھتے ہیں اور اسے تصویر کے طور پر محفوظ کرتے ہیں۔
ہم اس کوڈ کو ایک فنکشن میں لپیٹتے ہیں جسے 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 فنکشن کا استعمال کرے گا۔ اور پھر ہم سب کچھ صحیح رابطہ پر بھیج دیتے ہیں۔