ProHoster > ΠΠ»ΠΎΠ³ > warta internet > Carane utusan laporan prasaja menyang robot. Nulis bot ing Python lan Google BigQuery
Carane utusan laporan prasaja menyang robot. Nulis bot ing Python lan Google BigQuery
Apa sampeyan duwe tugas sing bola-bali saben dina, minggu sawise minggu? Contone, nulis laporan. Sampeyan njaluk data, nganalisa, nggambarake (nggawe grafik, grafik), banjur dikirim menyang bos sampeyan. Nanging apa yen kabeh iki otomatis?
Ing tutorial iki, kita bakal nggawe bot kanggo Telegram sing bakal mbantu ngotomatisasi laporan. Lan sing paling apik yaiku kabeh program bakal kalebu mung 50 baris kode! Yen sampeyan nggawe bot kanggo Telegram sapisanan, sampeyan uga kudu maca iki kirim.
pip3 nginstal google-cloud-bigquery matplotlib numpy panda python-telegram-bot
Nyambungake Google BigQuery API
Yen kita pengin nggunakake layanan kasebut, kita kudu nyambungake Google BigQuery API. Kanggo nindakake iki kita pindhah menyang Konsol Google Developers lan gawe proyek anyar (utawa pilih sing wis ana).
Ing panel kontrol, pilih AKTIFKAN API lan LAYANAN banjur goleki API BigQuery.
Pilih Aktifake kanggo nyambungake API.
Nggawe kunci akun
Ayo menyang maneh Konsol Google Developers, pilih tab Kredensial, Gawe kredensial lan tombol akun Layanan.
Banjur - Akun layanan anyar, lan ketik jeneng ing kolom Jeneng akun layanan.
Saka dhaptar gulung-mudhun Peran, pilih Proyek > Pemilik, banjur Gawe.
Berkas sing bakal diundhuh kanthi otomatis diarani creds.json.
Setel GOOGLE_APPLICATION_CREDENTIALS, nemtokake path menyang creds.json ing terminal.
Fungsi iki bakal ngasilake panjalukan minangka pigura data.
Visualisasi data
Kanggo ngatasi masalah iki, pilih matplotlib.
ngimpor matplotlib.pyplot minangka plt
We kudu limang paramèter, ngendi x data sumbu x, x_label judhul kanggo sumbu, y data sumbu y, y_label judhul kanggo sumbu, lan judhul judhul kabeh visualisasi.
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
Simpen gambar
Saiki ayo gunakake rong fungsi kanggo nggawe visualisasi lan simpen.
Kita bakal ngirim jumlah kiriman sing diterbitake saben dina. Pisanan kita nulis panjaluk.
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
"""
Pitakonan mbantu ngumpulake data sajrone rong minggu wiwit tanggal 2 Desember 2018.
Kita nggunakake tanggal iki amarga 2018-12-02 minangka data paling anyar sing direkam ing bigquery-public-data.stackoverflow.post_history, ing kasus liyane, sampeyan bisa nggunakake CURRENT_DATE () kanggo entuk data paling anyar.
Telpon fungsi query_to_bigquery kanggo entuk data.
kerangka data = query_to_bigquery(query)
Banjur kita nggunakake kolom data tanggal kanggo sumbu-x, lan kolom total_posts kanggo sumbu-y.
x = dataframe['tanggal'].tolist()
y = kerangka data['total_posts'].tolist()
Kita nggambarake nggunakake fungsi visualize_bar_chart lan simpen minangka gambar.
Kita mbungkus kode iki ing fungsi sing diarani 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')
Kirimi gambar
Kanggo ngirim laporan menyang panampa, sampeyan kudu ngerti parameter chat_id.
Kita nggunakake userinfobot lan ketik / miwiti. Bot nanggapi kanthi informasi sing dibutuhake, chat_id ana ing kolom id.
Saiki ayo nggawe fungsi send_image. Bakal nggunakake fungsi get_and_save_image kanggo njupuk lan nyimpen gambar. Banjur kita ngirim kabeh menyang kontak sing bener.