Otomasi Nilai Mahasiswa dengan Python: Pengalaman Praktis Anak Sistem Informasi

·


1. Awal Mula: Males Ngitung Manual Pakai Excel

Halo teman-teman! Akhir-akhir ini saya lagi sibuk sama proyek kecil-kecilan. Ceritanya, data mentah puluhan mahasiswa, harus dikaliin bobot 10%, 20%, 30%, 40% pakai kalkulator atau Excel manual. Belum lagi kalau ada mahasiswa yang nilainya out of range atau kepencet spasi jadi string, Excel nya langsung error dan bikin pusing.

Sebagai mahasiswa Sistem Informasi, saya nggak mau cuma diam. Kalau di jurusan SI, kita diajarkan bukan cuma coding, tapi juga gimana mengotomatisasi proses bisnis dan mengurangi ketergantungan pada input manual yang rawan human error. Akhirnya, saya putuskan bikin skrip Python yang bisa menghitung nilai secara otomatis, lengkap dengan validasi dan laporan yang rapi.

Proyek ini sederhana, tapi esensinya sangat powerful. Di artikel ini, saya bakal break down semua langkahnya biar teman-teman yang juga maba atau tingkat akhir bisa ikut praktek.


2. Menentukan Bobot dan Logika Grade (Sesuai Aturan Kampus)

Sebelum nyentuh keyboard, kita harus define dulu aturan mainnya. Di kampus saya, perhitungan akhir biasanya menggunakan komponen ini:

KomponenBobot (%)
Kehadiran10%
Tugas20%
UTS30%
UAS40%

Rumusnya gampang:
Nilai Akhir = (Hadir * 0.1) + (Tugas * 0.2) + (UTS * 0.3) + (UAS * 0.4)

Lalu untuk konversi ke huruf (Grade), kita pakai standar yang umum berlaku di Indonesia:

RentangGradePredikat
85 – 100ACumlaude banget
70 – 84BMantap
60 – 69CCukup, aman
50 – 59DHampir mengkhawatirkan
0 – 49EPerlu bimbingan intensif

Saya pilih rentang ini karena lumayan representatif buat studi kasus.


3. Kenapa Saya Pilih Python? (Sudut Pandang Mahasiswa SI)

Anak SI pasti mikir: “Kalo mau bikin gini, kenapa pake Python? Kan Excel juga bisa pake rumus?”

Jawabannya:

  1. Skalabilitas: Kalo datanya 10 mahasiswa, Excel oke. Tapi kalo 1000 mahasiswa dari 10 kelas berbeda, Excel mulai lemot.
  2. Validasi Kuat: Python punya try-except. Kita bisa bikin sistem yang menolak data rusak tanpa bikin aplikasi crash.
  3. Ekstensibilitas: Skrip ini bisa kita sambung ke database MySQL atau kita ubah jadi API pake Flask/Streamlit. Nanti tinggal upload file CSV, selesai.

4. Kode Lengkapnya (Yang Udah Saya Test Jalan)

Saya desain skrip ini dengan satu prinsip penting: Data Input harus divalidasi dulu sebelum diproses. Saya nggak mau program error di tengah jalan cuma gara-gara ada nilai yang keisi huruf.

Berikut kode final yang saya gunakan. Jangan lupa install dulu library tabulate biar output tabelnya aesthetic.

pip install tabulate

Lalu ini dia kode Python-nya:

import csv
from tabulate import tabulate
# Konstanta Bobot
BOBOT_HADIR = 0.10
BOBOT_TUGAS = 0.20
BOBOT_UTS = 0.30
BOBOT_UAS = 0.40
# --- Simulasi Data (Biasanya ini dari CSV atau DB) ---
data_mahasiswa = [
{"nim": "101", "nama": "Andi Pratama", "hadir": 90, "tugas": 85, "uts": 80, "uas": 90},
{"nim": "102", "nama": "Budi Santoso", "hadir": 40, "tugas": 70, "uts": 60, "uas": 55},
{"nim": "103", "nama": "Citra Dewi", "hadir": 100, "tugas": 90, "uts": 85, "uas": 95},
{"nim": "104", "nama": "Dedi Kurniawan", "hadir": 80, "tugas": 50, "uts": 45, "uas": 40},
{"nim": "105", "nama": "Eka Sari", "hadir": 75, "tugas": 0, "uts": 30, "uas": 20},
# Data 'Jebakan' buat ngetes validasi
{"nim": "106", "nama": "Fajar Nugroho", "hadir": "A", "tugas": 80, "uts": 70, "uas": 85}
]
def validasi_nilai(nilai, nim, field):
"""
Fungsi ini saya buat se-spesifik mungkin.
Kalo ada input yang nggak beres, fungsi ini bakal ngasih warning dan return None.
"""
try:
val = float(nilai)
except (ValueError, TypeError):
print(f"[SISTEM] NIM {nim} - Field '{field}' berisi teks ('{nilai}'), BUKAN ANGKA. Data ini dilewati.")
return None
if val < 0 or val > 100:
print(f"[SISTEM] NIM {nim} - Field '{field}' nilainya {val} (di luar 0-100). Data ini dilewati.")
return None
return val
def hitung_grade(na):
if na >= 85:
return "A"
elif na >= 70:
return "B"
elif na >= 60:
return "C"
elif na >= 50:
return "D"
else:
return "E"
def proses_data(data):
laporan = []
for mhs in data:
nim = mhs.get("nim", "Unknown")
nama = mhs.get("nama", "Unknown")
# Panggil fungsi validasi
hadir = validasi_nilai(mhs.get("hadir"), nim, "Hadir")
tugas = validasi_nilai(mhs.get("tugas"), nim, "Tugas")
uts = validasi_nilai(mhs.get("uts"), nim, "UTS")
uas = validasi_nilai(mhs.get("uas"), nim, "UAS")
# Skip jika ada nilai yang None (tidak valid)
if None in [hadir, tugas, uts, uas]:
print(f"⚠️ Data {nama} ({nim}) dilewati karena tidak valid.\n")
continue
# Eksekusi hitungan
nilai_akhir = (hadir * BOBOT_HADIR) + (tugas * BOBOT_TUGAS) + (uts * BOBOT_UTS) + (uas * BOBOT_UAS)
nilai_akhir = round(nilai_akhir, 2)
grade = hitung_grade(nilai_akhir)
laporan.append({
"NIM": nim,
"Nama": nama,
"Hadir": hadir,
"Tugas": tugas,
"UTS": uts,
"UAS": uas,
"Nilai Akhir": nilai_akhir,
"Grade": grade
})
return laporan
def tampilkan_laporan(laporan):
if not laporan:
print("Nggak ada data valid yang bisa ditampilkan.")
return
print("\n" + "="*75)
print("📊 LAPORAN REKAP NILAI AKHIR (OTOMATIS) 📊")
print("="*75)
headers = laporan[0].keys()
table_data = [list(item.values()) for item in laporan]
# Pakai 'grid' biar keliatan kayak tabel di jurnal
print(tabulate(table_data, headers=headers, tablefmt="grid", numalign="center", stralign="center"))
print("="*75 + "\n")
# Save ke CSV. Kenapa CSV? Karena dosen saya sukanya buka pake Excel.
with open('laporan_nilai_final.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.DictWriter(f, fieldnames=headers)
writer.writeheader()
writer.writerows(laporan)
print("--Proyek Alya Salsabila--")
print("✅ Laporan berhasil diexport ke 'laporan_nilai_final.csv' (bisa dibuka pake Excel)")
# --- JALANKAN SKRIP ---
if __name__ == "__main__":
print("🚀 Menjalankan sistem otomasi nilai...")
hasil = proses_data(data_mahasiswa)
tampilkan_laporan(hasil)

5. Breakdown Kode: Yang Paling Saya Tekankan (Validasi!)

Saat presentasi proyek serupa di kelas, dosen Sistem Informasi saya sangat fokus ke bagian validasi. Menurut beliau, sebagai calon analis sistem, kita harus memikirkan worst-case scenario. Pengguna (dosen) tidak selalu teliti, bisa saja mereka memasukkan spasi, huruf ‘A’ di kolom angka, atau bahkan nilai 200.

Di fungsi validasi_nilai, saya menggunakan try-except untuk menangkap data non-angka. Selain itu, saya kasih batasan 0 - 100. Jika ada satu komponen yang tidak valid, sistem akan skip data mahasiswa tersebut dan memberi notifikasi di konsol. Ini lebih baik daripada sistem crash total.

Catatan dari saya: Jika teman-teman ingin lebih advance, kita bisa tambahkan logika untuk replace data null dengan rata-rata kelas, tapi untuk studi kasus kali ini, mending di-skip biar transparan ke dosen.


6. Output yang Dihasilkan (Coba Liat Hasilnya!)

Ketika skrip dijalankan, hasil di terminal akan seperti ini. Perhatikan data Fajar yang nilainya ‘A’ di kolom Hadir berhasil ditolak oleh sistem!

[SISTEM] NIM 106 - Field 'Hadir' berisi teks ('A'), BUKAN ANGKA. Data ini dilewati.
⚠️ Data Fajar Nugroho (106) dilewati karena tidak valid.
===========================================================================
📊 LAPORAN REKAP NILAI AKHIR (OTOMATIS) 📊
===========================================================================
+-------+----------------+---------+---------+---------+---------+----------------+---------+
| NIM | Nama | Hadir | Tugas | UTS | UAS | Nilai Akhir | Grade |
+=======+================+=========+=========+=========+=========+===============+=========+
| 101 | Andi Pratama | 90 | 85 | 80 | 90 | 86.5 | A |
+-------+----------------+---------+---------+---------+---------+----------------+---------+
| 102 | Budi Santoso | 40 | 70 | 60 | 55 | 59 | E |
+-------+----------------+---------+---------+---------+---------+----------------+---------+
| 103 | Citra Dewi | 100 | 90 | 85 | 95 | 91.5 | A |
+-------+----------------+---------+---------+---------+---------+----------------+---------+
| 104 | Dedi Kurniawan | 80 | 50 | 45 | 40 | 48.5 | E |
+-------+----------------+---------+---------+---------+---------+----------------+---------+
| 105 | Eka Sari | 75 | 0 | 30 | 20 | 23.5 | E |
+-------+----------------+---------+---------+---------+---------+----------------+---------+
===========================================================================
✅ Laporan berhasil diexport ke 'laporan_nilai_final.csv' (bisa dibuka pake Excel)

Saya sengaja pilih format tabel grid dari tabulate biar keliatan keren kayak tabel di skripsi. Hehe.


7. Pandangan Mahasiswa SI untuk Pengembangan ke Depan

Proyek ini adalah versi Minimum Viable Product (MVP). Sebagai anak Sistem Informasi, saya sadar bahwa program ini belum selesai. Di benak saya, ada beberapa titik pengembangan yang keren banget untuk diterapkan:

  1. Integrasi dengan Sumber Data: Daripada hardcode data di skrip, saya mau bikin fitur upload file (CSV atau Excel) langsung. Dosen tinggal pilih file, klik run, beres. Ini bisa pake library pandas.
  2. Koneksi ke Database: Karena di SI kita belajar basis data, skrip ini bisa diarahkan untuk menarik data langsung dari MySQL atau PostgreSQL. Jadi semua data tersimpan terpusat dan aman.
  3. Antarmuka Pengguna (GUI): Nggak semua dosen suka ngoprek terminal. Ke depannya, saya mau bungkus skrip ini pake Streamlit (Python web framework). Jadi dosen tinggal buka browser, input data, dan laporan langsung muncul sebagai tabel web + tombol download PDF.
  4. Analisis Statistik: Tambahkan fitur untuk menghitung rata-rata kelas, nilai tertinggi, terendah, dan distribusi grade. Ini sangat membantu dosen untuk mengevaluasi kualitas soal UTS/UAS.

Penutup

Proyek sederhana ini benar-benar mengasah logika saya sebagai mahasiswa SI. Kita belajar bahwa menjadi programmer itu bukan cuma pintar nulis if-else, tapi juga pintar mengantisipasi human error dan mendesain alur sistem yang user-friendly.

Semoga pengalaman saya ini bisa membantu teman-teman yang sedang kebingungan bikin tugas otomasi atau yang pengen membantu dosen tapi bingung mulai dari mana. Jangan sungkan buat komen di bawah, siapa tau kita bisa diskusi buat proyek selanjutnya!

Happy Coding! 🚀


Referensi & Sumber Belajar:

  • Dokumentasi Python try-except untuk Error Handling.
  • Library Tabulate untuk Membuat Tabel di Terminal.
  • Panduan Streamlit untuk Membuat Web App Data Science.

Comments

Leave a Reply

Discover more from Alya Salsabila

Subscribe now to keep reading and get access to the full archive.

Continue reading