ProHoster > Blog > internetske vijesti > Kako delegirati jednostavna izvješća robotu. Pisanje bota u Pythonu i Google BigQueryju
Kako delegirati jednostavna izvješća robotu. Pisanje bota u Pythonu i Google BigQueryju
Imate li zadatke koji se ponavljaju dan za danom, tjedan za tjednom? Na primjer, pisanje izvješća. Tražite podatke, analizirate ih, vizualizirate (napravite grafikone, dijagrame), a zatim pošaljete svom šefu. Ali što ako je sve ovo automatizirano?
U ovom tutorijalu izradit ćemo bota za Telegram koji će pomoći automatizirati izvješćivanje. A najkul je što će se cijeli program sastojati od samo 50 redaka koda! Ako prvi put izrađujete bota za Telegram, trebali biste pročitati i ovo pošta.
Ako želimo koristiti uslugu, moramo povezati Google BigQuery API. Da bismo to učinili idemo na Google konzola za razvojne programere i izradite novi projekt (ili odaberite postojeći).
Na upravljačkoj ploči odaberite OMOGUĆI APIS I USLUGE i potražite BigQuery API.
Ova funkcija će vratiti zahtjev kao podatkovni okvir.
Vizualizacija podataka
Za rješavanje ovog problema odaberite matplotlib.
uvesti matplotlib.pyplot kao plt
Potrebno nam je pet parametara, gdje je x podatak osi x, oznaka osi x naslov osi, oznaka osi y, oznaka osi y naslov osi i naziv cijele vizualizacije.
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
Spremite sliku
Sada upotrijebimo dvije funkcije za izradu vizualizacije i njezino spremanje.
Poslat ćemo vam broj objavljenih objava dnevno. Prvo napišemo zahtjev.
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
"""
Upit pomaže u prikupljanju podataka za dva tjedna počevši od 2. prosinca 2018.
Koristimo ovaj datum jer je 2018-12-02 najnoviji podatak zabilježen u bigquery-public-data.stackoverflow.post_history, u drugim slučajevima možete koristiti CURRENT_DATE() da dobijete najnovije podatke.
Pozovite funkciju query_to_bigquery da dobijete podatke.
dataframe = query_to_bigquery(upit)
Zatim koristimo stupac podataka o datumu za x-os i stupac total_posts za y-os.
x = dataframe['date'].tolist()
y = dataframe['total_posts'].tolist()
Vizualiziramo ga pomoću funkcije visualize_bar_chart i spremamo ga kao sliku.
Ovaj kod umotavamo u funkciju koja se zove 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')
Pošalji sliku
Kako biste poslali izvješće primatelju, morate znati parametar chat_id.
Koristimo userinfobot i upišite /start. Bot odgovara potrebnim informacijama, chat_id se nalazi u polju id.
Kreirajmo sada funkciju send_image. Koristit će funkciju get_and_save_image za dohvaćanje i spremanje slike. I onda sve šaljemo na pravi kontakt.