Ingabe unayo imisebenzi ephindaphinda usuku nosuku, isonto nesonto? Isibonelo, ukubhala imibiko. Ucela idatha, uyihlaziye, uyibone ngeso lengqondo (yenza amagrafu, amashadi), bese uyithumela kumphathi wakho. Kodwa kuthiwani uma konke lokhu bekuzenzakalelayo?
Kulesi sifundo sizodala i-bot yeTelegram ezosiza ukubika ngokuzenzakalelayo. Futhi into ebanda kunazo zonke ukuthi lonke uhlelo luzoba nemigqa yekhodi engu-50 kuphela! Uma udala i-bot yeTelegramu okokuqala ngqa, kufanele ufunde nalena
I-Skillbox iyancoma: Isifundo esiwusizo
Umthuthukisi wePython kusukela ekuqaleni .Siyakukhumbuza: kubo bonke abafundi be-"Habr" - isaphulelo sama-ruble angu-10 lapho ubhalisa kunoma yisiphi isifundo se-Skillbox usebenzisa ikhodi yephromoshini ethi "Habr".
Ake siqale
Ifaka imitapo yolwazi
Sizosebenzisa
pip3 faka i-google-cloud-bigquery matplotlib numpy pandas python-telegram-bot
Ixhuma i-Google BigQuery API
Uma sifuna ukusebenzisa isevisi, sidinga ukuxhuma i-Google BigQuery API. Ukwenza lokhu siya ku
Kuphaneli yokulawula, khetha VIKA AMANDLA AMA-API KANYE NEZINKONZO bese ubheka i-BigQuery API.
Khetha okuthi Vumela ukuxhuma i-API.
Dala ukhiye we-akhawunti
Asihambe futhi
Bese - I-akhawunti yesevisi entsha, bese ufaka igama endaweni yegama le-akhawunti yesevisi.
Kuhlu lokudonsela phansi Indima, khetha Iphrojekthi > Umnikazi, bese Dala.
Ifayela elizolandwa ngokuzenzakalelayo libizwa ngokuthi creds.json.
Setha i-GOOGLE_APPLICATION_CREDENTIALS, ucacise indlela eya ku-creds.json kutheminali.
thekelisa i-GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'
Uma konke kuhambe kahle, sekuyisikhathi sokuqala ukubhala uhlelo.
Ukudala uhlelo lokusebenza
Okokufundisa sizosebenzisa idatha evela ku-binqury-public-data.stackoverflow, embikweni wethu sizokhetha inombolo yokushicilelwa kwansuku zonke.
Konke kulula.
Buza ithebula -> Bona ngeso lengqondo idatha -> Gcina ukubonakala -> Thumela isithombe
Ake sakhe umsebenzi owodwa ukuze sichaze umucu ngamunye.
Umbuzo ku-BigQuery
Okokuqala singenisa umtapo wolwazi.
kusuka ku-google.cloud yokungenisa enkulu
Sakha umsebenzi obizwa ngokuthi query_to_bigquery, lapho ipharamitha ingumbuzo.
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 uzobuyisela isicelo njengohlaka lwedatha.
Ukubuka idatha
Ukuxazulula le nkinga, khetha i-matplotlib.
ngenisa i-matplotlib.pyplot njenge-plt
Sidinga amapharamitha amahlanu, lapho u-x kuyidatha ye-eksisi ka-x, i-x_lebula iyisihloko se-eksisi, y idatha ye-eksisi ka-y, i-y_lebula yisihloko se-eksisi, futhi isihloko siyisihloko sakho konke ukubuka.
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
Londoloza isithombe
Manje ake sisebenzise imisebenzi emibili ukuze sakhe ukubonwa futhi sikulondoloze.
Sizothumela inombolo yokuthunyelwe nsuku zonke. 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 usiza ukuqoqa idatha yamaviki amabili kusukela ngomhla ka-2 Disemba 2018.
Sisebenzisa le dethi ngoba u-2018-12-02 idatha yakamuva eqoshwe ku-bigquery-public-data.stackoverflow.post_history, kwezinye izimo ungasebenzisa CURRENT_DATE() ukuze uthole idatha entsha.
Shayela umsebenzi we-query_to_bigquery ukuze uthole idatha.
idathaframe = query_to_bigquery(umbuzo)
Bese sisebenzisa ikholomu yedatha yedethi ku-eksisi ka-x, kanye nekholomu_yokuthunyelwe okuphelele kwe-eksisi ka-y.
x = i-dataframe['idethi'].tolist()
y = uhlaka lwedatha['okuthunyelwe_okuphelele'].tolist()
Siyibona ngeso lengqondo sisebenzisa umsebenzi we-visualize_bar_chart futhi siyilondoloze njengesithombe.
plt = visualize_bar_chart(x=x, x_label='Usuku', y=y, y_lebula='Isamba Sokuthunyelwe', isihloko='Okuthunyelwe Kwansuku zonke')
plt.savefig('viz.png')
Sigoqa le khodi ngomsebenzi 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 isithombe
Ukuze uthumele umbiko kumamukeli, udinga ukwazi ipharamitha ye-chat_id.
Sisebenzisa
Manje ake sakhe umsebenzi we-send_image. Izosebenzisa umsebenzi we-get_and_save_image ukuze ithole futhi ilondoloze isithombe. Bese sithumela yonke into koxhumana naye olungile.
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'))
Uhlelo oluyinhloko
Ekugcineni, sakha omunye umsebenzi, oyinhloko, ukuqalisa uhlelo lokusebenza. Ungakhohlwa ukushintsha i-YOUR_TOKEN ye-bot.
Khumbula: lolu hlelo luzothumela isithombe ngokuzenzakalelayo ngesikhathi osicacisayo. Ngokwesibonelo, sizothumela umbiko ngehora lesishiyagalolunye ekuseni nsuku zonke.
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 yalokho, isicelo sethu sizobukeka kanje:
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()
Londoloza ifayela bese ulibiza ngokuthi main.py.
Sethula uhlelo lokusebenza ngokufaka umyalo kutheminali:
python3 main.py
Konke sekulungile. Manje sinerobhothi elihlanganisa imigqa yekhodi engu-50 ekhiqiza imibiko ngaphandle kokungenelela kwethu.
Ake sihlole i-bot
Ungathola ikhodi eqediwe ku
I-Skillbox iyancoma:
- Isifundo sokwenza iminyaka emibili
"Ngingumthuthukisi wewebhu we-PRO" .- Inkambo eku-inthanethi
"C# unjiniyela kusuka ku-0" .- Isifundo sonyaka esisebenzayo
"Unjiniyela we-PHP kusuka ku-0 kuye ku-PRO" .
Source: www.habr.com