ProHoster > Blog > netfréttir > Hvernig á að framselja einfaldar skýrslur til vélmenni. Að skrifa vélmenni í Python og Google BigQuery
Hvernig á að framselja einfaldar skýrslur til vélmenni. Að skrifa vélmenni í Python og Google BigQuery
Ertu með verkefni sem endurtaka sig dag eftir dag, viku eftir viku? Til dæmis að skrifa skýrslur. Þú biður um gögn, greinir þau, sérð þau fyrir sér (gerir línurit, töflur) og sendir þau síðan til yfirmanns þíns. En hvað ef allt þetta væri sjálfvirkt?
Í þessari kennslu munum við búa til vélmenni fyrir Telegram sem mun hjálpa til við að gera skýrslugerð sjálfvirkan. Og það flottasta er að allt forritið mun samanstanda af aðeins 50 línum af kóða! Ef þú ert að búa til vélmenni fyrir Telegram í fyrsta skipti, þá ættirðu líka að lesa þennan staða.
pip3 setja upp google-cloud-bigquery matplotlib numpy pandas python-telegram-bot
Tengist Google BigQuery API
Ef við viljum nota þjónustuna þurfum við að tengja Google BigQuery API. Til að gera þetta förum við til Google Developers Console og búðu til nýtt verkefni (eða veldu það sem fyrir er).
Í stjórnborðinu skaltu velja VIRKA APIS OG ÞJÓNUSTU og leita að BigQuery API.
Veldu Virkja til að tengja API.
Búðu til reikningslykil
Við skulum fara aftur Google Developers Console, veldu flipann Skilríki, Búa til skilríki og Þjónustureikningslykill.
Síðan - Nýr þjónustureikningur og sláðu inn nafnið í reitinn Heiti þjónustureiknings.
Í fellilistanum Hlutverk skaltu velja Verk > Eigandi og síðan Búa til.
Skráin sem verður sjálfkrafa hlaðið niður heitir creds.json.
Stilltu GOOGLE_APPLICATION_CREDENTIALS, tilgreindu slóðina að creds.json í flugstöðinni.
flytja GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'
Ef allt gekk vel er kominn tími til að byrja að skrifa prógrammið.
Að búa til forrit
Fyrir kennsluna munum við nota gögn frá bigquery-public-data.stackoverflow, fyrir skýrsluna okkar munum við velja fjölda daglegra rita.
Til að leysa þetta vandamál skaltu velja matplotlib.
flytja inn matplotlib.pyplot sem plt
Við þurfum fimm breytur, þar sem x er x-ás gögnin, x_label er titill áss, y er y-ás gögn, y_label er titill áss og titill er titill allrar sjónmyndarinnar.
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
Vistaðu myndina
Nú skulum við nota tvær aðgerðir til að búa til sjónmynd og vista hana.
Við munum senda fjölda pósta sem birtar eru daglega. Fyrst skrifum við beiðni.
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
"""
Fyrirspurnin hjálpar til við að safna gögnum í tvær vikur frá og með 2. desember 2018.
Við notum þessa dagsetningu vegna þess að 2018-12-02 eru nýjustu gögnin skráð í bigquery-public-data.stackoverflow.post_history, í öðrum tilvikum geturðu notað CURRENT_DATE() til að fá nýjustu gögnin.
Hringdu í query_to_bigquery aðgerðina til að fá gögnin.
gagnarammi = query_to_bigquery(query)
Síðan notum við dagsetningardálkinn fyrir x-ásinn og dálkinn total_posts fyrir y-ásinn.
x = gagnarammi['date'].tolist()
y = gagnarammi['total_posts'].tolist()
Við sjáum það fyrir okkur með visualize_bar_chart aðgerðinni og vistum það sem mynd.
Við vefjum þessum kóða inn í fall sem kallast 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')
Sendu mynd
Til þess að senda skýrslu til viðtakanda þarftu að vita færibreytuna chat_id.
Við notum userinfobot og sláðu inn /start. Botni svarar með nauðsynlegum upplýsingum, chat_id er að finna í id reitnum.
Nú skulum við búa til send_image aðgerðina. Það mun nota get_and_save_image aðgerðina til að sækja og vista myndina. Og svo sendum við allt á réttan tengilið.