ProHoster > Blog > Internetnachrichten > So delegieren Sie einfache Berichte an einen Roboter. Einen Bot in Python und Google BigQuery schreiben
So delegieren Sie einfache Berichte an einen Roboter. Einen Bot in Python und Google BigQuery schreiben
Haben Sie Aufgaben, die sich Tag für Tag, Woche für Woche wiederholen? Zum Beispiel das Schreiben von Berichten. Sie fordern Daten an, analysieren sie, visualisieren sie (erstellen Grafiken, Diagramme) und senden sie dann an Ihren Chef. Aber was wäre, wenn das alles automatisiert wäre?
In diesem Tutorial erstellen wir einen Bot für Telegram, der dabei hilft, die Berichterstellung zu automatisieren. Und das Coolste ist, dass das gesamte Programm nur aus 50 Codezeilen besteht! Wenn Sie zum ersten Mal einen Bot für Telegram erstellen, sollten Sie auch diesen lesen Post.
Wenn wir den Dienst nutzen möchten, müssen wir die Google BigQuery API anbinden. Dazu gehen wir zu Google Entwicklerkonsole und erstellen Sie ein neues Projekt (oder wählen Sie ein vorhandenes aus).
Wählen Sie im Steuerungsfeld APIs und Dienste aktivieren aus und suchen Sie nach der BigQuery-API.
Wählen Sie „Aktivieren“, um die API zu verbinden.
Erstellen Sie einen Kontoschlüssel
Lasst uns noch einmal gehen Google Entwicklerkonsole, wählen Sie die Registerkarte Anmeldeinformationen, Anmeldeinformationen erstellen und Dienstkontoschlüssel aus.
Dann – Neues Dienstkonto, und geben Sie den Namen in das Feld „Dienstkontoname“ ein.
Wählen Sie in der Dropdown-Liste „Rolle“ „Projekt“ > „Eigentümer“ und dann „Erstellen“ aus.
Die Datei, die automatisch heruntergeladen wird, heißt creds.json.
Legen Sie GOOGLE_APPLICATION_CREDENTIALS fest und geben Sie den Pfad zu creds.json im Terminal an.
Wenn alles gut gelaufen ist, ist es Zeit, mit dem Schreiben des Programms zu beginnen.
Anwendung erstellen
Für das Tutorial verwenden wir Daten aus bigquery-public-data.stackoverflow, für unseren Bericht wählen wir die Anzahl der täglichen Veröffentlichungen aus.
Alles ist ganz einfach.
Fragen Sie die Tabelle ab -> Visualisieren Sie die Daten -> Speichern Sie die Visualisierung -> Senden Sie das Bild
Lassen Sie uns eine Funktion erstellen, um jeden Thread zu definieren.
Abfrage an BigQuery
Zuerst importieren wir die Bibliothek.
aus google.cloud BigQuery importieren
Wir erstellen eine Funktion namens query_to_bigquery, wobei der Parameter query ist.
Diese Funktion gibt die Anfrage als Datenrahmen zurück.
Daten visualisieren
Um dieses Problem zu lösen, wählen Sie matplotlib.
importiere matplotlib.pyplot als plt
Wir benötigen fünf Parameter, wobei x die x-Achsendaten sind, x_label der Titel für die Achse ist, y die y-Achsendaten sind, y_label der Titel für die Achse ist und title der Titel der gesamten Visualisierung ist.
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
Speichern Sie das Bild
Lassen Sie uns nun mit zwei Funktionen eine Visualisierung erstellen und speichern.
Wir senden Ihnen täglich die Anzahl der veröffentlichten Beiträge. Zuerst schreiben wir eine Anfrage.
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
"""
Die Abfrage hilft bei der Datenerfassung für zwei Wochen ab dem 2. Dezember 2018.
Wir verwenden dieses Datum, da der 2018 die neuesten Daten sind, die in bigquery-public-data.stackoverflow.post_history aufgezeichnet wurden. In anderen Fällen können Sie CURRENT_DATE() verwenden, um die neuesten Daten abzurufen.
Rufen Sie die Funktion query_to_bigquery auf, um die Daten abzurufen.
dataframe = query_to_bigquery(query)
Dann verwenden wir die Datumsdatenspalte für die x-Achse und die total_posts-Spalte für die y-Achse.
x = dataframe['date'].tolist()
y = dataframe['total_posts'].tolist()
Wir visualisieren es mit der Funktion visualize_bar_chart und speichern es als Bild.
Wir packen diesen Code in eine Funktion namens 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')
Senden Sie ein Bild
Um einen Bericht an den Empfänger zu senden, müssen Sie den Parameter chat_id kennen.
Wir gebrauchen Benutzerinfobot und geben Sie /start ein. Der Bot antwortet mit den notwendigen Informationen, chat_id ist im ID-Feld enthalten.
Jetzt erstellen wir die Funktion send_image. Es wird die Funktion get_and_save_image verwenden, um das Bild abzurufen und zu speichern. Und dann schicken wir alles an den richtigen Ansprechpartner.
Schließlich erstellen wir eine weitere Funktion, main, um die Anwendung zu starten. Vergessen Sie nicht, YOUR_TOKEN für den Bot zu ändern.
Denken Sie daran: Dieses Programm sendet das Bild automatisch zu dem von Ihnen angegebenen Zeitpunkt. Beispielsweise versenden wir jeden Tag um neun Uhr morgens einen Bericht.