ከቀን ወደ ቀን፣ ከሳምንት ወደ ሳምንት የሚደጋገሙ ስራዎች አሉዎት? ለምሳሌ, ሪፖርቶችን መጻፍ. መረጃን ትጠይቃለህ፣ ተንትነህ፣ በዓይነ ሕሊናህ ተመልከት (ግራፎችን፣ ገበታዎችን አዘጋጅ) እና ከዚያ ወደ አለቃህ ላክ። ግን ይህ ሁሉ በራስ-ሰር ቢሆንስ?
በዚህ ማጠናከሪያ ትምህርት ለቴሌግራም አውቶማቲክ ሪፖርት ማድረግን የሚረዳ ቦቶን እንፈጥራለን። እና በጣም ጥሩው ነገር አጠቃላይ ፕሮግራሙ 50 የኮድ መስመሮችን ብቻ የያዘ መሆኑ ነው! ለቴሌግራም ለመጀመሪያ ጊዜ ቦት እየፈጠሩ ከሆነ ይህንንም ማንበብ አለብዎት
Skillbox ይመክራል፡ ተግባራዊ ኮርስ
የ Python ገንቢ ከባዶ .እኛ እናስታውስዎታለን- ለሁሉም የ "ሀብር" አንባቢዎች - የ "Habr" የማስተዋወቂያ ኮድን በመጠቀም በማንኛውም የ Skillbox ኮርስ ውስጥ ሲመዘገቡ የ 10 ሩብልስ ቅናሽ.
እንደ መጀመር
ቤተ መፃህፍት በመጫን ላይ
እንጠቀማለን
pip3 ጫን ጉግል-ክላውድ-ቢግquery matplotlib numpy pandas python-telegram-bot
Google BigQuery API በማገናኘት ላይ
አገልግሎቱን መጠቀም ከፈለግን ጎግል BigQuery API ማገናኘት አለብን። ይህንን ለማድረግ ወደ እኛ እንሄዳለን
በመቆጣጠሪያ ፓኔል ውስጥ ኤፒአይኤስን እና አገልግሎቶችን አንቃ የሚለውን ይምረጡ እና BigQuery API ን ይፈልጉ።
ኤፒአይን ለማገናኘት አንቃን ይምረጡ።
የመለያ ቁልፍ ፍጠር
እንደገና እንሂድ
ከዚያ - አዲስ የአገልግሎት መለያ, እና በአገልግሎት መለያ ስም መስክ ውስጥ ስሙን ያስገቡ.
ከሚና ተቆልቋይ ዝርዝር ውስጥ ፕሮጄክት > ባለቤት የሚለውን ምረጥ ከዚያም ፍጠር።
በራስ ሰር የሚወርደው ፋይል creds.json ይባላል።
በተርሚናል ውስጥ ወደ creds.json የሚወስደውን መንገድ በመግለጽ GOOGLE_APPLICATION_CREDENTIALS ያቀናብሩ።
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-ዘንግ ዳታ፣ x_label የዘንግ ርዕስ፣ y-axis ውሂብ፣ 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 ተግባር ይደውሉ።
የውሂብ ፍሬም = መጠይቅ_ወደ_ትልቅ መጠይቅ(ጥያቄ)
ከዚያም የቀን ውሂብ አምድ ለ x-ዘንግ፣ እና ጠቅላላ_ፖስቶች አምድ ለy-ዘንግ እንጠቀማለን።
x = የውሂብ ፍሬም ['ቀን']።tolist()
y = የውሂብ ፍሬም['total_posts'].tolist()
ምስላዊ_አሞሌ_ቻርት ተግባርን በመጠቀም እናየዋለን እና እንደ ምስል እናስቀምጠዋለን።
plt = ምስላዊ_ባር_ቻርት (x=x፣ x_label='ቀን'፣ y=y፣ y_label='ጠቅላላ ልጥፎች'፣ ርዕስ='ዕለታዊ ልጥፎች')
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')
ምስል ላክ
ሪፖርት ለተቀባዩ ለመላክ የቻት_id መለኪያውን ማወቅ አለቦት።
እንጠቀማለን
አሁን የመላክ_ምስል ተግባርን እንፍጠር። ምስሉን ለማውጣት እና ለማስቀመጥ የማግኘት_እና_ማስቀመጥ_ተግባርን ይጠቀማል። እና ከዚያ ሁሉንም ነገር ወደ ትክክለኛው አድራሻ እንልካለን.
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 ዋና.py
ሁሉም ዝግጁ ነው። አሁን ያለእኛ ጣልቃገብነት ሪፖርቶችን የሚያመነጭ 50 የኮድ መስመሮችን የያዘ ሮቦት አለን።
ቦቱን እንፈትሽ
የተጠናቀቀውን ኮድ በ ላይ ማግኘት ይችላሉ።
Skillbox ይመክራል፡
- የሁለት ዓመት ተግባራዊ ኮርስ
"እኔ የ PRO ድር ገንቢ ነኝ" .- የመስመር ላይ ኮርስ
"C# ገንቢ ከ 0" .- ተግባራዊ ዓመት ኮርስ
"PHP ገንቢ ከ 0 ወደ PRO" .
ምንጭ: hab.com