
ನೀವು ದಿನದಿಂದ ದಿನಕ್ಕೆ, ವಾರದಿಂದ ವಾರಕ್ಕೆ ಪುನರಾವರ್ತಿಸುವ ಕೆಲಸಗಳನ್ನು ಹೊಂದಿದ್ದೀರಾ? ಉದಾಹರಣೆಗೆ, ವರದಿಗಳನ್ನು ಬರೆಯುವುದು. ನೀವು ಡೇಟಾವನ್ನು ವಿನಂತಿಸುತ್ತೀರಿ, ಅದನ್ನು ವಿಶ್ಲೇಷಿಸುತ್ತೀರಿ, ಅದನ್ನು ದೃಶ್ಯೀಕರಿಸುತ್ತೀರಿ (ಗ್ರಾಫ್ಗಳು ಮತ್ತು ಚಾರ್ಟ್ಗಳನ್ನು ರಚಿಸುತ್ತೀರಿ), ಮತ್ತು ನಂತರ ಅದನ್ನು ನಿಮ್ಮ ಬಾಸ್ಗೆ ಕಳುಹಿಸುತ್ತೀರಿ. ಆದರೆ ನೀವು ಇದನ್ನೆಲ್ಲಾ ಸ್ವಯಂಚಾಲಿತಗೊಳಿಸಿದರೆ ಏನು?
ಈ ಟ್ಯುಟೋರಿಯಲ್ ನಲ್ಲಿ, ವರದಿ ಮಾಡುವಿಕೆಯನ್ನು ಸ್ವಯಂಚಾಲಿತಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡುವ ಟೆಲಿಗ್ರಾಮ್ ಬಾಟ್ ಅನ್ನು ನಾವು ರಚಿಸುತ್ತೇವೆ. ಮತ್ತು ಉತ್ತಮ ಭಾಗವೆಂದರೆ, ಇಡೀ ಪ್ರೋಗ್ರಾಂ ಕೇವಲ 50 ಸಾಲುಗಳ ಕೋಡ್ ಆಗಿರುತ್ತದೆ! ನೀವು ಮೊದಲ ಬಾರಿಗೆ ಟೆಲಿಗ್ರಾಮ್ ಬಾಟ್ ಅನ್ನು ರಚಿಸುತ್ತಿದ್ದರೆ, ನೀವು ಇದನ್ನು ಸಹ ಓದಲು ಬಯಸಬಹುದು. .
ಸ್ಕಿಲ್ಬಾಕ್ಸ್ ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ: ಪ್ರಾಯೋಗಿಕ ಕೋರ್ಸ್ .
ನಾವು ನೆನಪಿಸುತ್ತೇವೆ: ಎಲ್ಲಾ Habr ಓದುಗರಿಗೆ - Habr ಪ್ರೊಮೊ ಕೋಡ್ ಬಳಸಿಕೊಂಡು ಯಾವುದೇ ಸ್ಕಿಲ್ಬಾಕ್ಸ್ ಕೋರ್ಸ್ಗೆ ದಾಖಲಾಗುವಾಗ 10 ರೂಬಲ್ ರಿಯಾಯಿತಿ.
ನಾವೀಗ ಆರಂಭಿಸೋಣ
ಗ್ರಂಥಾಲಯಗಳನ್ನು ಸ್ಥಾಪಿಸುವುದು
ನಾವು ಬಳಸುತ್ತೇವೆ Google BigQuery ನಿಂದ ಡೇಟಾವನ್ನು ಹಿಂಪಡೆಯಲು. , и ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಮುಗಿದ ಡೇಟಾವನ್ನು ಟೆಲಿಗ್ರಾಮ್ಗೆ ಕಳುಹಿಸುತ್ತದೆ.
pip3 ಗೂಗಲ್-ಕ್ಲೌಡ್-ಬಿಗ್ಕ್ವೆರಿ ಮ್ಯಾಟ್ಪ್ಲೋಟ್ಲಿಬ್ ನಂಬಿ ಪಾಂಡಾಗಳು ಪೈಥಾನ್-ಟೆಲಿಗ್ರಾಮ್-ಬಾಟ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿ
Google BigQuery API ಅನ್ನು ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ
ನಾವು ಸೇವೆಯನ್ನು ಬಳಸಲು ಬಯಸಿದರೆ, ನಾವು Google BigQuery API ಗೆ ಸಂಪರ್ಕಿಸಬೇಕಾಗುತ್ತದೆ. ಇದನ್ನು ಮಾಡಲು, ಇಲ್ಲಿಗೆ ಹೋಗಿ ಮತ್ತು ಹೊಸ ಯೋಜನೆಯನ್ನು ರಚಿಸಿ (ಅಥವಾ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಒಂದನ್ನು ಆಯ್ಕೆಮಾಡಿ).
ನಿಯಂತ್ರಣ ಫಲಕದಲ್ಲಿ, ENABLE APIS AND SERVICES ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು BigQuery API ಗಾಗಿ ನೋಡಿ.

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 ಎಂಬ ಫಂಕ್ಷನ್ ಅನ್ನು ರಚಿಸುತ್ತೇವೆ, ಅಲ್ಲಿ ಪ್ಯಾರಾಮೀಟರ್ query ಆಗಿರುತ್ತದೆ.
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 ಎಂಬುದು 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 ರಿಂದ ಎರಡು ವಾರಗಳವರೆಗೆ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ.
bigquery-public-data.stackoverflow.post_history ನಲ್ಲಿ ದಾಖಲಾದ ಇತ್ತೀಚಿನ ಡೇಟಾ 2018-12-02 ಆಗಿರುವುದರಿಂದ ನಾವು ಈ ದಿನಾಂಕವನ್ನು ಬಳಸುತ್ತೇವೆ, ಇಲ್ಲದಿದ್ದರೆ ನೀವು ಹೊಸ ಡೇಟಾವನ್ನು ಪಡೆಯಲು CURRENT_DATE() ಅನ್ನು ಬಳಸಬಹುದು.
ಡೇಟಾವನ್ನು ಪಡೆಯಲು ನಾವು query_to_bigquery ಫಂಕ್ಷನ್ ಅನ್ನು ಕರೆಯುತ್ತೇವೆ.
ಡೇಟಾಫ್ರೇಮ್ = query_to_bigquery(ಪ್ರಶ್ನೆ)
ನಂತರ ನಾವು x-ಅಕ್ಷಕ್ಕೆ ದಿನಾಂಕ ಕಾಲಮ್ ಅನ್ನು ಮತ್ತು y-ಅಕ್ಷಕ್ಕೆ total_posts ಕಾಲಮ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ.
x = ಡೇಟಾಫ್ರೇಮ್['ದಿನಾಂಕ'].ಟೋಲಿಸ್ಟ್()
y = ಡೇಟಾಫ್ರೇಮ್['ಒಟ್ಟು_ಪೋಸ್ಟ್ಗಳು'].ಟೋಲಿಸ್ಟ್()
ನಾವು ಅದನ್ನು visualize_bar_chart ಕಾರ್ಯವನ್ನು ಬಳಸಿಕೊಂಡು ದೃಶ್ಯೀಕರಿಸುತ್ತೇವೆ ಮತ್ತು ಅದನ್ನು ಚಿತ್ರವಾಗಿ ಉಳಿಸುತ್ತೇವೆ.
plt = visualize_bar_chart(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')ಚಿತ್ರವನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ
ಸ್ವೀಕರಿಸುವವರಿಗೆ ವರದಿಯನ್ನು ಕಳುಹಿಸಲು, ನೀವು chat_id ನಿಯತಾಂಕವನ್ನು ತಿಳಿದುಕೊಳ್ಳಬೇಕು.
ನಾವು ಉಪಯೋಗಿಸುತ್ತೀವಿ ಮತ್ತು /start ಎಂದು ಟೈಪ್ ಮಾಡಿ. ಬೋಟ್ ಅಗತ್ಯವಿರುವ ಮಾಹಿತಿಯೊಂದಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತದೆ, 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'))ಮುಖ್ಯ ಕಾರ್ಯಕ್ರಮ
ಕೊನೆಯದಾಗಿ, ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ಮತ್ತೊಂದು ಕಾರ್ಯ, main ಅನ್ನು ರಚಿಸಿ. ಬೋಟ್ಗಾಗಿ YOUR_TOKEN ಅನ್ನು ಬದಲಾಯಿಸಲು ಮರೆಯಬೇಡಿ.
ನೆನಪಿಡಿ: ಈ ಪ್ರೋಗ್ರಾಂ ನೀವು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಸಮಯದಲ್ಲಿ ಚಿತ್ರವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಳುಹಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ನಾವು ಪ್ರತಿದಿನ ಬೆಳಿಗ್ಗೆ 9:00 ಗಂಟೆಗೆ ವರದಿಯನ್ನು ಕಳುಹಿಸುತ್ತೇವೆ.
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 ಎಂದು ಹೆಸರಿಸಿ.
ಟರ್ಮಿನಲ್ನಲ್ಲಿ ಈ ಕೆಳಗಿನ ಆಜ್ಞೆಯನ್ನು ನಮೂದಿಸುವ ಮೂಲಕ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ:
ಪೈಥಾನ್ 3 main.py
ಎಲ್ಲವೂ ಸಿದ್ಧವಾಗಿದೆ. ಈಗ ನಮ್ಮಲ್ಲಿ 50 ಸಾಲುಗಳ ಕೋಡ್ಗಳಿರುವ ಬೋಟ್ ಇದೆ, ಅದು ನಮ್ಮ ಹಸ್ತಕ್ಷೇಪವಿಲ್ಲದೆ ವರದಿಗಳನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ.
ಬಾಟ್ ಅನ್ನು ಪರಿಶೀಲಿಸೋಣ. , /send ಆಜ್ಞೆಯನ್ನು ಆರಿಸುವ ಮೂಲಕ.

ನೀವು ಮುಗಿದ ಕೋಡ್ ಅನ್ನು ಪಡೆಯಬಹುದು .
ಸ್ಕಿಲ್ಬಾಕ್ಸ್ ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ:
- ಎರಡು ವರ್ಷಗಳ ಪ್ರಾಯೋಗಿಕ ಕೋರ್ಸ್ .
- ಆನ್ಲೈನ್ ಕೋರ್ಸ್ .
- ಪ್ರಾಯೋಗಿಕ ಒಂದು ವರ್ಷದ ಕೋರ್ಸ್ .
ಮೂಲ: www.habr.com
