Frekuensi menghitung kemunculan kategori; distribusi memetakan sebaran angka. Dua pertanyaan kuncinya: nilai-nilai berkumpul di mana, dan bagaimana penyebarannya ke kiri-kanan titik kumpul itu. Rata-rata saja bisa menyesatkan — satu pelanggan yang memesan katering kampus bisa menarik rata-rata transaksi naik jauh melebihi pengalaman pelanggan biasa. Pada chapter ini kita membaca bentuk sebaran data Toko Kopi Kita: rentang, kuartil, pembinningan dengan pd.cut(), dan cara mengenali sebaran miring dari perbedaan rata-rata dengan median.
Titik Ringkas Sebaran: Rentang dan Kuartil #
Kita memakai nilai 20 transaksi (dalam ribuan rupiah) yang dicatat kasir selama sepekan:
import pandas as pd
nilai = pd.Series(
[24, 28, 20, 48, 24, 40, 20, 24, 56, 28,
20, 48, 24, 28, 20, 96, 24, 120, 28, 20],
name="nilai_ribu",
)
print("Jumlah data :", nilai.count())
print("Minimum :", nilai.min())
print("Maksimum :", nilai.max())
print("Median :", nilai.median())
print("Rata-rata :", nilai.mean())
print("Kuartil 1 :", nilai.quantile(0.25))
print("Kuartil 3 :", nilai.quantile(0.75))Output yang Dihasilkan:
Jumlah data : 20
Minimum : 20
Maksimum : 120
Median : 26.0
Rata-rata : 37.0
Kuartil 1 : 23.0
Kuartil 3 : 42.0Tujuh angka tersebut adalah peta ringkas sebaran. Minimum-maksimum memberi rentang 20 sampai 120 ribu rupiah; kuartil 1 dan 3 membatasi wilayah yang menampung separuh data di tengah; median menandai titik tengah urutan. Perhatikan hubungan yang mencurigakan: rata-rata 37 jauh di atas median 26. Separuh transaksi bernilai 26 ribu ke bawah, tetapi rata-ratannya terseret ke atas — oleh siapa? Jawabannya ada pada dua transaksi besar: 96 dan 120 ribu.
Mengenal Kemiringan dari Mean dan Median #
Ketika rata-rata dan median berjauhan, data tidak bersebar simetris. Ada tiga bentuk dasar sebaran yang perlu kita kenali:
| Bentuk | Ciri | Contoh di Toko Kopi Kita |
|---|---|---|
| Simetris | mean ≈ median; data berimbang di kiri-kanan | Nilai rating pelanggan yang menumpuk di tengah skala 1-5 |
| Miring kanan (positif) | mean > median; ekor panjang ke kanan | Nilai transaksi: mayoritas kecil, sedikit katering besar |
| Miring kiri (negatif) | mean < median; ekor panjang ke kiri | Skor kepuasan: hampir semua tinggi, sedikit sangat rendah |
Sebaran transaksi kita termasuk miring kanan: 14 dari 20 transaksi bernilai 30 ribu ke bawah, sementara dua transaksi terbesar (96 dan 120) menarik rata-rata sampai 37. Pada data seperti ini median adalah ringkasan yang lebih mewakili “transaksi yang biasa terjadi” — satu transaksi ekstrem menggeser mean jauh, tetapi nyaris tidak menggeser median.
Aturan praktisnya: laporkan median (beserta kuartil) saat bentuk sebaran miring, dan gunakan mean saat sebaran simetris. Kita akan lihat lagi dampak nilai ekstrem ini secara eksplisit pada chapter Analisis Data Numerik.
Membagi Menjadi Interval dengan pd.cut #
Melihat angka satu per satu melelahkan; membaginya menjadi beberapa interval membuat polanya terlihat. Fungsi pd.cut() memotong kolom numerik menjadi kelompok interval yang berurutan:
import pandas as pd
# Deret yang sama dengan blok sebelumnya, dibangun lagi agar blok mandiri.
nilai = pd.Series(
[24, 28, 20, 48, 24, 40, 20, 24, 56, 28,
20, 48, 24, 28, 20, 96, 24, 120, 28, 20],
name="nilai_ribu",
)
interval = pd.cut(nilai, bins=[0, 25, 50, 100, 150])
frekuensi = interval.value_counts(sort=False)
print(frekuensi)
print()
print("Proporsi tiap interval:")
print((frekuensi / len(nilai)).round(2))Output yang Dihasilkan:
nilai_ribu
(0, 25] 10
(25, 50] 7
(50, 100] 2
(100, 150] 1
Name: count, dtype: int64
Proporsi tiap interval:
nilai_ribu
(0, 25] 0.50
(25, 50] 0.35
(50, 100] 0.10
(100, 150] 0.05
Name: count, dtype: float64Mari kita baca hasil pemotongannya:
bins=[0, 25, 50, 100, 150]mendefinisikan empat batas interval: 0-25, 25-50, 50-100, dan 100-150 (ribu rupiah). Tanda kurung siku vs bulat pada label(0, 25]berarti 25 masuk ke interval pertama — batas atas selalu ikut ke interval di bawahnya.value_counts(sort=False)menjaga urutan interval dari kecil ke besar. Hasilnya 10, 7, 2, 1: semakin besar nilainya, semakin sedikit transaksinya — persis pola ekor panjang ke kanan.- Proporsi interval menegaskan bentuknya: separuh transaksi (50%) jatuh pada interval pertama, dan hanya 5% yang melewati 100 ribu.
Pilihan batas interval menentukan cerita yang terbaca. Batas yang terlalu rapat menghasilkan banyak interval berisi satu-dua data; batas yang terlalu renggang menyembunyikan detail. Batas yang bermakna bagi bisnis — misalnya 25 ribu sebagai harga satu menu — lebih baik daripada batas otomatis yang tidak berarti apa pun.
Melihat Sebaran dengan Histogram #
Angka-angka di atas menjadi lebih mudah dirasakan dalam bentuk grafik. Histogram menggambar frekuensi tiap interval sebagai batang — bentuk pembinningan yang sama dengan pd.cut(), tetapi divisualkan:
import matplotlib.pyplot as plt
nilai = [24, 28, 20, 48, 24, 40, 20, 24, 56, 28,
20, 48, 24, 28, 20, 96, 24, 120, 28, 20]
plt.hist(nilai, bins=[0, 25, 50, 100, 150], edgecolor="black")
plt.xlabel("Nilai transaksi (ribu rupiah)")
plt.ylabel("Jumlah transaksi")
plt.title("Sebaran nilai transaksi Toko Kopi Kita")
plt.show()Grafik yang terbentuk menampilkan empat batang dengan tinggi yang menurun tajam dari kiri: batang pertama (0-25 ribu) tertinggi dengan sekitar sepuluh transaksi, disusul batang kedua (25-50 ribu), lalu dua batang yang nyaris sejajar dengan dasar grafik di kanan. Profil “tinggi di kiri, berekor ke kanan” inilah wujud visual sebaran miring kanan — dua transaksi katering tampil sebagai batang kecil yang terpisah jauh di ujung kanan.
Satu bentuk lain yang perlu dikenali lewat histogram: sebaran multimodal — dua puncak atau lebih. Distribusi jam kunjungan kafe biasanya bermacam ini: satu puncak di pagi hari (pekerja bawa pulang) dan satu puncak lagi di sore hari (pelanggan nongkrong). Membaca dua puncak sebagai satu rata-rata tunggal adalah cara pasti menghasilkan angka yang tidak mewakili siapa pun.
Rangkuman #
- Rentang (min-maks) dan kuartil memetakan sebaran tanpa terpengaruh nilai ekstrem; median menandai titik tengah urutan data.
- Mean yang menjauh dari median adalah tanda sebaran miring: mean > median berarti miring kanan (ekor ke nilai besar), mean < median berarti miring kiri.
pd.cut()membagi data numerik menjadi interval;value_counts(sort=False)menghitung frekuensinya dalam urutan interval.- Histogram memvisualkan frekuensi interval; puncak tunggal, ekor panjang, dan puncak ganda (multimodal) adalah tiga bentuk yang paling sering ditemui.
Nilai transaksi yang miring kanan tadi mengingatkan kita bahwa satu kolom numerik jarang berdiri sendiri — nilai transaksi berpasangan dengan menu, jam, dan pelanggan. Bagaimana kita merangkum kolom kategorikal secara utuh, termasuk membersihkan label yang tidak konsisten? Itu tema chapter berikutnya, Analisis Data Kategorikal .