Ինչպես փոխանցել պարզ հաշվետվությունները ռոբոտին: Բոտ գրել Python-ում և Google BigQuery-ում
Ունե՞ք առաջադրանքներ, որոնք կրկնվում են օր առ օր, շաբաթ առ շաբաթ: Օրինակ՝ հաշվետվություններ գրելը։ Դուք տվյալներ եք խնդրում, վերլուծում, պատկերացնում եք դրանք (գրաֆիկներ, գծապատկերներ պատրաստում) և այնուհետև ուղարկում ձեր ղեկավարին: Բայց ինչ կլիներ, եթե այս ամենը ավտոմատացված լիներ:
Այս ձեռնարկում մենք կստեղծենք բոտ Telegram-ի համար, որը կօգնի ավտոմատացնել հաշվետվությունները: Եվ ամենաթեժն այն է, որ ամբողջ ծրագիրը բաղկացած կլինի ընդամենը 50 տող կոդից: Եթե առաջին անգամ եք բոտ ստեղծում Telegram-ի համար, ապա պետք է կարդալ նաև սա գրառում.
Եթե ցանկանում ենք օգտվել ծառայությունից, մենք պետք է միացնենք Google BigQuery API-ն: Դա անելու համար մենք գնում ենք Google Developers- ի վահանակ և ստեղծել նոր նախագիծ (կամ ընտրել գոյություն ունեցողը):
Կառավարման վահանակում ընտրեք ENABLE APIS AND SERVICES և փնտրեք BigQuery API:
API-ը միացնելու համար ընտրեք Միացնել:
Ստեղծեք հաշվի բանալի
Եկեք նորից գնանք Google Developers- ի վահանակ, ընտրեք «Հավատարմագրեր» ներդիրը, «Ստեղծել հավատարմագրեր» և «Ծառայության» հաշվի բանալին:
Այնուհետև - Նոր ծառայության հաշիվ և մուտքագրեք անունը Ծառայության հաշվի անուն դաշտում:
Դեր բացվող ցանկից ընտրեք Նախագիծ > Սեփականատեր, ապա Ստեղծեք:
Այն ֆայլը, որը ավտոմատ կերպով կներբեռնվի, կոչվում է creds.json:
Սահմանեք GOOGLE_APPLICATION_CREDENTIALS՝ տերմինալում նշելով դեպի creds.json ճանապարհը:
Այս գործառույթը կվերադարձնի հարցումը որպես տվյալների շրջանակ:
Տվյալների պատկերացում
Այս խնդիրը լուծելու համար ընտրեք 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 ֆունկցիան:
տվյալների շրջանակ = query_to_bigquery (հարցում)
Այնուհետև x առանցքի համար օգտագործում ենք ամսաթվի տվյալների սյունակը, y առանցքի համար՝ total_posts սյունակը:
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 պարամետրը։
Մենք օգտագործում ենք userinfobot և մուտքագրեք /start. Բոտը պատասխանում է անհրաժեշտ տեղեկություններով, chat_id-ը պարունակվում է id դաշտում։
Այժմ ստեղծենք send_image ֆունկցիան։ Այն կօգտագործի get_and_save_image ֆունկցիան՝ պատկերը առբերելու և պահպանելու համար: Եվ հետո մենք ամեն ինչ ուղարկում ենք ճիշտ կոնտակտի: