ProHoster > Blog > balita sa internet > Paano magtalaga ng mga simpleng ulat sa isang robot. Pagsusulat ng bot sa Python at Google BigQuery
Paano magtalaga ng mga simpleng ulat sa isang robot. Pagsusulat ng bot sa Python at Google BigQuery
Mayroon ka bang mga gawain na umuulit araw-araw, linggo-linggo? Halimbawa, pagsulat ng mga ulat. Humiling ka ng data, pag-aralan ito, i-visualize ito (gumawa ng mga graph, chart), at pagkatapos ay ipadala ito sa iyong boss. Ngunit paano kung ang lahat ng ito ay awtomatiko?
Sa tutorial na ito gagawa kami ng bot para sa Telegram na makakatulong sa pag-automate ng pag-uulat. At ang pinaka-cool na bagay ay ang buong programa ay bubuo lamang ng 50 linya ng code! Kung lumikha ka ng isang bot para sa Telegram sa unang pagkakataon, dapat mo ring basahin ang isang ito magpaskil.
Pinapaalala namin sa iyo:para sa lahat ng mga mambabasa ng "Habr" - isang diskwento na 10 rubles kapag nag-enroll sa anumang kurso sa Skillbox gamit ang code na pang-promosyon ng "Habr".
pip3 i-install ang google-cloud-bigquery matplotlib numpy pandas python-telegram-bot
Pagkonekta ng Google BigQuery API
Kung gusto naming gamitin ang serbisyo, kailangan naming ikonekta ang Google BigQuery API. Upang gawin ito pumunta kami sa Google Developers Console at lumikha ng isang bagong proyekto (o pumili ng isang umiiral na).
Sa control panel, piliin ang I-ENABLE ANG MGA API AT SERBISYO at hanapin ang BigQuery API.
Piliin ang I-enable para ikonekta ang API.
Gumawa ng account key
Tara na ulit Google Developers Console, piliin ang tab na Mga Kredensyal, Lumikha ng mga kredensyal at Key ng account ng serbisyo.
Pagkatapos - Bagong service account, at ilagay ang pangalan sa Service account name field.
Mula sa drop-down na listahan ng Tungkulin, piliin ang Proyekto > May-ari, pagkatapos ay Gumawa.
Ang file na awtomatikong mada-download ay tinatawag na creds.json.
Itakda ang GOOGLE_APPLICATION_CREDENTIALS, na tumutukoy sa path sa creds.json sa terminal.
i-export ang GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'
Kung naging maayos ang lahat, oras na upang simulan ang pagsulat ng programa.
Paglikha ng isang application
Para sa tutorial na gagamitin namin ang data mula sa bigquery-public-data.stackoverflow, para sa aming ulat pipiliin namin ang bilang ng mga pang-araw-araw na publikasyon.
Ang lahat ay medyo simple.
I-query ang talahanayan -> I-visualize ang data -> I-save ang visualization -> Ipadala ang larawan
Gumawa tayo ng isang function para tukuyin ang bawat thread.
Query sa BigQuery
Umimport muna kami ng library.
mula sa google.cloud import bigquery
Lumilikha kami ng isang function na tinatawag na query_to_bigquery, kung saan ang parameter ay query.
Ibabalik ng function na ito ang kahilingan bilang isang data frame.
Pag-visualize ng data
Upang malutas ang problemang ito, piliin ang matplotlib.
i-import ang matplotlib.pyplot bilang plt
Kailangan namin ng limang parameter, kung saan ang x ay ang x-axis data, ang x_label ay ang pamagat para sa axis, y ang y-axis data, ang y_label ay ang pamagat para sa axis, at ang pamagat ay ang pamagat ng buong visualization.
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
I-save ang imahe
Ngayon ay gumamit tayo ng dalawang function upang lumikha ng visualization at i-save ito.
Ipapadala namin ang bilang ng mga post na nai-publish araw-araw. Una, sumulat kami ng isang kahilingan.
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
"""
Nakakatulong ang query na mangolekta ng data para sa dalawang linggo simula Disyembre 2, 2018.
Ginagamit namin ang petsang ito dahil ang 2018-12-02 ay ang pinakabagong data na naitala sa bigquery-public-data.stackoverflow.post_history, sa ibang mga kaso maaari mong gamitin ang CURRENT_DATE() para makuha ang pinakabagong data.
Tawagan ang query_to_bigquery function para makuha ang data.
dataframe = query_to_bigquery(query)
Pagkatapos ay ginagamit namin ang column ng data ng petsa para sa x-axis, at ang column na total_posts para sa y-axis.
x = dataframe['date'].tolist()
y = dataframe['total_posts'].tolist()
Inilarawan namin ito gamit ang visualize_bar_chart function at i-save ito bilang isang imahe.
Binalot namin ang code na ito sa isang function na tinatawag na 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')
Magpadala ng larawan
Upang makapagpadala ng ulat sa tatanggap, kailangan mong malaman ang parameter ng chat_id.
Gumamit userinfobot at i-type /simulan. Ang bot ay tumugon sa kinakailangang impormasyon, ang chat_id ay nasa field ng id.
Ngayon gawin natin ang send_image function. Gagamitin nito ang get_and_save_image function para kunin at i-save ang imahe. At pagkatapos ay ipinapadala namin ang lahat sa tamang contact.
Sa wakas, lumikha kami ng isa pang function, pangunahing, upang ilunsad ang application. Huwag kalimutang palitan ang YOUR_TOKEN para sa bot.
Tandaan: awtomatikong ipapadala ng program na ito ang larawan sa oras na iyong tinukoy. Halimbawa, magpapadala kami ng ulat sa alas nuwebe ng umaga araw-araw.