Nola delegatu txosten sinpleak robot bati. Bot bat idazten dugu Python eta Google BigQuery-n
Egunez egun, astez aste errepikatzen diren zereginak dituzu? Adibidez, txostenak idaztea. Datuak eskatu, aztertu, bistaratu (grafikoak, taulak egin) eta, ondoren, zure nagusiari bidaltzen dizkiozu. Baina hori guztia automatizatuta egongo balitz?
Tutorial honetan Telegramentzako bot bat sortuko dugu, txostenak automatizatzen lagunduko duena. Eta gauzarik politena da programa osoa 50 kode lerroz soilik osatuta egongo dela! Telegramerako bot bat sortzen ari bazara lehen aldiz, hau ere irakurri beharko zenuke post.
Zerbitzua erabili nahi badugu, Google BigQuery APIa konektatu behar dugu. Horretarako joango gara Google Developers Console eta sortu proiektu berri bat (edo hautatu lehendik dagoen bat).
Kontrol-panelean, hautatu GAITU APIAK ETA ZERBITZUAK eta bilatu BigQuery APIa.
Hautatu Gaitu APIa konektatzeko.
Sortu kontu-gako bat
Goazen berriro Google Developers Console, hautatu Kredentzialak fitxa, Sortu kredentzialak eta Zerbitzu-kontuaren gakoa.
Ondoren - Zerbitzu-kontu berria, eta idatzi izena Zerbitzu-kontuaren izena eremuan.
Eginkizuna goitibeherako zerrendan, hautatu Proiektua > Jabea, eta gero Sortu.
Automatikoki deskargatuko den fitxategia creds.json deitzen da.
Ezarri GOOGLE_APPLICATION_CREDENTIALS, terminalean creds.json-erako bidea zehaztuz.
Funtzio honek eskaera datu-marko gisa itzuliko du.
Datuak bistaratzea
Arazo hau konpontzeko, aukeratu matplotlib.
inportatu matplotlib.pyplot plt gisa
Bost parametro behar ditugu, non x x ardatzaren datuak, x_label ardatzaren izenburua, y y ardatzaren datuak, y_label ardatzaren izenburua eta izenburua bistaratze osoaren izenburua.
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
Gorde irudia
Orain erabil ditzagun bi funtzio bisualizazio bat sortzeko eta gordetzeko.
Egunero argitaratzen diren mezu kopurua bidaliko dugu. Lehenengo eskaera bat idazten dugu.
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
"""
Kontsultak bi astez datuak biltzen laguntzen du 2ko abenduaren 2018tik aurrera.
Data hau erabiltzen dugu 2018-12-02 bigquery-public-data.stackoverflow.post_history-en erregistratutako azken datuak direlako, beste kasu batzuetan CURRENT_DATE() erabil dezakezu datu berrienak lortzeko.
Deitu query_to_bigquery funtzioari datuak lortzeko.
datu-markoa = kontsulta_bigquery(kontsulta)
Ondoren, dataren datuen zutabea erabiltzen dugu x ardatzerako, eta total_posts zutabea y ardatzerako.
x = datu-markoa['data'].tolist()
y = datu-markoa['guztizko_mezuak'].tolist()
Visualize_bar_chart funtzioa erabiliz bistaratzen dugu eta irudi gisa gordetzen dugu.
Kode hau get_and_save_image izeneko funtzio batean biltzen dugu.
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')
Bidali irudi bat
Hartzaileari txosten bat bidaltzeko, chat_id parametroa ezagutu behar duzu.
Erabiltzen dugu userinfobot eta idatzi /hasi. Botak beharrezko informazioarekin erantzuten du, chat_id id eremuan dago.
Orain sor dezagun send_image funtzioa. get_and_save_image funtzioa erabiliko du irudia berreskuratzeko eta gordetzeko. Eta gero dena kontaktu zuzenari bidaltzen diogu.