Com delegar informes senzills a un robot. Escriure un bot a Python i Google BigQuery
Tens tasques que es repeteixen dia rere dia, setmana rere setmana? Per exemple, escriure informes. Sol·liciteu dades, les analitzeu, les visualitzeu (feu gràfics, gràfics) i després les envieu al vostre cap. Però, i si tot això estigués automatitzat?
En aquest tutorial crearem un bot per a Telegram que ajudarà a automatitzar els informes. I el millor és que tot el programa constarà de només 50 línies de codi! Si esteu creant un bot per a Telegram per primera vegada, també hauríeu de llegir aquest publicar.
Si volem utilitzar el servei, hem de connectar l'API de Google BigQuery. Per fer-ho anem a Consola de desenvolupadors de Google i creeu un projecte nou (o seleccioneu-ne un existent).
Al tauler de control, seleccioneu ACTIVA API I SERVEIS i cerqueu l'API de BigQuery.
Aquesta funció retornarà la sol·licitud com a marc de dades.
Visualització de dades
Per resoldre aquest problema, trieu matplotlib.
importa matplotlib.pyplot com a plt
Necessitem cinc paràmetres, on x són les dades de l'eix x, x_label és el títol de l'eix, y són les dades de l'eix y, y_label és el títol de l'eix i title és el títol de tota la visualització.
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
Desa la imatge
Ara fem servir dues funcions per crear una visualització i desar-la.
Enviarem el nombre de publicacions diàries. Primer escrivim una petició.
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
"""
La consulta ajuda a recopilar dades durant dues setmanes a partir del 2 de desembre de 2018.
Utilitzem aquesta data perquè 2018-12-02 són les últimes dades registrades a bigquery-public-data.stackoverflow.post_history; en altres casos, podeu utilitzar CURRENT_DATE() per obtenir les dades més noves.
Truqueu a la funció query_to_bigquery per obtenir les dades.
marc de dades = query_to_bigquery (consulta)
A continuació, utilitzem la columna de dades de data per a l'eix X i la columna total_posts per a l'eix Y.
x = dataframe['data'].tolist()
y = dataframe['total_posts'].tolist()
El visualitzem mitjançant la funció visualize_bar_chart i el desem com a imatge.
Emboliquem aquest codi en una funció anomenada 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')
Envia una imatge
Per enviar un informe al destinatari, heu de conèixer el paràmetre chat_id.
Fem servir userinfobot i escriviu /start. El bot respon amb la informació necessària, chat_id es troba al camp id.
Ara creem la funció send_image. Utilitzarà la funció get_and_save_image per recuperar i desar la imatge. I després ho enviem tot al contacte correcte.