Membuat Monitoring Progress Learner Menggunakan Python, Pandas dan Streamlit
- Habib Abdurrasyid
- 04 Apr, 2022
- · 4 mnt baca
Daftar isi
Kenapa Saya Bikin Ini
Waktu itu saya jadi Academic Program Manager buat program AWS re/Start, dan saya pegang beberapa cohort sekaligus. Tiap cohort punya gradebook Canvas LMS sendiri, dan satu gradebook bisa punya lebih dari 170 kolom dengan data yang campur-campur. Knowledge Check, Lab, nilai, flag completion, semuanya ada di satu file.
Awalnya, mereview tiap cohort secara manual masih oke. Tapi begitu programnya tumbuh jadi 10 cohort atau lebih per batch, cara manual ini mulai makan waktu terlalu banyak dan makin gampang salah.
Akhirnya saya bikin tool-nya sendiri.
Masalahnya di Lapangan
Canvas LMS itu sebenarnya sistem yang bagus. Cuma gradebook hasil ekspornya dirancang supaya lengkap, bukan supaya gampang dibaca. Ini yang saya hadapi tiap minggu:
- Satu file CSV per cohort
- 170+ kolom per file, campur Knowledge Check, Lab, dan lain-lain
- Nggak ada pemisahan yang jelas antara nilai KC, completion Lab, dan data course umum
- Target progress mingguan yang harus dicek satu per satu buat tiap learner
Kalau cohort-nya 10, berarti 10 file dan ratusan baris yang harus dicek manual. Waktu programnya juga jalan di India barengan, totalnya jadi lebih dari 40 cohort. Review manual sudah nggak masuk akal lagi.
Yang Saya Bangun
Saya bikin aplikasi web pakai Python, Pandas, dan Streamlit. Idenya, bikin sesimpel mungkin: upload file, dapat hasil.
Alurnya kayak gini:
graph LR
A[Upload CSVs] --> B[Parse Data]
B --> C[Aggregate KC and Lab]
C --> D[Check Weekly Targets]
D --> E[Download Summary]
Nggak ada setup yang ribet. Yang pakai tool ini adalah program koordinator, bukan engineer, jadi interface-nya harus langsung bisa dipahami.
Yang dilakukan aplikasinya:
- Menerima beberapa upload CSV sekaligus (satu per cohort)
- Otomatis menemukan kolom Knowledge Check dan mem-parsing-nya
- Otomatis menemukan kolom completion Lab dan mem-parsing-nya
- Menghitung progress tiap learner terhadap target mingguan
- Menghasilkan summary per cohort yang rapi dan bisa di-download
Kenapa saya pilih tools membosankan
Saya pilih tools yang sudah saya kenal baik, biar pembangunannya cepat dan maintenance-nya gampang.
- Python buat logika utamanya
- Pandas buat menangani DataFrame 170+ kolom tanpa jadi berantakan
- Streamlit, karena bikin web UI yang jalan pakai Python hitungannya jam, bukan hari
- PythonAnywhere buat hosting, biar siapa pun bisa akses tanpa install apa-apa
Ini bukan stack paling canggih. Tapi memang inilah yang pas buat masalah ini. Tool-nya harus jalan dengan andal dan bisa dipakai rekan tim yang non-teknis.
Satu Tambahan: Leaderboard
Setelah tool utamanya jalan, saya menambahkan leaderboard progress yang bisa dilihat learner, pakai Google Sheets.
Idenya simpel. Learner bisa lihat nilai KC dan Lab mereka sendiri dibandingkan dengan yang lain di cohort-nya. Ini berefek dua hal:
- Mengurangi jumlah pesan reminder yang harus dikirim koordinator
- Memberi learner cara memantau diri sendiri tanpa menunggu diberi tahu perkembangannya
Tambahan kecil, tapi kedua belah pihak diuntungkan.
Dipakainya di mana saja
Tool ini akhirnya dipakai di beberapa batch:
- 3 batch AWS re/Start total
- 10+ cohort di Indonesia
- 40+ cohort di India
Waktu pemrosesan tiap batch turun jauh dibanding cara manual. Waktu yang tersisa itu bisa dipakai koordinator buat benar-benar mendampingi learner, bukan buat ngurus spreadsheet.
Yang Saya Ubah Kalau Membangunnya Lagi
Kalau dilihat balik, ada beberapa hal yang akan saya lakukan berbeda.
Ambil gradebook otomatis. Sekarang masih ada orang yang harus download file dari Canvas lalu meng-upload-nya. Akan lebih baik kalau langsung tarik dari Canvas API.
Chart bawaan. Output-nya CSV yang rapi, tapi buat melihat tren dari waktu ke waktu masih perlu kerja ekstra. Menambahkan chart dasar langsung di aplikasinya akan sangat membantu.
Timeline tracking. Sekarang tool-nya cuma menampilkan kondisi saat ini. Kalau progress dilacak per minggu, learner yang kesulitan akan ketahuan lebih awal.
Buat masalah yang sedang diselesaikan saat itu, tool ini sudah cukup. Saya sendiri lebih suka menyelesaikan bagian yang paling menyakitkan dulu, dan waktu itu bagian yang paling menyakitkan ya laporan per learner itu.