Menyajikan dan Menyimpulkan · Pelajaran 9 dari 9
Proyek: menganalisis nilai ujian
11 menit baca · BelajarCode
Saatnya menggabungkan semuanya. Data berikut adalah nilai ujian dua kelas beserta jam belajar mandiri per minggu yang dilaporkan siswa. Datanya belum bersih.
Data dan pembersihan
1import csv2import io3import statistics as st45TEKS = """nama,kelas,mtk,ipa,jam_belajar6Andi,XI-1,78,72,47Bela,XI-1,92,88,78Citra,xi-1,65,70,29Dimas,XI-2,55,61,110Eka,XI-2,88,90,611Fajar,XI-2,,75,312Gita,XI-1,81,79,513Hadi,XI-2,70,68,314Indah,XI-1,95,93,815Joko,XI-2,62,58,216Kirana,XI-1,74,80,417Lukman,XI-2,84,82,5"""1819siswa = []20for b in csv.DictReader(io.StringIO(TEKS)):21 if not b["mtk"] or not b["ipa"]:22 print("Dilewati karena nilai kosong:", b["nama"])23 continue24 mtk, ipa = int(b["mtk"]), int(b["ipa"])25 siswa.append({26 "nama": b["nama"],27 "kelas": b["kelas"].upper(),28 "mtk": mtk,29 "ipa": ipa,30 "rata": (mtk + ipa) / 2,31 "jam": int(b["jam_belajar"]),32 })33print("Data bersih:", len(siswa), "siswa")3435print("\nRingkasan per mapel")36for mapel in ["mtk", "ipa"]:37 n = [s[mapel] for s in siswa]38 print(f"{mapel}: rata-rata {st.mean(n):.1f}, median {st.median(n)}, "39 f"simpangan baku {st.stdev(n):.1f}, terendah {min(n)}, tertinggi {max(n)}")4041print("\nPer kelas")42for kelas in sorted({s["kelas"] for s in siswa}):43 r = [s["rata"] for s in siswa if s["kelas"] == kelas]44 print(f"{kelas}: {len(r)} siswa, rata-rata {st.mean(r):.1f}")4546print("\nTiga besar")47for posisi, s in enumerate(sorted(siswa, key=lambda s: s["rata"], reverse=True)[:3], start=1):48 print(f"{posisi}. {s['nama']} ({s['kelas']}) {s['rata']}")4950jam = [s["jam"] for s in siswa]51rata = [s["rata"] for s in siswa]52print("\nKorelasi jam belajar dan rata-rata nilai:", round(st.correlation(jam, rata), 2))Dilewati karena nilai kosong: Fajar Data bersih: 11 siswa Ringkasan per mapel mtk: rata-rata 76.7, median 78, simpangan baku 12.8, terendah 55, tertinggi 95 ipa: rata-rata 76.5, median 79, simpangan baku 11.6, terendah 58, tertinggi 93 Per kelas XI-1: 6 siswa, rata-rata 80.6 XI-2: 5 siswa, rata-rata 71.8 Tiga besar 1. Indah (XI-1) 94.0 2. Bela (XI-1) 90.0 3. Eka (XI-2) 89.0 Korelasi jam belajar dan rata-rata nilai: 0.98
Laporan singkat
- Data mentah berisi 12 siswa. Satu siswa (Fajar) dikeluarkan karena nilai matematikanya kosong, dan satu penulisan kelas ("xi-1") diseragamkan.
- Rata-rata mtk dan ipa hampir sama (sekitar 76,5). Penyebaran nilai mtk sedikit lebih besar.
- Rata-rata kelas XI-1 (80,6) lebih tinggi daripada XI-2 (71,8), tetapi jumlah siswanya kecil, jadi perbedaan ini belum tentu berlaku untuk angkatan lain.
- Jam belajar mandiri berkorelasi sangat kuat dengan rata-rata nilai (r = 0,98) pada data ini. Ini hubungan, belum tentu sebab-akibat, dan jam belajar dilaporkan sendiri oleh siswa sehingga bisa kurang tepat.
Pisahkan temuan dan tafsiran
Dalam laporan, tulis temuan (angka yang dihitung) terpisah dari tafsiran (dugaanmu tentang penyebabnya). Pembaca berhak tahu mana yang fakta dan mana yang pendapat.
Cek pemahaman
Kenapa laporan menyebutkan bahwa jam belajar "dilaporkan sendiri oleh siswa"?
Latihan
Siswa yang perlu pendampingan
Dari data bersih di atas, tampilkan siswa yang rata-ratanya di bawah 70 atau salah satu nilainya di bawah 60, lengkap dengan alasannya. Siswa ini bisa diprioritaskan untuk kelas pendampingan.
Pembahasan
1siswa = [2 {"nama": "Andi", "mtk": 78, "ipa": 72}, {"nama": "Bela", "mtk": 92, "ipa": 88},3 {"nama": "Citra", "mtk": 65, "ipa": 70}, {"nama": "Dimas", "mtk": 55, "ipa": 61},4 {"nama": "Eka", "mtk": 88, "ipa": 90}, {"nama": "Gita", "mtk": 81, "ipa": 79},5 {"nama": "Hadi", "mtk": 70, "ipa": 68}, {"nama": "Indah", "mtk": 95, "ipa": 93},6 {"nama": "Joko", "mtk": 62, "ipa": 58}, {"nama": "Kirana", "mtk": 74, "ipa": 80},7 {"nama": "Lukman", "mtk": 84, "ipa": 82},8]910for s in siswa:11 alasan = []12 rata = (s["mtk"] + s["ipa"]) / 213 if rata < 70:14 alasan.append(f"rata-rata {rata}")15 for mapel in ["mtk", "ipa"]:16 if s[mapel] < 60:17 alasan.append(f"{mapel} {s[mapel]}")18 if alasan:19 print(s["nama"], "-", ", ".join(alasan))Citra - rata-rata 67.5 Dimas - rata-rata 58.0, mtk 55 Hadi - rata-rata 69.0 Joko - rata-rata 60.0, ipa 58
Menyertakan alasan membuat guru tahu bantuan apa yang dibutuhkan setiap siswa, bukan hanya siapa yang nilainya rendah.
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.