Kolom angka punya mean() dan std(); kolom kategori punya pertanyaan yang berbeda: nilai apa yang paling sering muncul? Berapa porsi pesanan rasa Cokelat dibandingkan Stroberi? Method value_counts() menjawabnya dengan menghitung frekuensi setiap nilai unik pada satu kolom. Pada Chapter ini kita memakainya terhadap daftar 15 pesanan es krim, termasuk cara membaca proporsi dan cara menangani baris yang kosong.

Menghitung Frekuensi Setiap Nilai Unik #

Kita mulai dari Series bernama rasa yang berisi catatan 15 pesanan. Satu pesanan tidak mencatat rasanya sama sekali, sehingga nilainya None dan pandas membacanya sebagai NaN. Dari data sekecil ini pun, penghitungan manual sudah merepotkan; pada data ribuan baris, value_counts() menjadi satu-satunya cara yang masuk akal.

python
import pandas as pd

pesanan = pd.Series(
    ["Cokelat", "Vanila", "Cokelat", "Stroberi", "Cokelat",
     "Vanila", "Pandan", "Cokelat", "Vanila", "Stroberi",
     None, "Pandan", "Vanila", "Cokelat", "Vanila"],
    name="rasa",
)

print(pesanan.value_counts())
print()
print(pesanan.value_counts(normalize=True))
print()
print(pesanan.value_counts(dropna=False))

Output yang Dihasilkan:

text
rasa
Cokelat     5
Vanila      5
Stroberi    2
Pandan      2
Name: count, dtype: int64

rasa
Cokelat     0.357143
Vanila      0.357143
Stroberi    0.142857
Pandan      0.142857
Name: proportion, dtype: float64

rasa
Cokelat     5
Vanila      5
Stroberi    2
Pandan      2
NaN         1
Name: count, dtype: int64

Mari kita bedah kode di atas:

  1. Baris 3-8 (pesanan = pd.Series(...)): kita membangun Series dari list 15 pesanan dengan parameter name="rasa", sehingga hasil akhir punya nama kolom yang jelas.
  2. Baris 10 (pesanan.value_counts()): pandas menghitung jumlah kemunculan setiap nilai unik, lalu mengurutkannya dari yang terbanyak; hasilnya Series dengan nama count.
  3. Baris 12 (pesanan.value_counts(normalize=True)): jumlah kemunculan diubah menjadi proporsi dengan nama Series proportion.
  4. Baris 14 (pesanan.value_counts(dropna=False)): baris NaN ikut dihitung dan muncul sebagai baris tersendiri di urutan terakhir.

Hasil pertama menunjukkan Cokelat dan Vanila masing-masing terjual 5 gelas, diikuti Stroberi dan Pandan masing-masing 2 gelas. Total baris yang dihitung adalah 14, bukan 15, karena secara default satu baris NaN dikeluarkan dari penghitungan. Untuk nilai yang jumlahnya sama, pandas mempertahankan urutan kemunculan pertama pada data; Cokelat muncul lebih dulu daripada Vanila, sehingga Cokelat berada di atas.

Proporsi dengan Parameter normalize #

Angka jumlah mentah sulit dibandingkan ketika ukuran data berubah; proporsi memberi gambaran yang stabil. Dengan normalize=True, setiap jumlah dibagi total baris yang tidak kosong, sehingga 0.357143 pada Cokelat berasal dari 5 / 14. Nama Series hasilnya berubah dari count menjadi proportion. Untuk menampilkannya sebagai persentase, kalikan hasilnya dengan 100.

Proporsi membantu ketika kita membandingkan dua periode penjualan dengan volume berbeda. Lima ratus gelas Cokelat pada bulan ramai dan lima puluh gelas pada bulan sepi tidak bisa dibandingkan langsung, tetapi proporsinya bisa. Membaca 0.357143 sebagai “sekitar 35.7 persen pesanan” jauh lebih mudah dikomunikasikan ke tim dibandingkan menyebut jumlah mentahnya.

Menyertakan Nilai Kosong dengan dropna #

Parameter dropna mengatur perlakuan baris kosong. Nilai default True membuat NaN tidak dihitung sama sekali, praktis untuk analisis frekuensi biasa. Ketika kita mengubahnya menjadi False, NaN muncul sebagai baris tersendiri dengan jumlah 1 pada contoh kita, tepat di bawah kategori lainnya karena paling sedikit.

ParameterDefaultEfek
normalizeFalseMengubah hasil dari jumlah menjadi proporsi
dropnaTrueMengeluarkan NaN; False menyertakan baris kosong
ascendingFalseTrue mengurutkan hasil dari jumlah terkecil
binsNoneMembagi data numerik ke dalam interval sebelum dihitung

Baris kosong yang terbaca dari dropna=False biasanya menjadi pemicu pembersihan data sebelum analisis lanjutan. Dokumentasi pandas.Series.value_counts merinci parameter-parameter di atas, dan halaman Essential basic functionality menempatkan value_counts() di antara alat ringkasan bawaan pandas.

value_counts() melengkapi kotak alat statistik kita untuk kolom kategori. Chapter berikutnya sekaligus penutup Section ini, yaitu Statistik Deskriptif, menyatukan hampir semua method yang sudah kita pelajari ke dalam satu panggilan describe().