Sut i ddirprwyo adroddiadau syml i robot. Ysgrifennu bot yn Python a Google BigQuery
A oes gennych chi dasgau sy'n ailadrodd ddydd ar ôl dydd, wythnos ar ôl wythnos? Er enghraifft, ysgrifennu adroddiadau. Rydych chi'n gofyn am ddata, yn ei ddadansoddi, yn ei ddelweddu (gwneud graffiau, siartiau), ac yna'n ei anfon at eich rheolwr. Ond beth os oedd hyn i gyd yn awtomataidd?
Yn y tiwtorial hwn byddwn yn creu bot ar gyfer Telegram a fydd yn helpu i awtomeiddio adrodd. A'r peth cŵl yw y bydd y rhaglen gyfan yn cynnwys dim ond 50 llinell o god! Os ydych chi'n creu bot ar gyfer Telegram am y tro cyntaf, yna dylech chi ddarllen yr un hwn hefyd post.
Os ydym am ddefnyddio'r gwasanaeth, mae angen i ni gysylltu API BigQuery Google. I wneud hyn awn i Consol Datblygwyr Google a chreu prosiect newydd (neu ddewis un sy'n bodoli eisoes).
Yn y panel rheoli, dewiswch GALLUOGI APIS A GWASANAETHAU ac edrychwch am BigQuery API.
Dewiswch Galluogi i gysylltu'r API.
Creu allwedd cyfrif
Gadewch i ni fynd i eto Consol Datblygwyr Google, dewiswch y tab Credentials, Creu tystlythyrau ac allwedd cyfrif Gwasanaeth.
Yna - Cyfrif gwasanaeth newydd, a nodwch yr enw yn y maes enw cyfrif Gwasanaeth.
O'r gwymplen Rôl, dewiswch Prosiect > Perchennog, yna Creu.
Enw'r ffeil a fydd yn cael ei lawrlwytho'n awtomatig yw creds.json.
Gosod GOOGLE_APPLICATION_CREDENTIALS, gan nodi'r llwybr i creds.json yn y derfynell.
Os aeth popeth yn iawn, mae'n bryd dechrau ysgrifennu'r rhaglen.
Creu cais
Ar gyfer y tiwtorial byddwn yn defnyddio data o bigquery-public-data.stackoverflow, ar gyfer ein hadroddiad byddwn yn dewis nifer y cyhoeddiadau dyddiol.
Mae popeth yn eithaf syml.
Cwestiynu'r tabl -> Delweddu'r data -> Cadw'r delweddu -> Anfon y ddelwedd
Gadewch i ni greu un swyddogaeth i ddiffinio pob edefyn.
Ymholiad i BigQuery
Yn gyntaf rydym yn mewnforio'r llyfrgell.
o google.cloud mewnforio bigquery
Rydyn ni'n creu swyddogaeth o'r enw query_to_bigquery, lle mae'r paramedr yn ymholiad.
Bydd y swyddogaeth hon yn dychwelyd y cais fel ffrâm ddata.
Delweddu data
I ddatrys y broblem hon, dewiswch matplotlib.
mewnforio matplotlib.pyplot fel plt
Mae angen pum paramedr arnom, lle x yw'r data echelin x, x_label yw'r teitl ar gyfer yr echelin, y yw'r data echelin-y, y_label yw'r teitl ar gyfer yr echelin, a'r teitl yw teitl y delweddu cyfan.
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
Arbedwch y ddelwedd
Nawr, gadewch i ni ddefnyddio dwy swyddogaeth i greu delweddiad a'i gadw.
Byddwn yn anfon nifer y postiadau a gyhoeddir yn ddyddiol. Yn gyntaf rydym yn ysgrifennu cais.
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
"""
Mae'r ymholiad yn helpu i gasglu data am bythefnos gan ddechrau Rhagfyr 2, 2018.
Rydym yn defnyddio'r dyddiad hwn oherwydd 2018-12-02 yw'r data diweddaraf a gofnodwyd yn bigquery-public-data.stackoverflow.post_history, mewn achosion eraill gallwch ddefnyddio CURRENT_DATE() i gael y data diweddaraf.
Ffoniwch y swyddogaeth query_to_bigquery i gael y data.
dataframe = query_to_bigquery(ymholiad)
Yna rydyn ni'n defnyddio'r golofn data dyddiad ar gyfer yr echelin-x, a'r golofn total_posts ar gyfer yr echelin-y.
x = ffrâm data['dyddiad'].tolist()
y = dataframe['total_posts'].tolist()
Rydyn ni'n ei ddelweddu gan ddefnyddio'r swyddogaeth visualize_bar_chart a'i gadw fel delwedd.
Rydym yn lapio'r cod hwn mewn swyddogaeth o'r enw 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')
Anfon delwedd
Er mwyn anfon adroddiad at y derbynnydd, mae angen i chi wybod y paramedr chat_id.
Rydym yn defnyddio gwybodaeth defnyddiwr a theipio / dechrau. Mae'r bot yn ymateb gyda'r wybodaeth angenrheidiol, mae chat_id wedi'i gynnwys yn y maes id.
Nawr, gadewch i ni greu'r swyddogaeth send_image. Bydd yn defnyddio'r swyddogaeth get_and_save_image i adfer ac arbed y ddelwedd. Ac yna rydym yn anfon popeth at y cyswllt cywir.
Yn olaf, rydym yn creu swyddogaeth arall, prif, i lansio'r cais. Peidiwch ag anghofio newid YOUR_TOKEN ar gyfer y bot.
Cofiwch: bydd y rhaglen hon yn anfon y ddelwedd yn awtomatig ar yr amser a nodir gennych. Er enghraifft, byddwn yn anfon adroddiad am naw y bore bob dydd.