ProHoster > Блог > balita sa internet > Giunsa pagdelegar ang yano nga mga taho sa usa ka robot. Nagsulat kami og bot sa Python ug Google BigQuery
Giunsa pagdelegar ang yano nga mga taho sa usa ka robot. Nagsulat kami og bot sa Python ug Google BigQuery
Aduna ka bay mga buluhaton nga gisubli kada adlaw, matag semana? Pananglitan, pagsulat sa mga taho. Nangayo ka ug datos, pag-analisar niini, paghanduraw niini (paghimog mga graph, mga tsart), ug dayon ipadala kini sa imong amo. Apan komosta kon awtomatiko kining tanan?
Sa kini nga panudlo maghimo kami usa ka bot alang sa Telegram nga makatabang sa pag-automate sa pagreport. Ug ang labing cool nga butang mao nga ang tibuuk nga programa maglangkob lamang sa 50 nga linya sa code! Kung naghimo ka usa ka bot alang sa Telegram sa una nga higayon, kinahanglan nimo usab basahon kini post.
Gipahinumduman namon ikaw:alang sa tanan nga mga magbabasa sa "Habr" - usa ka diskwento sa 10 nga mga rubles kung nagpalista sa bisan unsang kurso sa Skillbox gamit ang code sa promosyon nga "Habr".
pip3 i-install ang google-cloud-bigquery matplotlib numpy pandas python-telegram-bot
Pagkonektar sa Google BigQuery API
Kung gusto namong gamiton ang serbisyo, kinahanglan namong ikonektar ang Google BigQuery API. Sa pagbuhat niini kita moadto sa Google Developers Console ug paghimo og bag-ong proyekto (o pagpili og usa na).
Sa control panel, pilia ang ENBLE APIS AND SERVICES ug pangitaa ang BigQuery API.
Pilia ang Enable aron makonektar ang API.
Paghimo og yawe sa account
Adto ta pag-usab Google Developers Console, pilia ang tab nga Mga Kredensyal, Paghimo mga kredensyal ug yawe sa account sa Serbisyo.
Dayon - Bag-ong service account, ug isulod ang ngalan sa Service account name field.
Gikan sa Role drop-down list, pilia ang Project > Owner, unya Create.
Ang file nga awtomatiko nga ma-download gitawag nga creds.json.
Itakda ang GOOGLE_APPLICATION_CREDENTIALS, nga nagpiho sa agianan padulong sa creds.json sa terminal.
Kung maayo ang tanan, panahon na nga magsugod sa pagsulat sa programa.
Paghimo og aplikasyon
Para sa tutorial gamiton namo ang data gikan sa bigquery-public-data.stackoverflow, para sa among report pilion namo ang gidaghanon sa inadlaw nga publikasyon.
Ang tanan yano ra.
Pangutana sa lamesa -> I-visualize ang data -> I-save ang visualization -> Ipadala ang imahe
Magbuhat ta ug usa ka function para ma-define ang matag thread.
Pangutana sa BigQuery
Una among gi-import ang library.
gikan sa google.cloud import bigquery
Naghimo mi og function nga gitawag og query_to_bigquery, diin ang parameter kay query.
Kini nga function ibalik ang hangyo ingon usa ka frame sa datos.
Pagtan-aw sa datos
Aron masulbad kini nga problema, pilia ang matplotlib.
import matplotlib.pyplot isip plt
Nagkinahanglan kami og lima ka mga parameter, diin ang x mao ang x-axis data, x_label ang titulo sa axis, y ang y-axis data, ang y_label mao ang titulo sa axis, ug ang titulo mao ang titulo sa tibuok 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
Karon atong gamiton ang duha ka mga function sa paghimo og visualization ug i-save kini.
Ipadala namo ang gidaghanon sa mga post nga gipatik kada adlaw. Una mi nagsulat og hangyo.
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
"""
Ang pangutana makatabang sa pagkolekta sa datos sulod sa duha ka semana sugod sa Disyembre 2, 2018.
Gigamit namo kini nga petsa tungod kay ang 2018-12-02 mao ang pinakabag-o nga datos nga natala sa bigquery-public-data.stackoverflow.post_history, sa ubang mga kaso mahimo nimong gamiton ang CURRENT_DATE() aron makuha ang pinakabag-o nga datos.
Tawga ang query_to_bigquery function aron makuha ang datos.
dataframe = query_to_bigquery(query)
Dayon atong gamiton ang kolum sa datos sa petsa para sa x-axis, ug ang total_posts nga kolum para sa y-axis.
x = dataframe['petsa'].tolist()
y = dataframe['total_posts'].tolist()
Gihanduraw namo kini gamit ang visualize_bar_chart function ug i-save kini isip usa ka hulagway.
Giputos namo kini nga code sa usa ka function nga gitawag og 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 ug hulagway
Aron makapadala ug report sa nakadawat, kinahanglan nimong masayran ang parameter sa chat_id.
Gigamit namo userinfobot ug type/start. Ang bot motubag uban sa gikinahanglan nga impormasyon, chat_id anaa sa id field.
Karon atong himoon ang send_image function. Gamiton niini ang get_and_save_image function aron makuha ug i-save ang imahe. Ug dayon ipadala namon ang tanan sa husto nga kontak.
Sa katapusan, naghimo kami og laing function, panguna, aron ilunsad ang aplikasyon. Ayaw kalimot sa pag-ilis sa YOUR_TOKEN para sa bot.
Hinumdumi: kini nga programa awtomatikong ipadala ang imahe sa oras nga imong gitakda. Pananglitan, magpadala mi og report alas nuybe sa buntag kada adlaw.