Lingkungan kerja dari chapter Persiapan Python sudah siap, tetapi kita belum membutuhkan satu pustaka eksternal pun untuk statistik dasar. Python membawa module statistics di dalam instalasi standarnya: mean, median, modus, variansi, kuartil, korelasi, sampai distribusi normal tersedia begitu interpreter berjalan. Chapter ini menghitung ulang seluruh ukuran dari Section Statistika Deskriptif pada dataset sepuluh siswa (68, 75, 75, 81, 84, 88, 90, 92, 97, 70), menambah korelasi Pearson dan peluang normal, lalu menutup dengan satu skrip laporan utuh yang dapat Anda jalankan dan modifikasi.
Module statistics Tanpa Instalasi #
Module statistics adalah bagian standard library — tidak ada pip install, tidak ada dependensi, dan kodenya dapat berjalan pada instalasi Python apa pun. Untuk data berbentuk list (puluhan hingga ribuan angka), module ini sepenuhnya memadai. Sebuah keunggulan teknisnya: perhitungan pada data integer memakai pecahan eksak secara internal, sehingga mean dari data bulat tidak mengalami galat pembulatan di tengah jalan. Dokumentasi resminya lengkap di docs.python.org/3/library/statistics
— rujukan pertama saat kita lupa nama function.
Tendensi Sentral: mean, median, dan modus #
Tiga ukuran pemusatan dari chapter Mean, Median, dan Modus masing-masing punya pasangan function:
import statistics
nilai = [68, 75, 75, 81, 84, 88, 90, 92, 97, 70]
print("fmean :", statistics.fmean(nilai))
print("mean :", statistics.mean(nilai))
print("median :", statistics.median(nilai))
print("median 3 data :", statistics.median([75, 68, 81]))
print("mode :", statistics.mode(nilai))
print("multimode :", statistics.multimode(nilai))
print("mode 3 data :", statistics.mode([70, 80, 90]))
print("multimode 3 :", statistics.multimode([70, 80, 90]))Output yang Dihasilkan:
fmean : 82.0
mean : 82
median : 82.5
median 3 data : 75
mode : 75
multimode : [75]
mode 3 data : 70
multimode 3 : [70, 80, 90]Mari kita bedah hasilnya:
fmean(nilai)= 82.0: versi mean yang selalu mengembalikan float dan lebih cepat untuk data besar; hasil numeriknya sama denganmean.mean(nilai)= 82: pada data integer, module memakai pecahan eksak sehingga hasilnya tepat — jumlah 820 dibagi 10.median(nilai)= 82.5: jumlah data genap (n = 10) membuat function merata-ratakan dua nilai tengah 81 dan 84, sesuai aturan chapter Median; contoh tiga data menunjukkan kasus ganjil yang langsung mengambil nilai tengah 75.mode(nilai)= 75: satu-satunya nilai yang muncul dua kali;multimodemelaporkannya sebagai list[75].mode([70, 80, 90])= 70 danmultimode=[70, 80, 90]: ketika seluruh nilai sama sering muncul,modemengambil yang pertama ditemui, sedangkanmultimodemelaporkan seluruh kandidatnya.
Sebaran: variance, stdev, dan kuartil #
Pilihan function sebaran mengikuti satu pertanyaan dari chapter Varians: apakah data adalah sampel atau populasi? variance dan stdev memakai pembagi n − 1; pvariance dan pstdev memakai pembagi n:
import statistics
nilai = [68, 75, 75, 81, 84, 88, 90, 92, 97, 70]
print("variance (n-1) :", statistics.variance(nilai))
print("stdev (n-1) :", statistics.stdev(nilai))
print("pvariance (n) :", statistics.pvariance(nilai))
print("pstdev (n) :", statistics.pstdev(nilai))
print()
q_incl = statistics.quantiles(nilai, n=4, method="inclusive")
q_excl = statistics.quantiles(nilai, n=4, method="exclusive")
print("kuartil inclusive :", q_incl)
print("kuartil exclusive :", q_excl)Output yang Dihasilkan:
variance (n-1) : 96.44444444444444
stdev (n-1) : 9.820613241770824
pvariance (n) : 86.8
pstdev (n) : 9.316651759081692
kuartil inclusive : [75.0, 82.5, 89.5]
kuartil exclusive : [73.75, 82.5, 90.5]Pada dataset ini variansi sampel 96.44 melawan variansi populasi 86.8 — pembagi 9 melawan pembagi 10, dan keduanya sah selama kita menyebut versinya. Untuk kuartil, parameter n=4 meminta data dibagi empat sehingga function mengembalikan tiga titik potong Q1, Q2, Q3. Metode exclusive memakai rumus posisi (n + 1) × k/4 persis seperti hitungan manual chapter Kuartil dan Persentil — itulah mengapa Q1-nya 73.75 dan Q3-nya 90.5. Metode inclusive memakai skala posisi 1 + (n − 1) × k/4 sehingga hasilnya 75.0, 82.5, 89.5; metode ini penting karena cocok dengan default NumPy yang kita temui di chapter berikutnya. Q2 pada kedua metode 82.5, sama dengan median.
Korelasi Pearson dan Distribusi Normal #
Dataset kita kini diperluas: sepuluh siswa yang sama juga mengikuti ulangan Bahasa Indonesia dengan nilai 70, 78, 74, 79, 85, 82, 88, 90, 94, 72 (mean 81.2). Function correlation(x, y) menghitung koefisien Pearson r, sedangkan class NormalDist membawa mesin peluang distribusi normal dari chapter Distribusi Normal:
import statistics
from statistics import NormalDist
matematika = [68, 75, 75, 81, 84, 88, 90, 92, 97, 70]
bahasa = [70, 78, 74, 79, 85, 82, 88, 90, 94, 72]
r = statistics.correlation(matematika, bahasa)
print("r matematika-bahasa :", round(r, 4))
print()
normal = NormalDist(mu=82, sigma=10)
print("P(X <= 92) :", round(normal.cdf(92), 4))
print("P(X > 92) :", round(1 - normal.cdf(92), 4))
baku = NormalDist()
print("z batas 97.5% :", round(baku.inv_cdf(0.975), 4))
sampel = NormalDist(70, 10).samples(5, seed=42)
print("5 sampel :", [round(x, 2) for x in sampel])Output yang Dihasilkan:
r matematika-bahasa : 0.9714
P(X <= 92) : 0.8413
P(X > 92) : 0.1587
z batas 97.5% : 1.96
5 sampel : [68.56, 68.27, 68.89, 77.02, 68.72]Mari kita bedah hasilnya:
- r = 0.9714: korelasi positif sangat kuat — siswa dengan nilai Matematika tinggi cenderung juga memperoleh nilai Bahasa Indonesia tinggi; membaca dan menafsirkan angka r dibahas tuntas pada chapter Korelasi.
- P(X ≤ 92) = 0.8413: nilai 92 berada satu sigma di atas mean 82 (z = 1), dan luas kurva normal sampai z = 1 memang 0.8413; sisanya di ekor kanan 0.1587.
- z batas 97.5% = 1.96:
inv_cdfadalah kebalikan daricdf— angka 1.96 ini sama dengan nilai kritis pada tabel chapter Confidence Interval. - 5 sampel: method
samples()menarik lima nilai acak dari distribusi bermean 70 dan sigma 10; parameterseed=42membuat hasil dapat direproduksi, mengikuti aturan determinisme di seluruh course.
Ringkasan Function dan Padanannya #
| Function | Padanan konsep di course |
|---|---|
mean(data), fmean(data) | Mean (Section Statistika Deskriptif) |
median(data) | Median, termasuk data genap |
mode(data), multimode(data) | Modus dan data multimodal |
variance(data), stdev(data) | Varians dan Standar Deviasi versi sampel |
pvariance(data), pstdev(data) | kedua versi populasi |
quantiles(data, n=4, method=...) | Kuartil dan Persentil |
correlation(x, y) | Korelasi Pearson |
linear_regression(x, y) | Simple Linear Regression (dipakai chapter Regresi dengan Python) |
NormalDist(mu, sigma) | Distribusi Normal dan z-score |
Kapan Python Standar Cukup #
Aturan praktisnya sederhana. Module statistics menangkupi kebutuhan saat data berupa satu list dan analisis berupa ukuran tunggal: laporan ulangan satu kelas, ringkasan penjualan bulanan, pemeriksaan cepat sebaran. Pindah ke NumPy ketika data berupa tabel angka besar atau membutuhkan operasi per baris dan kolom; ke SciPy ketika analisis membutuhkan distribusi lanjutan atau pengujian hipotesis; ke pandas ketika data berlabel dan dibaca dari file. Seluruh perpindahan itu tetap memakai konsep yang sudah dihitung manual di section teori — hanya mesin hitungnya yang berganti.
Skrip Lengkap: analisis_nilai.py #
Seluruh function di atas dirangkai menjadi satu skrip laporan. Simpan sebagai analisis_nilai.py di folder kerja Anda, lalu jalankan dengan python3 analisis_nilai.py:
import statistics
nilai = [68, 75, 75, 81, 84, 88, 90, 92, 97, 70]
q1, q2, q3 = statistics.quantiles(nilai, n=4, method="inclusive")
iqr = q3 - q1
print("=" * 38)
print("Laporan Statistik Nilai Matematika")
print("=" * 38)
print(f"Banyak siswa : {len(nilai)}")
print(f"Nilai terendah : {min(nilai)}")
print(f"Nilai tertinggi : {max(nilai)}")
print(f"Mean : {statistics.mean(nilai):.2f}")
print(f"Median : {statistics.median(nilai):.2f}")
print(f"Modus : {statistics.multimode(nilai)}")
print(f"Stdev (sampel) : {statistics.stdev(nilai):.2f}")
print(f"Q1 : {q1:.2f}")
print(f"Q2 : {q2:.2f}")
print(f"Q3 : {q3:.2f}")
print(f"IQR : {iqr:.2f}")Output yang Dihasilkan:
======================================
Laporan Statistik Nilai Matematika
======================================
Banyak siswa : 10
Nilai terendah : 68
Nilai tertinggi : 97
Mean : 82.00
Median : 82.50
Modus : [75]
Stdev (sampel) : 9.82
Q1 : 75.00
Q2 : 82.50
Q3 : 89.50
IQR : 14.50Skrip memakai metode inclusive agar konsisten dengan default NumPy pada chapter berikutnya; menggantinya ke "exclusive" mengubah Q1 menjadi 73.75, Q3 menjadi 90.5, dan IQR menjadi 16.75 — perbandingan yang menegaskan pesan chapter Kuartil dan Persentil: sebutkan metode saat melaporkan kuartil. Baris IQR dihitung dari nilai kuartil penuh sebelum pemformatan, mengikuti kebiasaan menyimpan nilai penuh lalu membulatkan hanya saat mencetak.
Module statistics menyelesaikan seluruh hitungan dengan benar, tetapi setiap operasinya tetap memproses list demi list. Ketika data tumbuh menjadi matriks nilai lintas kelas, array NumPy mengambil alih dengan model komputasi yang jauh lebih ringkas — materi chapter Statistik dengan NumPy.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
analisis_nilai.py
Unduh berkasimport statistics
nilai = [68, 75, 75, 81, 84, 88, 90, 92, 97, 70]
q1, q2, q3 = statistics.quantiles(nilai, n=4, method="inclusive")
iqr = q3 - q1
print("=" * 38)
print("Laporan Statistik Nilai Matematika")
print("=" * 38)
print(f"Banyak siswa : {len(nilai)}")
print(f"Nilai terendah : {min(nilai)}")
print(f"Nilai tertinggi : {max(nilai)}")
print(f"Mean : {statistics.mean(nilai):.2f}")
print(f"Median : {statistics.median(nilai):.2f}")
print(f"Modus : {statistics.multimode(nilai)}")
print(f"Stdev (sampel) : {statistics.stdev(nilai):.2f}")
print(f"Q1 : {q1:.2f}")
print(f"Q2 : {q2:.2f}")
print(f"Q3 : {q3:.2f}")
print(f"IQR : {iqr:.2f}")