Analisis Nilai Sekolah
Proyek pertama Abbas sebagai calon data analyst. Analisis nilai akademik kelas Abbas sendiri: siapa yang butuh bantuan, mata pelajaran mana yang perlu perhatian, dan apakah ada korelasi antara kehadiran dan prestasi.
Proyek ini sudah punya versi contoh lengkap pakai dataset dummy: 16 siswa, 5 mata pelajaran, 4 kali ulangan. Materinya bisa dibuka dan dipelajari alurnya sebelum Abbas kerjakan versi asli pakai data kelasnya sendiri:
- Google Sheet: Data Nilai Sekolah (Materi Lengkap - 8 tab): dataset, latihan formula, kunci jawaban, ringkasan pivot, jembatan SQL (QUERY), chart storytelling, dan preview kode Pandas, semua dalam 1 file
- Folder LEARN: kumpulan materi semua proyek P1โP6
Cara mulai: buka Sheet di atas, baca tab Panduan dulu (2 menit), lalu kerjakan tab Latihan_Formula soal demi soal. Jangan lompat ke Kunci_Jawaban sebelum benar-benar coba sendiri minimal 5 menit per soal. Di situ letak belajarnya, bukan di jawabannya.
Pola yang dipakai: 1 pertanyaan dijawab pakai 5 cara berbeda, makin lama makin canggih tapi logikanya sama (filter, group, aggregate, sort). Setiap tahap sengaja pakai tool yang beda supaya Abbas ngerti bahwa fungsi-fungsi ini cuma "kosakata" berbeda untuk pertanyaan yang identik:
- Formula Spreadsheet (tab Latihan_Formula + Kunci_Jawaban):
AVERAGEIFuntuk rata-rata bersyarat,RANKuntuk urutan,CORRELuntuk cek hubungan dua variabel,SPARKLINEuntuk mini-grafik tren dalam satu sel. Ini titik masuk paling ramah karena Abbas sudah biasa pakai Sheets. - Pivot Table (tab Ringkasan_Pivot): meringkas data berdasarkan 2 kriteria sekaligus (Mapel x Ulangan) tanpa nulis formula manual satu-satu. Ini jembatan konsep ke
GROUP BYdi SQL: pivot table sebenarnya adalah GROUP BY yang dibungkus antarmuka drag-and-drop. - SQL (tab Query_SQL): function
QUERY()di Google Sheets memakai bahasa mirip SQL asli (SELECT/WHERE/GROUP BY/ORDER BY). Soal yang identik dengan tab Formula, tapi ditulis sebagai satu baris query, lebih ringkas begitu datanya makin besar. - Python/Pandas (tab Lanjutan_Pandas_Looker): soal yang sama, ditulis ulang pakai
.groupby()dan.corr()di Google Colab. Di sinilah logika yang sama akhirnya jadi kode yang bisa diskalakan ke data jutaan baris, sesuatu yang mustahil dikerjakan manual di spreadsheet. - Dashboard (Looker Studio): sambungkan langsung ke tab Data, chart update otomatis tanpa nulis ulang formula atau kode setiap kali datanya berubah. Ini "muara" dari seluruh proses, biar hasil analisis bisa dilihat orang lain tanpa perlu buka spreadsheet.
Fungsi baru dibanding contoh P2 (Penjualan Kantin): CORREL, dipakai buat cek apakah siswa yang lebih rajin hadir cenderung nilainya lebih baik. Di dataset contoh, angka korelasinya sekitar 0.68 (cukup kuat dan searah). Coba cek juga apakah pola serupa muncul di data kelas Abbas yang sebenarnya. CORREL ini jembatan langsung ke materi Bulan 7 (Statistik Inferensial), tempat Abbas akan belajar seberapa yakin kita boleh percaya angka korelasi seperti ini. Detail lengkap tiap tahap, termasuk urutan mengerjakan yang disarankan, ada di tab Panduan pada Sheet di atas.
- Mata pelajaran apa yang rata-rata nilainya paling rendah di kelas?
- Apakah siswa yang hadir lebih sering cenderung punya nilai lebih baik?
- Siapa 5 siswa yang paling butuh bimbingan tambahan?
- Apa distribusi nilai untuk setiap mata pelajaran?
- Apakah ada outlier yang aneh (nilai sangat tinggi atau sangat rendah)?
Deliverable (output wajib)
- Notebook Google Colab yang berjalan penuh tanpa error
- Minimal 5 visualisasi (histogram, bar chart, scatter plot)
- Laporan insight 200 kata
- CSV data yang sudah dibersihkan
Dataset
Tab Data di Google Sheet pada bagian atas halaman ini sudah berisi 320 baris nilai dummy siap pakai: 16 siswa, 5 mata pelajaran, 4 kali ulangan (kolom: Nama, Mapel, Ulangan_Ke, Nilai, Kehadiran_Persen). Download tab itu ke CSV (File > Download > Comma Separated Values) kalau mau langsung dipakai di Colab.
Buat dataset sendiri: kumpulkan nilai 15-25 siswa fiktif dengan 5 mata pelajaran dan data kehadiran. Atau gunakan data nilai kelas Abbas yang sebenarnya (dengan izin). Kalau pakai data siswa asli, kerjakan di sheet privat, jangan di folder publik ini.
Scaffold Kode
Ini kerangka awal. Abbas kembangkan sendiri sesuai kebutuhan analisis.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Load data
df = pd.read_csv('nilai_kelas.csv')
# EDA
print(df.info())
print(df.describe())
# Visualisasi distribusi per mata pelajaran
fig, axes = plt.subplots(2, 3, figsize=(15, 8))
mapel = ['matematika', 'bahasa_indo', 'bahasa_ing', 'biologi', 'fisika']
for i, m in enumerate(mapel):
ax = axes[i//3, i%3]
ax.hist(df[m], bins=8, color='steelblue', edgecolor='white')
ax.axvline(df[m].mean(), color='red', linestyle='--', label='Mean')
ax.set_title(m.replace('_', ' ').title())
ax.legend()
plt.tight_layout()
plt.show()
# Siapa yang butuh bimbingan?
df['rata_rata'] = df[mapel].mean(axis=1)
butuh_bimbingan = df[df['rata_rata'] < 70].sort_values('rata_rata')
print("Siswa yang butuh bimbingan:")
print(butuh_bimbingan[['nama', 'rata_rata']])
Ini bukan pengganti scaffold di atas. Scaffold di atas pakai data format lebar (1 siswa = 1 baris, tiap mapel jadi kolom terpisah). Versi ini pakai format panjang (1 baris = 1 nilai), lebih cocok untuk latihan groupby() dan sejalan dengan tab Data di Sheet contoh.
import pandas as pd
df = pd.read_csv("nilai_sekolah.csv") # export tab "Data" di Sheet ke CSV dulu
# rata-rata nilai per mapel, cari yang paling rendah
df.groupby("Mapel")["Nilai"].mean().sort_values()
# rata-rata nilai per siswa, 5 yang paling butuh bimbingan
rata_siswa = df.groupby("Nama")["Nilai"].mean().sort_values()
rata_siswa.head(5)
# korelasi kehadiran vs rata-rata nilai per siswa
kehadiran = df.groupby("Nama")["Kehadiran_Persen"].mean()
kehadiran.corr(rata_siswa)
# tren rata-rata nilai per ulangan
df.groupby("Ulangan_Ke")["Nilai"].mean().plot(kind="line", title="Tren Rata-rata Nilai per Ulangan")
Catatan: di Jupyter/Colab, cuma baris terakhir dalam satu cell yang otomatis ditampilkan hasilnya. Kalau mau lihat semua hasil sekaligus, pecah jadi cell terpisah per soal, atau bungkus tiap baris dengan print().
- Apa yang Abbas harapkan akan ditemukan? Tulis hipotesis awal sebelum melihat data.
- Siapa yang akan membaca hasil analisis ini? Bagaimana cara penyajian yang paling tepat untuk mereka?
- Apa yang akan Abbas lakukan jika data tidak mendukung hipotesis awal?