ProHoster > Blog > internet xəbərləri > Sadə hesabatları robota necə həvalə etmək olar. Python və Google BigQuery-də bot yazmaq
Sadə hesabatları robota necə həvalə etmək olar. Python və Google BigQuery-də bot yazmaq
Gündən-günə, həftədən həftəyə təkrarlanan tapşırıqlarınız varmı? Məsələn, hesabatların yazılması. Siz məlumatları tələb edirsiniz, təhlil edirsiniz, vizuallaşdırırsınız (qrafiklər, diaqramlar hazırlayır) və sonra onu müdirinizə göndərirsiniz. Bəs bütün bunlar avtomatlaşdırılsaydı?
Bu dərslikdə biz Telegram üçün hesabatın avtomatlaşdırılmasına kömək edəcək bir bot yaradacağıq. Ən maraqlısı odur ki, bütün proqram yalnız 50 kod sətirindən ibarət olacaq! Əgər siz ilk dəfə Telegram üçün bot yaradırsınızsa, o zaman bunu da oxumalısınız yazı.
Xidmətdən istifadə etmək istəyiriksə, Google BigQuery API-yə qoşulmalıyıq. Bunu etmək üçün gedirik Google Developers Konsolu və yeni layihə yaradın (və ya mövcud olanı seçin).
İdarə panelində API VƏ XİDMƏTLƏRİ AKTİV EDİN seçin və BigQuery API-ni axtarın.
API-yə qoşulmaq üçün Enable seçin.
Hesab açarı yaradın
Yenə gedək Google Developers Konsolu, Etibarnamələr nişanını, Etibarnamələri yarat və Xidmət hesabı açarını seçin.
Sonra - Yeni xidmət hesabı seçin və Xidmət hesabının adı sahəsinə adı daxil edin.
Rol açılan siyahısından Layihə > Sahib, sonra Yarat seçin.
Avtomatik yüklənəcək fayl creds.json adlanır.
Terminalda creds.json yolunu göstərərək GOOGLE_APPLICATION_CREDENTIALS tətbiqini təyin edin.
Bu funksiya sorğunu verilənlər çərçivəsi kimi qaytaracaq.
Məlumatların vizuallaşdırılması
Bu problemi həll etmək üçün matplotlib seçin.
matplotlib.pyplot faylını plt olaraq idxal edin
Bizə beş parametr lazımdır, burada x x oxu məlumatıdır, x_label oxun başlığıdır, y y oxu məlumatıdır, y_label oxun başlığıdır və başlıq bütün vizuallaşdırmanın başlığıdır.
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
Şəkli yadda saxlayın
İndi vizuallaşdırma yaratmaq və onu saxlamaq üçün iki funksiyadan istifadə edək.
Gündəlik dərc olunan yazıların sayını göndərəcəyik. Əvvəlcə sorğu yazırıq.
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
"""
Sorğu 2 dekabr 2018-ci ildən başlayaraq iki həftə ərzində məlumat toplamağa kömək edir.
Bu tarixdən istifadə edirik, çünki 2018-12-02 bigquery-public-data.stackoverflow.post_history-də qeydə alınan ən son məlumatdır, digər hallarda ən yeni məlumatları əldə etmək üçün CURRENT_DATE() istifadə edə bilərsiniz.
Məlumatı əldə etmək üçün query_to_bigquery funksiyasına zəng edin.
dataframe = query_to_bigquery(sorğu)
Sonra x oxu üçün tarix məlumatları sütunundan və y oxu üçün total_posts sütunundan istifadə edirik.
x = dataframe['tarix'].tolist()
y = dataframe['total_posts'].tolist()
Biz onu visualize_bar_chart funksiyasından istifadə edərək vizuallaşdırırıq və şəkil kimi saxlayırıq.
Bu kodu get_and_save_image adlı funksiyaya bükürük.
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')
Şəkil göndərin
Alıcıya hesabat göndərmək üçün chat_id parametrini bilməlisiniz.
Biz istifadə edirik userinfobot və /start yazın. Bot lazımi məlumatla cavab verir, chat_id id sahəsindədir.
İndi isə göndərmə_image funksiyasını yaradaq. Şəkli əldə etmək və saxlamaq üçün get_and_save_image funksiyasından istifadə edəcək. Və sonra hər şeyi düzgün kontakta göndəririk.