ProHoster > Blog > internet nyheder > Sådan uddelegeres simple rapporter til en robot. Vi skriver en bot i Python og Google BigQuery
Sådan uddelegeres simple rapporter til en robot. Vi skriver en bot i Python og Google BigQuery
Har du opgaver, der gentager sig dag efter dag, uge efter uge? For eksempel at skrive rapporter. Du anmoder om data, analyserer dem, visualiserer dem (laver grafer, diagrammer) og sender dem derefter til din chef. Men hvad nu hvis alt dette var automatiseret?
I denne tutorial vil vi oprette en bot til Telegram, der hjælper med at automatisere rapportering. Og det fedeste er, at hele programmet kun vil bestå af 50 linjer kode! Hvis du opretter en bot til Telegram for første gang, så bør du også læse denne indlæg.
Hvis vi vil bruge tjenesten, skal vi forbinde Google BigQuery API. For at gøre dette går vi til Google Developers Console og opret et nyt projekt (eller vælg et eksisterende).
I kontrolpanelet skal du vælge AKTIVER APIS OG TJENESTER og se efter BigQuery API.
Vælg Aktiver for at forbinde API'en.
Opret en kontonøgle
Lad os gå til igen Google Developers Console, vælg fanen Oplysninger, Opret legitimationsoplysninger og tjenestekontonøgle.
Derefter - Ny servicekonto, og indtast navnet i feltet Servicekontonavn.
Fra rullelisten Rolle skal du vælge Projekt > Ejer og derefter Opret.
Filen, der automatisk downloades, hedder creds.json.
Indstil GOOGLE_APPLICATION_CREDENTIALS, og angiv stien til creds.json i terminalen.
Denne funktion returnerer anmodningen som en dataramme.
Visualisering af data
For at løse dette problem skal du vælge matplotlib.
importer matplotlib.pyplot som plt
Vi har brug for fem parametre, hvor x er x-aksens data, x_label er titlen for aksen, y er y-aksens data, y_label er titlen for aksen, og title er titlen på hele visualiseringen.
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
Gem billedet
Lad os nu bruge to funktioner til at oprette en visualisering og gemme den.
Vi sender antallet af publicerede indlæg dagligt. Først skriver vi en anmodning.
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
"""
Forespørgslen hjælper med at indsamle data i to uger fra den 2. december 2018.
Vi bruger denne dato, fordi 2018-12-02 er de seneste data, der er registreret i bigquery-public-data.stackoverflow.post_history, i andre tilfælde kan du bruge CURRENT_DATE() til at få de nyeste data.
Kald funktionen query_to_bigquery for at få dataene.
dataramme = query_to_bigquery(forespørgsel)
Så bruger vi datodatakolonnen for x-aksen og total_posts kolonnen for y-aksen.
x = dataramme['dato'].tolist()
y = dataramme['total_posts'].tolist()
Vi visualiserer det ved hjælp af visualize_bar_chart-funktionen og gemmer det som et billede.
Vi pakker denne kode i en funktion kaldet 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')
Send et billede
For at sende en rapport til modtageren skal du kende parameteren chat_id.
Vi bruger brugerinfobot og skriv /start. Botten svarer med de nødvendige oplysninger, chat_id er indeholdt i id-feltet.
Lad os nu oprette send_image-funktionen. Den vil bruge funktionen get_and_save_image til at hente og gemme billedet. Og så sender vi alt til den rigtige kontakt.