ProHoster > blog > berita internet > Cara mendelegasikan laporan sederhana ke robot. Kami menulis bot dengan Python dan Google BigQuery
Cara mendelegasikan laporan sederhana ke robot. Kami menulis bot dengan Python dan Google BigQuery
Apakah Anda mempunyai tugas yang berulang hari demi hari, minggu demi minggu? Misalnya saja menulis laporan. Anda meminta data, menganalisisnya, memvisualisasikannya (membuat grafik, bagan), dan kemudian mengirimkannya ke atasan Anda. Namun bagaimana jika semua ini dilakukan secara otomatis?
Dalam tutorial ini kita akan membuat bot untuk Telegram yang akan membantu mengotomatiskan pelaporan. Dan yang paling keren adalah keseluruhan program hanya terdiri dari 50 baris kode! Jika Anda membuat bot untuk Telegram untuk pertama kalinya, Anda juga harus membaca yang ini pos.
Jika kita ingin menggunakan layanan ini, kita perlu menghubungkan Google BigQuery API. Untuk melakukan ini kita pergi ke Google Developers Console dan buat proyek baru (atau pilih yang sudah ada).
Di panel kontrol, pilih ENABLE APIS AND SERVICES dan cari BigQuery API.
Pilih Aktifkan untuk menghubungkan API.
Buat kunci akun
Mari kita pergi ke lagi Google Developers Console, pilih tab Kredensial, Buat kredensial, dan Kunci akun layanan.
Lalu - Akun layanan baru, dan masukkan nama di kolom Nama akun layanan.
Dari daftar drop-down Peran, pilih Proyek > Pemilik, lalu Buat.
File yang akan diunduh secara otomatis disebut creds.json.
Setel GOOGLE_APPLICATION_CREDENTIALS, tentukan jalur ke creds.json di terminal.
Fungsi ini akan mengembalikan permintaan sebagai bingkai data.
Memvisualisasikan data
Untuk mengatasi masalah ini, pilih matplotlib.
impor matplotlib.pyplot sebagai plt
Kita membutuhkan lima parameter, dimana x adalah data sumbu x, x_label adalah judul sumbu, y adalah data sumbu y, y_label adalah judul sumbu, dan title adalah judul keseluruhan 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
Simpan gambarnya
Sekarang mari kita gunakan dua fungsi untuk membuat visualisasi dan menyimpannya.
Kami akan mengirimkan jumlah postingan yang diterbitkan setiap hari. Pertama kita menulis permintaan.
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
"""
Kueri tersebut membantu mengumpulkan data selama dua minggu mulai 2 Desember 2018.
Kami menggunakan tanggal ini karena 2018-12-02 adalah data terbaru yang dicatat di bigquery-public-data.stackoverflow.post_history, dalam kasus lain Anda dapat menggunakan CURRENT_DATE() untuk mendapatkan data terbaru.
Panggil fungsi query_to_bigquery untuk mendapatkan data.
kerangka data = query_to_bigquery(kueri)
Kemudian kita gunakan kolom data tanggal untuk sumbu x, dan kolom total_posts untuk sumbu y.
x = kerangka data['tanggal'].tolist()
y = kerangka data['total_posts'].tolist()
Kami memvisualisasikannya menggunakan fungsi visualize_bar_chart dan menyimpannya sebagai gambar.
Kami membungkus kode ini dalam fungsi yang disebut 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')
Kirim gambar
Untuk mengirim laporan ke penerima, Anda perlu mengetahui parameter chat_id.
Gunakan infobot pengguna dan ketik /mulai. Bot merespons dengan informasi yang diperlukan, chat_id terdapat di kolom id.
Sekarang mari kita buat fungsi send_image. Ini akan menggunakan fungsi get_and_save_image untuk mengambil dan menyimpan gambar. Dan kemudian kami mengirimkan semuanya ke kontak yang benar.
Terakhir, kami membuat fungsi lain, main, untuk meluncurkan aplikasi. Jangan lupa ganti YOUR_TOKEN untuk botnya.
Ingat: program ini akan mengirimkan gambar secara otomatis pada waktu yang Anda tentukan. Misalnya, kami akan mengirimkan laporan pada jam sembilan pagi setiap hari.