Ki jan yo delege rapò senp nan yon robo. Ekri yon bot nan Python ak Google BigQuery
Èske ou gen travay ki repete jou apre jou, semèn apre semèn? Pou egzanp, ekri rapò. Ou mande done, analize li, vizyalize li (fè graf, tablo), epi voye li bay bòs nan travay ou. Men, e si tout bagay sa yo te otomatik?
Nan leson patikilye sa a nou pral kreye yon bot pou Telegram ki pral ede otomatize rapò. Ak bagay ki pi fre se ke tout pwogram nan pral konpoze de sèlman 50 liy nan kòd! Si w ap kreye yon bot pou Telegram pou premye fwa, ou ta dwe li tou sa a pòs.
pip3 enstale google-cloud-bigquery matplotlib numpy panda python-telegram-bot
Konekte Google BigQuery API
Si nou vle sèvi ak sèvis la, nou bezwen konekte API Google BigQuery. Pou fè sa nou ale nan Google devlopè konsole epi kreye yon nouvo pwojè (oswa chwazi youn ki deja egziste).
Nan panèl kontwòl la, chwazi AKMET APIS AK SÈVIS epi chèche API BigQuery.
Chwazi Pèmèt pou konekte API a.
Kreye yon kle kont
Ann ale nan ankò Google devlopè konsole, chwazi tab la kalifikasyon, Kreye kalifikasyon ak kle kont sèvis.
Lè sa a - Nouvo kont sèvis, epi antre non an nan non sèvis kont jaden an.
Soti nan lis drop-down Wòl, chwazi Pwojè> Pwopriyetè, Lè sa a, Kreye.
Fichye a ki pral telechaje otomatikman yo rele creds.json.
Mete GOOGLE_APPLICATION_CREDENTIALS, espesifye chemen an nan creds.json nan tèminal la.
Si tout bagay ale byen, li lè pou kòmanse ekri pwogram nan.
Kreye yon aplikasyon
Pou leson patikilye a nou pral sèvi ak done ki soti nan bigquery-public-data.stackoverflow, pou rapò nou an nou pral chwazi kantite piblikasyon chak jou.
Li trè senp.
Demande tab la -> Vizyalize done yo -> Sove vizyalizasyon an -> Voye imaj la
Ann kreye yon fonksyon pou defini chak fil.
Rechèch nan BigQuery
Premye nou enpòte bibliyotèk la.
soti nan google.cloud enpòte bigquery
Nou kreye yon fonksyon ki rele query_to_bigquery, kote paramèt la se requête.
Fonksyon sa a pral retounen demann lan kòm yon ankadreman done.
Vizyalize done yo
Pou rezoud pwoblèm sa a, chwazi matplotlib.
enpòte matplotlib.pyplot kòm plt
Nou bezwen senk paramèt, kote x se done aks x, x_label se tit la pou aks la, y se done aks y, y_label se tit la pou aks la, ak tit se tit la nan vizyalizasyon an antye.
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
Sove imaj la
Koulye a, kite a sèvi ak de fonksyon yo kreye yon vizyalizasyon epi sove li.
Nou pral voye kantite pòs ki pibliye chak jou. Premye nou ekri yon demann.
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
"""
Rekèt la ede kolekte done pou de semèn apati 2 desanm 2018.
Nou itilize dat sa a paske 2018-12-02 se dènye done ki anrejistre nan bigquery-public-data.stackoverflow.post_history, nan lòt ka ou ka itilize CURRENT_DATE() pou jwenn dènye done yo.
Rele fonksyon query_to_bigquery pou jwenn done yo.
dataframe = query_to_bigquery (rekèt)
Lè sa a, nou itilize kolòn done dat pou aks x la, ak kolòn total_posts pou aks y.
x = dataframe['dat'].tolist()
y = dataframe['total_posts'].tolist()
Nou visualize li lè l sèvi avèk fonksyon visualize_bar_chart epi sove li kòm yon imaj.
Nou vlope kòd sa a nan yon fonksyon ki rele 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')
Voye yon imaj
Pou w ka voye yon rapò bay moun k ap resevwa a, ou bezwen konnen paramèt chat_id la.
Nou itilize userinfobot epi tape / kòmanse. Bot la reponn ak enfòmasyon ki nesesè yo, chat_id genyen nan jaden id la.
Koulye a, ann kreye fonksyon send_image. Li pral sèvi ak fonksyon get_and_save_image pou rekipere epi sove imaj la. Lè sa a, nou voye tout bagay nan kontak ki kòrèk la.