Kif tiddelega rapporti sempliċi lil robot. Aħna niktbu bot f'Python u Google BigQuery
Għandek kompiti li jirrepetu jum wara jum, ġimgħa wara ġimgħa? Per eżempju, bil-miktub rapporti. Titlob id-dejta, tanalizzaha, viżivaha (agħmel graffs, charts), u mbagħad ibgħatha lill-imgħallem tiegħek. Imma x'jiġri jekk dan kollu kien awtomatizzat?
F'dan it-tutorja se noħolqu bot għal Telegram li se jgħin biex awtomat ir-rappurtar. U l-iktar ħaġa sabiħa hija li l-programm kollu se jikkonsisti biss minn 50 linja ta 'kodiċi! Jekk qed toħloq bot għal Telegram għall-ewwel darba, allura għandek taqra dan ukoll wara.
Infakkrukom:għall-qarrejja kollha ta '"Habr" - skont ta' 10 rublu meta tirreġistra fi kwalunkwe kors ta 'Skillbox billi tuża l-kodiċi promozzjonali "Habr".
Jekk irridu nużaw is-servizz, irridu nikkonnettjaw il-Google BigQuery API. Biex nagħmlu dan immorru Google Developers Console u toħloq proġett ġdid (jew agħżel wieħed eżistenti).
Fil-pannell tal-kontroll, agħżel ENABLE APIS AND SERVICES u fittex BigQuery API.
Agħżel Ippermettiet biex tikkonnettja l-API.
Oħloq ċavetta tal-kont
Ejja mmorru għal darb'oħra Google Developers Console, agħżel it-tab tal-Kredenzjali, Oħloq kredenzjali u ċavetta tal-kont tas-Servizz.
Imbagħad - Kont tas-servizz ġdid, u daħħal l-isem fil-qasam Isem tal-kont tas-servizz.
Mil-lista drop-down Rwol, agħżel Proġett > Sid, imbagħad Oħloq.
Il-fajl li se jitniżżel awtomatikament jissejjaħ creds.json.
Issettja GOOGLE_APPLICATION_CREDENTIALS, billi tispeċifika t-triq għal creds.json fit-terminal.
Din il-funzjoni tirritorna t-talba bħala qafas tad-dejta.
Viżwalizzazzjoni tad-data
Biex issolvi din il-problema, agħżel matplotlib.
importazzjoni matplotlib.pyplot bħala plt
Għandna bżonn ħames parametri, fejn x hija d-dejta tal-assi x, x_label huwa t-titlu għall-assi, y hija d-dejta tal-assi y, y_label huwa t-titlu għall-assi, u t-titlu huwa t-titlu tal-viżwalizzazzjoni kollha.
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
Issejvja l-immaġni
Issa ejja nużaw żewġ funzjonijiet biex noħolqu viżwalizzazzjoni u ssalvaha.
Aħna se nibagħtu n-numru ta 'postijiet ippubblikati kuljum. L-ewwel niktbu talba.
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
"""
Il-mistoqsija tgħin biex tiġbor id-dejta għal ġimgħatejn li jibdew mit-2 ta’ Diċembru 2018.
Aħna nużaw din id-data għaliex 2018-12-02 hija l-aħħar data rreġistrata fi bigquery-public-data.stackoverflow.post_history, f'każijiet oħra tista' tuża CURRENT_DATE() biex tikseb l-aktar data ġdida.
Ċempel il-funzjoni query_to_bigquery biex tikseb id-dejta.
dataframe = query_to_bigquery (mistoqsija)
Imbagħad nużaw il-kolonna tad-data tad-data għall-assi x, u l-kolonna total_posts għall-assi y.
x = dataframe['data'].tolist()
y = dataframe['total_posts'].tolist()
Aħna nħarsuha billi tuża l-funzjoni visualize_bar_chart u nissejvjaha bħala immaġini.
Aħna nagħlaq dan il-kodiċi f'funzjoni msejħa 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')
Ibgħat immaġini
Sabiex tibgħat rapport lir-riċevitur, trid tkun taf il-parametru chat_id.
Aħna nużaw userinfobot u tip /start. Il-bot jirrispondi bl-informazzjoni meħtieġa, chat_id jinsab fil-qasam id.
Issa ejja noħolqu l-funzjoni send_image. Se tuża l-funzjoni get_and_save_image biex tirkupra u tissejvja l-immaġni. U mbagħad nibagħtu kollox lill-kuntatt korrett.