ProHoster > وبلاگ > اخبار اینترنتی > نحوه واگذاری گزارش های ساده به یک ربات ما یک ربات در پایتون و گوگل BigQuery می نویسیم
نحوه واگذاری گزارش های ساده به یک ربات ما یک ربات در پایتون و گوگل BigQuery می نویسیم
آیا کارهایی دارید که روز به روز، هفته به هفته تکرار می شوند؟ مثلا نوشتن گزارش. دادهها را درخواست میکنید، آنها را تجزیه و تحلیل میکنید، آنها را تجسم میکنید (نمودار، نمودار میسازید)، و سپس آن را برای رئیس خود میفرستید. اما اگر همه اینها خودکار بود چه؟
در این آموزش ما یک ربات برای تلگرام ایجاد می کنیم که به خودکار کردن گزارش کمک می کند. و جالب ترین چیز این است که کل برنامه فقط از 50 خط کد تشکیل شده است! اگر برای اولین بار است که یک ربات برای تلگرام ایجاد می کنید، باید این یکی را نیز بخوانید ارسال.
اگر بخواهیم از این سرویس استفاده کنیم، باید Google BigQuery API را متصل کنیم. برای انجام این کار به Google Developers Console و یک پروژه جدید ایجاد کنید (یا یک پروژه موجود را انتخاب کنید).
در کنترل پنل، ENABLE APIS AND SERVICES را انتخاب کنید و به دنبال BigQuery API بگردید.
برای اتصال API گزینه Enable را انتخاب کنید.
یک کلید حساب ایجاد کنید
دوباره بریم سراغ Google Developers Console، برگه اعتبارنامه ها، Create credentials و Service key account account را انتخاب کنید.
سپس - New service account و نام را در قسمت Service account name وارد کنید.
از لیست کشویی Role، Project > Owner و سپس Create را انتخاب کنید.
فایلی که به صورت خودکار دانلود می شود، creds.json نام دارد.
GOOGLE_APPLICATION_CREDENTIALS را تنظیم کنید و مسیر creds.json را در ترمینال مشخص کنید.
صادر کردن GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'
اگر همه چیز به خوبی پیش رفت، وقت آن است که نوشتن برنامه را شروع کنید.
یک برنامه کاربردی ایجاد کنید
برای آموزش از دادههای bigquery-public-data.stackoverflow استفاده میکنیم، برای گزارش خود تعداد انتشارات روزانه را انتخاب میکنیم.
همه چیز بسیار ساده است
جدول را جستجو کنید -> تجسم داده ها -> ذخیره تصویرسازی -> ارسال تصویر
بیایید یک تابع برای تعریف هر رشته ایجاد کنیم.
پرس و جو به BigQuery
ابتدا کتابخانه را وارد می کنیم.
از google.cloud import bigquery
ما تابعی به نام query_to_bigquery ایجاد می کنیم که پارامتر آن query است.
این تابع درخواست را به عنوان یک قاب داده برمی گرداند.
تجسم داده ها
برای حل این مشکل، 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 و از ستون total_posts برای محور y استفاده می کنیم.
x = dataframe['date'].tolist()
y = dataframe['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 را بدانید.
ما استفاده می کنیم userinfobot و /start را تایپ کنید. ربات با اطلاعات لازم پاسخ می دهد، chat_id در قسمت id موجود است.
حالا بیایید تابع send_image را ایجاد کنیم. از تابع get_and_save_image برای بازیابی و ذخیره تصویر استفاده می کند. و سپس همه چیز را به مخاطب صحیح ارسال می کنیم.