TL;DR
Pandas cut dan qcut dipakai buat binning, yaitu mengubah data numerik jadi beberapa kelompok. cut membagi berdasarkan rentang nilai yang kamu tentukan sendiri, sedangkan qcut membagi berdasarkan kuantil supaya tiap kelompok isinya sama banyak. Pakai cut buat batas bisnis yang jelas, qcut buat segmen yang seimbang.
Pandas cut dan qcut dipakai buat binning, yaitu mengubah angka yang berderet jadi beberapa kelompok atau kategori. cut membagi berdasarkan rentang nilai yang kamu tentukan, sedangkan qcut membagi berdasarkan kuantil supaya tiap kelompok isinya sama banyak.
Sering butuh ini pas mau bikin segmen. Umur jadi kelompok usia, nominal belanja jadi kategori kecil-sedang-besar, skor jadi grade A sampai E.
Di sini aku jelasin dua fungsi ini, bedanya, dan kapan pilih yang mana. Contohnya segmentasi pelanggan toko.
Binning adalah proses mengelompokkan nilai numerik yang kontinu jadi sejumlah kategori. Misalnya nominal transaksi dari Rp 5 ribu sampai Rp 2 juta dipadatkan jadi tiga label: kecil, sedang, besar. Pandas nyediain dua alat buat ini, cut dan qcut, dengan cara bagi yang beda.
Kenapa perlu? Data mentah yang terlalu detail susah dianalisis. Setelah dikelompokkan, kamu bisa hitung berapa pelanggan di tiap segmen dan lihat polanya.
cut membagi data berdasarkan batas nilai yang kamu tetapkan sendiri. Kamu kasih daftar titik potong, lalu pandas taruh tiap nilai ke bin yang sesuai. Cocok kalau kamu udah punya patokan yang jelas, misalnya kelompok umur atau rentang harga.
import pandas as pd
df = pd.DataFrame({'belanja': [15000, 85000, 250000, 600000, 1500000]})
df['segmen'] = pd.cut(
df['belanja'],
bins=[0, 50000, 300000, 2000000],
labels=['kecil', 'sedang', 'besar']
)
print(df)
Batasnya kamu yang atur: 0 sampai 50 ribu jadi kecil, sampai 300 ribu jadi sedang, sisanya besar. Hasilnya kolom kategori yang rapi dan gampang dibaca.
Kamu juga bisa kasih bins berupa satu angka, misalnya bins=4. Pandas bakal bagi rentang jadi 4 bagian sama lebar secara otomatis.
qcut membagi data berdasarkan kuantil, jadi tiap bin isinya jumlah baris yang kurang lebih sama. Kamu gak nentuin batas nilai, cukup nentuin berapa kelompok. Pandas yang cari titik potong biar merata.
# bagi pelanggan jadi 4 kelompok sama banyak (kuartil)
df['kuartil'] = pd.qcut(df['belanja'], q=4, labels=['Q1','Q2','Q3','Q4'])
print(df)
Kalau kamu punya 100 pelanggan dan q=4, tiap kuartil isinya sekitar 25 orang. Ini pas buat ranking, misalnya nentuin 25% pelanggan paling boros buat program loyalti.
| Fungsi | Cara bagi | Isi tiap bin | Pakai kalau |
|---|---|---|---|
| cut | Berdasarkan rentang nilai | Bisa timpang | Punya batas yang jelas |
| qcut | Berdasarkan kuantil | Sama banyak | Mau tiap grup rata |
toko_berkah punya 480 pelanggan dengan total belanja setahun. Mereka mau bikin tiga tier: reguler, silver, gold. Awalnya mereka pakai cut dengan batas Rp 500 ribu dan Rp 2 juta.
df['tier'] = pd.cut(
df['total_belanja'],
bins=[0, 500000, 2000000, float('inf')],
labels=['reguler', 'silver', 'gold']
)
print(df['tier'].value_counts())
Dari dataset ngulikdata, hasil cut ternyata timpang: 410 pelanggan masuk reguler, cuma 12 yang gold. Program gold jadi nyaris kosong. Waktu diganti pakai qcut dengan q=3, tiap tier langsung isi sekitar 160 pelanggan. Tier gold yang tadinya 12 orang jadi 160 orang, cukup buat bikin program loyalti yang hidup.
Ini inti bedanya. cut ngikutin batas bisnis, qcut ngikutin sebaran data. Buat segmentasi yang butuh grup seimbang, qcut lebih aman.
bins bikin 3 rentang, labels harus 3. Kalau enggak, error.cut, angka di bawah batas terkecil atau di atas terbesar bakal NaN. Pastiin batasnya nutup semua data, atau pakai float('inf').duplicates='drop' buat ngatasin.Kalau kamu cuma mau tau distribusinya tanpa label, hilangin argumen labels. Pandas bakal nampilin rentang tiap bin apa adanya.
cut membagi data berdasarkan rentang nilai yang kamu tentukan, jadi isi tiap bin bisa timpang tergantung sebaran data. qcut membagi berdasarkan kuantil, jadi tiap bin isinya jumlah baris yang kurang lebih sama. Pakai cut kalau punya batas yang jelas kayak kelompok umur. Pakai qcut kalau mau tiap grup seimbang buat ranking.
Pakai qcut kalau kamu mau tiap kelompok isinya rata, misalnya buat bikin kuartil pelanggan atau desil pendapatan. qcut cocok saat sebaran datamu miring dan cut bikin grup timpang. Kalau kamu justru butuh batas bisnis yang tetap, misalnya harga di atas 1 juta selalu masuk kategori mahal, cut lebih tepat karena batasnya kamu yang atur.
Error itu muncul karena datamu punya banyak nilai kembar, sehingga titik potong kuantilnya jadi sama dan tabrakan. Solusinya tambahin argumen duplicates='drop', misalnya pd.qcut(x, q=4, duplicates='drop'). Pandas bakal buang batas yang kembar, walau akibatnya jumlah bin bisa jadi lebih sedikit dari yang kamu minta.
Setelah bikin kolom hasil cut atau qcut, panggil value_counts() di kolom itu. Misalnya df['segmen'].value_counts() bakal nampilin berapa baris di tiap kategori. Kalau mau urut sesuai urutan bin, bukan berdasarkan jumlah, tambahin sort=False jadi value_counts(sort=False). Ini cara cepat ngecek apakah segmenmu seimbang atau timpang.
Bisa. Kalau kamu hilangin argumen labels, pandas ngasih rentang interval tiap bin. Kalau kamu set labels=False, pandas ngasih nomor bin berupa angka mulai dari 0. Nomor angka ini berguna kalau hasilnya mau dipakai buat perhitungan lanjutan atau jadi input model, bukan sekadar dibaca manusia.
Rangkuman: cut bagi data pakai rentang yang kamu tentukan, qcut bagi pakai kuantil biar tiap grup sama banyak. Pilih cut buat batas bisnis, qcut buat segmen seimbang.
Coba ambil satu kolom angka di datamu, bikin segmennya pakai dua fungsi ini, dan lihat mana yang lebih masuk akal buat kasusmu.
Mau lanjut olah data pandas? Baca cara hitung frekuensi nilai pakai value_counts dan cara agregasi data pakai groupby. Buat konsep dasarnya, cek glosarium binning dan glosarium kuantil. Dokumentasi resmi ada di halaman pandas.cut.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Nama toko ketik campur huruf besar-kecil, spasi nyasar di ujung, atau kode produk nempel jadi satu. Accessor .str di pandas ngerapiin semua itu tanpa loop.
Model machine learning cuma ngerti angka, bukan teks kayak merah atau biru. get_dummies ngubah kolom kategori jadi kolom 0/1 dalam satu baris kode.
Cara pakai pandas crosstab buat bikin tabel silang yang menghitung frekuensi antar dua kategori. Contoh analisis kategori produk per kota UMKM.