ProHoster > blog > internetnieuws > Hoe u eenvoudige rapporten kunt delegeren aan een robot. We schrijven een bot in Python en Google BigQuery
Hoe u eenvoudige rapporten kunt delegeren aan een robot. We schrijven een bot in Python en Google BigQuery
Heeft u taken die zich dag na dag, week na week herhalen? Bijvoorbeeld het schrijven van rapporten. Je vraagt data op, analyseert deze, visualiseert deze (maakt grafieken, diagrammen) en stuurt deze vervolgens naar je baas. Maar wat als dit allemaal geautomatiseerd zou zijn?
In deze tutorial gaan we een bot voor Telegram maken die de rapportage helpt automatiseren. En het coolste is dat het hele programma uit slechts 50 regels code zal bestaan! Als je voor het eerst een bot voor Telegram maakt, moet je deze ook lezen post.
Als we de dienst willen gebruiken, moeten we de Google BigQuery API koppelen. Om dit te doen gaan we naar Google Developers Console en maak een nieuw project aan (of selecteer een bestaand project).
Selecteer API'S EN DIENSTEN INSCHAKELEN in het configuratiescherm en zoek naar BigQuery API.
Selecteer Inschakelen om de API te verbinden.
Maak een accountsleutel aan
Laten we nog eens naar gaan Google Developers Console, selecteer het tabblad Inloggegevens, Inloggegevens aanmaken en Serviceaccountsleutel.
Vervolgens - Nieuw serviceaccount en voer de naam in het veld Serviceaccountnaam in.
Selecteer in de vervolgkeuzelijst Rol Project > Eigenaar en vervolgens Maken.
Het bestand dat automatisch wordt gedownload heet creds.json.
Stel GOOGLE_APPLICATION_CREDENTIALS in en geef het pad naar creds.json op in de terminal.
Deze functie retourneert het verzoek als een dataframe.
Gegevens visualiseren
Om dit probleem op te lossen, kiest u matplotlib.
matplotlib.pyplot importeren als plt
We hebben vijf parameters nodig, waarbij x de gegevens op de x-as is, x_label de titel van de as is, y de gegevens van de y-as is, y_label de titel van de as is en titel de titel van de gehele visualisatie is.
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
Sla de afbeelding op
Laten we nu twee functies gebruiken om een visualisatie te maken en deze op te slaan.
We sturen dagelijks het aantal gepubliceerde berichten. Eerst schrijven we een verzoek.
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
"""
De query helpt bij het verzamelen van gegevens gedurende twee weken vanaf 2 december 2018.
We gebruiken deze datum omdat 2018-12-02 de nieuwste gegevens zijn die zijn vastgelegd in bigquery-public-data.stackoverflow.post_history. In andere gevallen kunt u CURRENT_DATE() gebruiken om de nieuwste gegevens te verkrijgen.
Roep de functie query_to_bigquery aan om de gegevens op te halen.
dataframe = query_to_bigquery(query)
Vervolgens gebruiken we de datumgegevenskolom voor de x-as en de kolom total_posts voor de y-as.
x = dataframe['datum'].tolist()
y = dataframe['totaal_posts'].tolist()
We visualiseren het met behulp van de visualiseren_bar_chart-functie en slaan het op als een afbeelding.
We verpakken deze code in een functie genaamd 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')
Stuur een afbeelding
Om een rapport naar de ontvanger te sturen, moet u de parameter chat_id kennen.
We gebruiken gebruikersinfobot en typ /start. De bot antwoordt met de nodige informatie, chat_id staat in het id-veld.
Laten we nu de functie send_image maken. Het zal de functie get_and_save_image gebruiken om de afbeelding op te halen en op te slaan. En dan sturen wij alles naar de juiste contactpersoon.
Ten slotte creëren we nog een functie, main, om de applicatie te starten. Vergeet niet YOUR_TOKEN voor de bot te wijzigen.
Let op: dit programma verzendt de afbeelding automatisch op het door u opgegeven tijdstip. Zo sturen wij elke dag om negen uur in de ochtend een rapport.