Ngaba unayo imisebenzi ephindaphinda usuku nosuku, iveki emva kweveki? Umzekelo, ukubhala iingxelo. Ucela idatha, uyihlalutye, uyibone (yenza iigrafu, iitshathi), uze uyithumele kumphathi wakho. Kodwa kuthekani ukuba yonke le nto yayizenzekela?
Kwesi sifundo siya kwenza i-bot yeTelegram eya kunceda ukunika ingxelo ngokuzenzekelayo. Kwaye into epholileyo kukuba yonke inkqubo iya kuba nemigca yekhowudi ye-50 kuphela! Ukuba wenza i-bot yeTelegram okokuqala, kuya kufuneka uyifunde kwakhona
I-Skillbox iyacebisa: Ikhosi esebenzayo
Umphuhlisi wePython ukusuka ekuqaleni .Siyakhumbuza: kubo bonke abafundi be "Habr" - isaphulelo se-ruble ye-10 xa ubhalisa kuyo nayiphi na ikhosi ye-Skillbox usebenzisa ikhowudi yokuphromotha "Habr".
Masiqalise
Ukufakela amathala eencwadi
Siza kusebenzisa
pip3 faka i-google-cloud-bigquery matplotlib numpy pandas python-telegram-bot
Iqhagamshela iGoogle BigQuery API
Ukuba sifuna ukusebenzisa inkonzo, kufuneka sidibanise iGoogle BigQuery API. Ukwenza oku siya ku
Kwiphaneli yolawulo, khetha YENZA I-APIS NEENKONZO kwaye ujonge iBigQuery API.
Khetha Vulela ukudibanisa i-API.
Yenza isitshixo seakhawunti
Masiyeni kwakhona
Emva koko - I-akhawunti entsha yenkonzo, kwaye ufake igama kwindawo yegama le-akhawunti yeNkonzo.
Kuluhlu oluhlayo lwendima, khetha iProjekthi > uMnini, emva koko Yenza.
Ifayile eya kukhutshelwa ngokuzenzekelayo ibizwa ngokuba yi-creds.json.
Cwangcisa GOOGLE_APPLICATION_CREDENTIALS, ikhankanya indlela eya creds.json kwitheminali.
thumela ngaphandle GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'
Ukuba yonke into ihambe kakuhle, lixesha lokuba uqale ukubhala inkqubo.
Ukwenza isicelo
Kwisifundo siza kusebenzisa idatha esuka kwi-binqury-public-data.stackoverflow, kwingxelo yethu siya kukhetha inani lopapasho lwemihla ngemihla.
Yonke into ilula kakhulu.
Buza itafile -> Jonga idatha -> Gcina umbono -> Thumela umfanekiso
Masenze umsebenzi omnye ukuchaza umsonto ngamnye.
Umbuzo kwi-BigQuery
Okokuqala singenisa ithala leencwadi.
ukusuka kugoogle.cloud yokungenisa enkulu
Senza umsebenzi obizwa ngokuba yi-query_to_bigquery, apho iparameter inombuzo.
def query_to_bigquery(query):
client = bigquery.Client()
query_job = client.query(query)
result = query_job.result()
dataframe = result.to_dataframe()
return dataframe
Lo msebenzi uzakubuyisela isicelo njengesakhelo sedatha.
Ukubona idatha
Ukusombulula le ngxaki, khetha i-matplotlib.
ngenisa i-matplotlib.pyplot njenge-plt
Sifuna iiparamitha ezintlanu, apho ux yidatha ye-axis engu-x, x_ileyibhile sisihloko se-axis, y yidatha ye-axis, y_label sisihloko se-axis, kwaye isihloko sisihloko sokubonwayo ngokupheleleyo.
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
Gcina umfanekiso
Ngoku makhe sisebenzise imisebenzi emibini ukwenza umfanekiso kunye nokuwugcina.
Siza kuthumela inani lezithuba ezipapashwa mihla le. Okokuqala sibhala isicelo.
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
"""
Umbuzo unceda ukuqokelela idatha kwiiveki ezimbini ukuqala nge-2 kaDisemba 2018.
Sisebenzisa lo mhla kuba u-2018-12-02 yidatha yamva nje eshicilelwe kwi-binqury-public-data.stackoverflow.post_history, kwezinye iimeko ungasebenzisa CURRENT_DATE () ukufumana eyona datha intsha.
Fowunela umsebenzi query_to_bigquery ukufumana idatha.
idataframe = query_to_bigquery(umbuzo)
Emva koko sisebenzisa ikholomu yomhla wedatha ye-x-axis, kunye ne-total_posts column ye-y-axis.
x = i-dataframe['umhla'].tolist()
y = idataframe['total_posts'].tolist()
Siyibona ngeso lengqondo sisebenzisa i-visualize_bar_chart umsebenzi kwaye uyigcine njengomfanekiso.
plt = jonga_itshati_yebha (x=x, x_label='Umhla', y=y, y_lebula='IziThuthi zizonke', isihloko='IziThuba zeMihla yonke')
plt.savefig('viz.png')
Siyisonga le khowudi kumsebenzi othi 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')
Thumela umfanekiso
Ukuze uthumele ingxelo kumamkeli, kufuneka ukwazi i parameter chat_id.
Sisebenzisa
Ngoku makhe senze umsebenzi we-send_image. Iza kusebenzisa get_and_save_image umsebenzi wokubuyisela nokugcina umfanekiso. Kwaye ke sithumela yonke into kumnxeba ochanekileyo.
def send_image(bot, update):
get_and_save_image()
chat_id = 'CHAT_ID_RECEIVER'
bot.send_photo(chat_id=chat_id, photo=open('viz.png','rb'))
Inkqubo ephambili
Ekugqibeleni, senza omnye umsebenzi, oyintloko, ukuqalisa isicelo. Ungalibali ukutshintsha i-YOUR_TOKEN ye-bot.
Khumbula: le nkqubo izakuthumela umfanekiso ngokuzenzekelayo ngexesha olichazayo. Ngokomzekelo, siya kuthumela ingxelo ngentsimbi yethoba kusasa yonke imihla.
def main():
updater = Updater('YOUR_TOKEN')
updater.job_queue.run_daily(send_image, time=datetime.datetime.strptime('9:00AM', '%I:%M%p').time(), days=(0,1,2,3,4,5,6))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
Ngenxa yoko, isicelo sethu siya kujongeka ngolu hlobo:
from google.cloud import bigquery
from telegram.ext import Updater
import matplotlib.pyplot as plt
import numpy as np
import datetime
def query_to_bigquery(query):
client = bigquery.Client()
query_job = client.query(query)
result = query_job.result()
dataframe = result.to_dataframe()
return dataframe
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
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')
def send_image(bot, update):
get_and_save_image()
chat_id = 'CHAT_ID_RECEIVER'
bot.send_photo(chat_id=chat_id, photo=open('viz.png', 'rb'))
def main():
updater = Updater('YOUR_TOKEN')
updater.job_queue.run_daily(send_image, time=datetime.datetime.strptime('9:00AM', '%I:%M%p').time(), days=(0,1,2,3,4,5,6))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
Gcina ifayile kwaye uyibize main.py.
Siqalisa usetyenziso ngokungenisa umyalelo kwi-terminal:
I-python3 engundoqo.py
Zonke zilungile. Ngoku sinerobhothi equkethe imigca ye-50 yekhowudi eyenza iingxelo ngaphandle kokungenelela kwethu.
Makhe sijonge ibhot
Ungafumana ikhowudi egqityiweyo apha
I-Skillbox iyacebisa:
- Ikhosi yokusebenza yeminyaka emibini
"Ndingumphuhlisi wewebhu wePRO" .- Ikhosi ekwi-Intanethi
"C # umqambi ukusuka ku-0" .- Ikhosi yonyaka osebenzayo
"Umphuhlisi we-PHP ukusuka kwi-0 ukuya kwi-PRO" .
umthombo: www.habr.com