ایا تاسو داسې دندې لرئ چې ورځ په ورځ تکرار کړئ، اونۍ وروسته اونۍ؟ د مثال په توګه، راپورونه لیکل. تاسو د معلوماتو غوښتنه کوئ، تحلیل یې کړئ، لیدل یې کړئ (ګرافونه، چارټونه جوړ کړئ) او بیا یې خپل مالک ته واستوئ. مګر که دا ټول اتومات وي؟
پدې لوست کې به موږ د ټیلیګرام لپاره یو بوټ جوړ کړو چې د اتوماتیک راپور ورکولو کې به مرسته وکړي. او ترټولو ښه شی دا دی چې ټول برنامه به د کوډ یوازې 50 لینونه ولري! که تاسو د لومړي ځل لپاره د ټیلیګرام لپاره بوټ رامینځته کوئ ، نو تاسو باید دا هم ولولئ
Skillbox وړاندیز کوي: عملي کورس
د پیل څخه د پایتون پراختیا کونکی .موږ یادونه کوو: د ټولو هابر لوستونکو لپاره - د 10 روبل تخفیف کله چې د هابر پرومو کوډ په کارولو سره د مهارت بکس کوم کورس کې نوم لیکنه وکړئ.
راځه چي پیل یی کړو
د کتابتونونو نصبول
موږ به وکاروو
pip3 google-cloud-bigquery matplotlib numpy pandas python-telegram-bot نصب کړئ
د Google BigQuery API سره نښلول
که موږ غواړو خدمت وکاروو، موږ اړتیا لرو چې د Google BigQuery API سره وصل کړو. د دې کولو لپاره موږ ځو
په کنټرول پینل کې، د APIs او خدماتو فعالول غوره کړئ او د BigQuery API لپاره وګورئ.
د API سره نښلولو لپاره فعال کړئ غوره کړئ.
د حساب کیلي جوړه کړئ
راځئ چې بیا لاړ شو
بیا - د نوي خدماتو حساب، او د خدماتو حساب نوم ساحه کې نوم دننه کړئ.
د رول ډراپ-ډاون لیست څخه، پروژه> مالک غوره کړئ، بیا جوړ کړئ.
هغه فایل چې په اوتومات ډول ډاونلوډ کیږي creds.json نومیږي.
GOOGLE_APPLICATION_CREDENTIALS تنظیم کړئ، په ټرمینل کې creds.json ته لاره مشخص کړئ.
صادر کړئ GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'
که هرڅه سم وي، دا د پروګرام لیکلو وخت دی.
د غوښتنلیک جوړول
د ټیوټوریل لپاره به موږ د bigquery-public-data.stackoverflow ډیټا وکاروو، زموږ د راپور لپاره به موږ د ورځني خپرونو شمیر وټاکو.
هرڅه خورا ساده دي.
د میز څخه پوښتنه وکړئ -> ډیټا لید کړئ -> لید خوندي کړئ -> عکس واستوئ
راځئ چې د هر تار تعریف کولو لپاره یو فنکشن جوړ کړو.
BigQuery ته پوښتنه
لومړی موږ کتابتون واردوو.
د google.cloud څخه د bigquery وارد کړئ
موږ د query_to_bigquery په نوم یو فنکشن رامینځته کوو ، چیرې چې پیرامیټر پوښتنه ده.
def query_to_bigquery(query):
client = bigquery.Client()
query_job = client.query(query)
result = query_job.result()
dataframe = result.to_dataframe()
return dataframe
دا فنکشن به غوښتنه د ډیټا چوکاټ په توګه بیرته راولي.
د معلوماتو لید
د دې ستونزې د حل لپاره، matplotlib غوره کړئ.
matplotlib.pyplot د plt په توګه وارد کړئ
موږ پنځه پیرامیټرو ته اړتیا لرو، چیرته چې x د ایکس محور ډاټا ده، x_label د محور لپاره سرلیک دی، y د y محور ډاټا دی، y_label د محور لپاره سرلیک دی، او سرلیک د ټول لید سرلیک دی.
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
انځور خوندي کړئ
اوس راځئ چې د لید جوړولو لپاره دوه افعال وکاروو او خوندي یې کړو.
موږ به هره ورځ د خپرو شویو پوسټونو شمیر واستوو. لومړی موږ یوه غوښتنه لیکو.
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
"""
دا پوښتنه د دسمبر 2، 2018 څخه د دوو اونیو لپاره د معلوماتو راټولولو کې مرسته کوي.
موږ دا نیټه کاروو ځکه چې 2018-12-02 وروستي ډاټا دي چې په bigquery-public-data.stackoverflow.post_history کې ثبت شوي، په نورو قضیو کې تاسو کولی شئ د نوي ډیټا ترلاسه کولو لپاره CURRENT_DATE() وکاروئ.
د معلوماتو ترلاسه کولو لپاره query_to_bigquery فنکشن ته زنګ ووهئ.
ډیټا فریم = query_to_bigquery(پوښتنه)
بیا موږ د x-axis لپاره د نیټې ډیټا کالم کاروو، او د y-axis لپاره د ټول_پوسټ کالم.
x = ډاټا فریم['date'].tolist()
y = ډیټا فریم['total_posts'].tolist()
موږ دا د visualize_bar_chart فنکشن په کارولو سره تصور کوو او د عکس په توګه یې خوندي کوو.
plt = visualize_bar_chart(x=x, x_label='Date', y=y, y_label='ټول پوسټونه', title='ورځني پوسټونه')
plt.savefig('viz.png')
موږ دا کوډ د 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')
یو انځور ولېږئ
ترلاسه کونکي ته د راپور لیږلو لپاره ، تاسو اړتیا لرئ د chat_id پیرامیټر پوه شئ.
مونږ تری ګټه پورته کوو
اوس راځئ چې د send_image فنکشن جوړ کړو. دا به د عکس ترلاسه کولو او خوندي کولو لپاره get_and_save_image فنکشن وکاروي. او بیا موږ هرڅه سمې اړیکې ته لیږو.
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'))
اصلي پروګرام
په نهایت کې ، موږ یو بل فعالیت رامینځته کوو ، اصلي ، د غوښتنلیک پیل کولو لپاره. د بوټو لپاره د YOUR_TOKEN بدلول مه هیروئ.
په یاد ولرئ: دا برنامه به عکس په اوتومات ډول په هغه وخت کې واستوي چې تاسو یې مشخص کوئ. د مثال په توګه، موږ به هره ورځ د سهار په نهو بجو یو راپور واستوو.
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()
د پایلې په توګه، زموږ غوښتنلیک به داسې ښکاري:
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()
فایل خوندي کړئ او main.py ته زنګ ووهئ.
موږ په ترمینل کې د کمانډ دننه کولو سره غوښتنلیک پیل کوو:
python3 main.py
ټول چمتو دي. اوس موږ یو روبوټ لرو چې د کوډ 50 کرښې لري چې زموږ له مداخلې پرته راپورونه چمتو کوي.
راځئ چې بوټ وګورو
تاسو کولی شئ بشپړ شوی کوډ ترلاسه کړئ
Skillbox وړاندیز کوي:
- دوه کلن عملي کورس
"زه د پرو ویب جوړونکی یم" .- آنلاین کورس
"له 0 څخه C# پراختیا کونکی" .- یو کلن عملي کورس
"د پی ایچ پی جوړونکی له 0 څخه تر پرو" .
سرچینه: www.habr.com