ProHoster > Blogi > internetiuudised > Kuidas delegeerida lihtsaid aruandeid robotile. Kirjutame roboti Pythonis ja Google BigQuerys
Kuidas delegeerida lihtsaid aruandeid robotile. Kirjutame roboti Pythonis ja Google BigQuerys
Kas teil on ülesandeid, mis korduvad päevast päeva, nädalast nädalasse? Näiteks aruannete kirjutamine. Te taotlete andmeid, analüüsite neid, visualiseerite (kooste graafikuid, diagramme) ja saadate need seejärel oma ülemusele. Aga mis siis, kui see kõik oleks automatiseeritud?
Selles õpetuses loome Telegrami jaoks roboti, mis aitab aruandlust automatiseerida. Ja kõige lahedam on see, et kogu programm koosneb vaid 50 koodireast! Kui loote Telegrami jaoks robotit esimest korda, peaksite ka seda lugema postitus.
Vajame viit parameetrit, kus x on x-telje andmed, x_silt on telje pealkiri, y on y-telje andmed, y_silt on telje pealkiri ja pealkiri on kogu visualiseerimise pealkiri.
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
Salvestage pilt
Nüüd kasutame visualiseeringu loomiseks ja salvestamiseks kahte funktsiooni.
Avaldatud postituste arvu saadame iga päev. Kõigepealt kirjutame päringu.
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
"""
Päring aitab koguda andmeid kahe nädala jooksul alates 2. detsembrist 2018.
Kasutame seda kuupäeva, kuna 2018-12-02 on faili bigquery-public-data.stackoverflow.post_history salvestatud viimased andmed, muudel juhtudel saate uusimate andmete hankimiseks kasutada CURRENT_DATE().
Andmete hankimiseks helistage funktsioonile query_to_bigquery.
andmeraam = query_to_bigquery(päring)
Seejärel kasutame x-telje jaoks kuupäeva andmete veergu ja y-telje jaoks veergu total_posts.
x = dataframe['kuupäev'].tolist()
y = andmeraam['total_posts'].tolist()
Visualiseerime selle funktsiooni visualize_bar_chart abil ja salvestame pildina.
Mähime selle koodi funktsiooniga 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')
Me kasutame kasutajainfobot ja tippige /start. Bot vastab vajaliku teabega, chat_id sisaldub id väljal.
Nüüd loome funktsiooni send_image. See kasutab pildi toomiseks ja salvestamiseks funktsiooni get_and_save_image. Ja siis saadame kõik õigele kontaktile.