Kaip perduoti paprastas ataskaitas robotui. Boto rašymas naudojant Python ir Google BigQuery
Ar turite užduočių, kurios kartojasi diena iš dienos, savaitė po savaitės? Pavyzdžiui, ataskaitų rašymas. Jūs paprašote duomenų, juos analizuojate, vizualizuojate (sudarote grafikus, diagramas) ir siunčiate juos savo viršininkui. Bet kas, jei visa tai būtų automatizuota?
Šioje pamokoje mes sukursime „Telegram“ robotą, kuris padės automatizuoti ataskaitų teikimą. Ir šauniausia, kad visą programą sudarys tik 50 kodo eilučių! Jei „Telegram“ robotą kuriate pirmą kartą, turėtumėte perskaityti ir šį paštu.
Jei norime naudotis paslauga, turime prisijungti prie Google BigQuery API. Norėdami tai padaryti, einame į "Google" kūrėjų konsolė ir sukurti naują projektą (arba pasirinkti esamą).
Valdymo skydelyje pasirinkite ĮJUNGTI API IR PASLAUGAS ir ieškokite BigQuery API.
Pasirinkite Įgalinti, kad prijungtumėte API.
Sukurkite paskyros raktą
Eikime dar kartą "Google" kūrėjų konsolė, pasirinkite skirtuką Kredencialai, Sukurti kredencialus ir paslaugos paskyros raktą.
Tada - Nauja paslaugos paskyra ir įveskite pavadinimą lauke Paslaugos paskyros pavadinimas.
Išskleidžiamajame sąraše Vaidmuo pasirinkite Projektas > Savininkas, tada Kurti.
Failas, kuris bus automatiškai atsisiunčiamas, vadinamas creds.json.
Nustatykite GOOGLE_APPLICATION_CREDENTIALS, terminale nurodydami kelią į creds.json.
Norėdami išspręsti šią problemą, pasirinkite matplotlib.
importuoti matplotlib.pyplot kaip plt
Mums reikia penkių parametrų, kur x yra x ašies duomenys, x_label yra ašies pavadinimas, y yra y ašies duomenys, y_label yra ašies pavadinimas, o pavadinimas yra visos vizualizacijos pavadinimas.
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
Išsaugokite vaizdą
Dabar sukurkime vizualizaciją ir išsaugokime ją naudodami dvi funkcijas.
Kiekvieną dieną siųsime paskelbtų pranešimų skaičių. Pirmiausia rašome prašymą.
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
"""
Užklausa padeda rinkti dviejų savaičių duomenis nuo 2 m. gruodžio 2018 d.
Naudojame šią datą, nes 2018-12-02 yra naujausi duomenys, įrašyti bigquery-public-data.stackoverflow.post_history, kitais atvejais galite naudoti CURRENT_DATE(), kad gautumėte naujausius duomenis.
Norėdami gauti duomenis, iškvieskite funkciją query_to_bigquery.
duomenų rėmelis = query_to_bigquery(query)
Tada x ašiai naudojame datos duomenų stulpelį, o y ašiai – total_posts.
x = duomenų rėmelis['data'].tolist()
y = duomenų rėmelis['total_posts'].tolist()
Ją vizualizuojame naudodami funkciją visualize_bar_chart ir išsaugome kaip vaizdą.
Šį kodą suvyniojame į funkciją, vadinamą 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')
Siųsti paveikslėlį
Norėdami išsiųsti ataskaitą gavėjui, turite žinoti parametrą chat_id.
Mes naudojame vartotojo infobotas ir įveskite /start. Botas atsako pateikdamas reikiamą informaciją, id lauke yra chat_id.
Dabar sukurkime funkciją send_image. Vaizdui nuskaityti ir išsaugoti bus naudojama funkcija get_and_save_image. Ir tada mes siunčiame viską teisingam kontaktui.