ProHoster > Blog > internet nuus > Hoe om eenvoudige verslae aan 'n robot te delegeer. Ons skryf 'n bot in Python en Google BigQuery
Hoe om eenvoudige verslae aan 'n robot te delegeer. Ons skryf 'n bot in Python en Google BigQuery
Het jy take wat dag na dag, week na week herhaal? Byvoorbeeld, die skryf van verslae. Jy versoek data, ontleed dit, visualiseer dit (maak grafieke, kaarte) en stuur dit dan aan jou baas. Maar wat as dit alles outomaties was?
In hierdie handleiding sal ons 'n bot vir Telegram skep wat sal help om verslaggewing te outomatiseer. En die coolste ding is dat die hele program uit slegs 50 reëls kode sal bestaan! As jy vir die eerste keer 'n bot vir Telegram skep, moet jy ook hierdie een lees post.
Ons herinner:vir alle lesers van "Habr" - 'n afslag van 10 000 roebels wanneer u inskryf vir enige Skillbox-kursus met behulp van die "Habr"-promosiekode.
As ons die diens wil gebruik, moet ons die Google BigQuery API koppel. Om dit te doen gaan ons na Google-ontwikkelaarkonsole en skep 'n nuwe projek (of kies 'n bestaande een).
Kies in die beheerpaneel AKTIVEER APIS EN DIENSTE en soek BigQuery API.
Kies Aktiveer om die API te koppel.
Skep 'n rekeningsleutel
Kom ons gaan weer na Google-ontwikkelaarkonsole, kies die Geloofsbriewe-oortjie, Skep geloofsbriewe en Diensrekeningsleutel.
Dan - Nuwe diensrekening, en voer die naam in die Diensrekeningnaam-veld in.
Kies Projek > Eienaar in die Rol-aftreklys, en dan Skep.
Die lêer wat outomaties afgelaai sal word, word creds.json genoem.
Stel GOOGLE_APPLICATION_CREDENTIALS, spesifiseer die pad na creds.json in die terminaal.
Hierdie funksie sal die versoek as 'n dataraam terugstuur.
Visualisering van data
Om hierdie probleem op te los, kies matplotlib.
voer matplotlib.pyplot in as plt
Ons benodig vyf parameters, waar x die x-asdata is, x_label die titel vir die as, y die y-asdata is, y_label die titel vir die as is, en titel die titel van die hele visualisering 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
Stoor die prent
Kom ons gebruik nou twee funksies om 'n visualisering te skep en dit te stoor.
Ons sal die aantal plasings wat daagliks gepubliseer word, stuur. Eers skryf ons 'n versoek.
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 navraag help om data vir twee weke in te samel vanaf 2 Desember 2018.
Ons gebruik hierdie datum omdat 2018-12-02 die jongste data is wat in bigquery-public-data.stackoverflow.post_history aangeteken is, in ander gevalle kan jy CURRENT_DATE() gebruik om die nuutste data te kry.
Roep die query_to_bigquery-funksie om die data te kry.
dataraam = query_to_bigquery(navraag)
Dan gebruik ons die datumdatakolom vir die x-as, en die total_posts-kolom vir die y-as.
x = dataraam['datum'].tolist()
y = dataraam['total_posts'].tolist()
Ons visualiseer dit deur die visualize_bar_chart-funksie te gebruik en stoor dit as 'n prent.
Ons draai hierdie kode in 'n funksie 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 'n prent
Om 'n verslag aan die ontvanger te stuur, moet jy die chat_id parameter ken.
Ons gebruik gebruikersinfobot en tik /start. Die bot reageer met die nodige inligting, chat_id is vervat in die id-veld.
Kom ons skep nou die send_image-funksie. Dit sal die get_and_save_image-funksie gebruik om die prent te herwin en te stoor. En dan stuur ons alles na die regte kontak.
Ten slotte skep ons 'n ander funksie, hoof, om die toepassing te begin. Moenie vergeet om YOUR_TOKEN vir die bot te verander nie.
Onthou: hierdie program sal die prent outomaties stuur op die tyd wat jy spesifiseer. Ons sal byvoorbeeld elke dag om negeuur in die oggend 'n verslag stuur.