āĻāĻĒāĻ¨āĻžāĻ° āĻāĻŋ āĻāĻŽāĻ¨ āĻāĻžāĻ āĻāĻā§ āĻ¯āĻž āĻĻāĻŋāĻ¨ā§āĻ° āĻĒāĻ° āĻĻāĻŋāĻ¨, āĻ¸āĻĒā§āĻ¤āĻžāĻšā§āĻ° āĻĒāĻ° āĻ¸āĻĒā§āĻ¤āĻžāĻš āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§? āĻ¯ā§āĻŽāĻ¨ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻ˛ā§āĻāĻžāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻĄā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°ā§āĻ¨, āĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°ā§āĻ¨, āĻāĻāĻŋ āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°ā§āĻ¨ (āĻā§āĻ°āĻžāĻĢ, āĻāĻžāĻ°ā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨) āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻĒāĻ¨āĻžāĻ° āĻŦāĻ¸ā§āĻ° āĻāĻžāĻā§ āĻĒāĻžāĻ āĻžāĻ¨āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ āĻ¸āĻŦ āĻ¯āĻĻāĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻšāĻ¯āĻŧ?
āĻāĻ āĻāĻŋāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ā§ āĻāĻŽāĻ°āĻž āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŦāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦ āĻ¯āĻž āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻ°āĻŋāĻĒā§āĻ°ā§āĻāĻŋāĻ āĻāĻ°āĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°āĻŦā§āĨ¤ āĻāĻŦāĻ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻžāĻ˛ āĻāĻŋāĻ¨āĻŋāĻ¸ āĻšāĻ˛ āĻ¯ā§ āĻĒā§āĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 50 āĻ˛āĻžāĻāĻ¨ āĻā§āĻĄ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ āĻŋāĻ¤ āĻšāĻŦā§! āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻĒā§āĻ°āĻĨāĻŽāĻŦāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŦāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨, āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻāĻŋāĻ āĻĒāĻĄāĻŧāĻž āĻāĻāĻŋāĻ¤
Skillbox āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°ā§: āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻā§āĻ°ā§āĻ¸
āĻ¸ā§āĻā§āĻ°ā§āĻ¯āĻžāĻ āĻĨā§āĻā§ āĻĒāĻžāĻāĻĨāĻ¨ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ .āĻāĻŽāĻ°āĻž āĻŽāĻ¨ā§ āĻāĻ°āĻŋāĻ¯āĻŧā§ āĻĻāĻŋāĻā§āĻāĻŋ: "Habr"-āĻāĻ° āĻ¸āĻāĻ˛ āĻĒāĻžāĻ āĻāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ - "Habr" āĻĒā§āĻ°āĻāĻžāĻ°āĻŽā§āĻ˛āĻ āĻā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¯ā§āĻā§āĻ¨ā§ Skillbox āĻā§āĻ°ā§āĻ¸ā§ āĻ¨āĻĨāĻŋāĻā§āĻā§āĻ¤ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ 10 āĻ°ā§āĻŦā§āĻ˛ āĻāĻžāĻĄāĻŧāĨ¤
āĻāĻ˛ āĻļā§āĻ°ā§ āĻāĻ°āĻŋ
āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦā§
pip3 google-cloud-bigquery matplotlib numpy pandas python-telegram-bot āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨
Google BigQuery API āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻŽāĻ°āĻž āĻ¯āĻĻāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻāĻžāĻ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻžāĻĻā§āĻ° Google BigQuery API āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻāĻ°āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻ¯ā§āĻ¤ā§
āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛ āĻĒā§āĻ¯āĻžāĻ¨ā§āĻ˛ā§, APIS āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋ āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°ā§āĻ¨ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ 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 āĻ¨āĻžāĻŽā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ°āĻāĻŋ āĻā§āĻ¯āĻŧā§āĻ°āĻŋāĨ¤
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 āĻĨā§āĻā§ āĻļā§āĻ°ā§ āĻšāĻāĻ¯āĻŧāĻž āĻĻā§āĻ āĻ¸āĻĒā§āĻ¤āĻžāĻšā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĄā§āĻāĻž āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°āĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§āĨ¤
āĻāĻŽāĻ°āĻž āĻāĻ āĻ¤āĻžāĻ°āĻŋāĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ āĻāĻžāĻ°āĻŖ 2018-12-02 āĻšāĻ˛ bigquery-public-data.stackoverflow.post_history-āĻ¤ā§ āĻ°ā§āĻāĻ°ā§āĻĄ āĻāĻ°āĻž āĻ¸āĻžāĻŽā§āĻĒā§āĻ°āĻ¤āĻŋāĻ āĻĄā§āĻāĻž, āĻ āĻ¨ā§āĻ¯ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻĒāĻ¨āĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĄā§āĻāĻž āĻĒā§āĻ¤ā§ CURRENT_DATE() āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻĄā§āĻāĻž āĻĒā§āĻ¤ā§ query_to_bigquery āĻĢāĻžāĻāĻļāĻ¨ā§ āĻāĻ˛ āĻāĻ°ā§āĻ¨āĨ¤
āĻĄā§āĻāĻžāĻĢā§āĻ°ā§āĻŽ = query_to_bigquery(āĻā§āĻ¯āĻŧā§āĻ°āĻŋ)
āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻāĻŽāĻ°āĻž x-āĻ āĻā§āĻˇā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¤āĻžāĻ°āĻŋāĻ āĻĄā§āĻāĻž āĻāĻ˛āĻžāĻŽ āĻāĻŦāĻ y-āĻ āĻā§āĻˇā§āĻ° āĻāĻ¨ā§āĻ¯ total_posts āĻāĻ˛āĻžāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋāĨ¤
x = āĻĄā§āĻāĻžāĻĢā§āĻ°ā§āĻŽ['āĻ¤āĻžāĻ°āĻŋāĻ']āĨ¤āĻā§āĻ˛āĻŋāĻ¸ā§āĻ()
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 āĻĨā§āĻā§ PRO āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĒāĻŋāĻāĻāĻāĻĒāĻŋ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§" .
āĻāĻ¤ā§āĻ¸: www.habr.com