Saat kita sedang menangani data numerik yang bersifat kontinu, masalah yang sering dihadapi adalah dalam mengamati sebaran nilainya atau distribusi datanya. Bagaimana cara mengatasi permasalahan tersebut. Nah, untuk memudahkan proses analisis data, kita dapat melakukan binning data.
Apa itu binning data?
Binning adalah sebuah proses untuk mengelompokkan data ke dalam bagian-bagian yang lebih kecil yang disebut bin berdasarkan kriteria tertentu. Binning data merupakan salah satu teknik praproses data yang digunakan untuk meminimalisasi kesalahan dalam pengamatan serta terkadang dapat meningkatkan akurasi dari model prediktif.
Binning biasanya digunakan untuk mengelompokkan data numerik menjadi beberapa bin agar sebaran data lebih mudah dipahami. Misalnya kita dapat mengelompokkan fitur “usia” menjadi [0-5], [6-10], [11-15], [16-20], [20-25], dan seterusnya.
Baca juga: Cara Memilih Algoritma Machine Learning
Contoh lain misalnya sebuah data yang memiliki fitur “harga” dengan kisaran 1000 hingga 99000. Kita bisa membagi harga tersebut menjadi tiga bin, “murah”, “standar”, dan “mahal” dengan batas tertentu.
Di Python, ada beberapa cara yang dapat dilakukan untuk membagi data menjadi beberapa bin.
Cara binning data di Python
Disini saya akan membahas dua cara yang dapat kita lakukan untuk melakukan binning data di Python dengan Pandas. Ada dua fungsi di Pandas yang dapat digunakan untuk melakukan binning data, yaitu cut()
dan qcut()
.
cut()
cut()
. Misalnya kita memiliki data harga dengan range 1500 sampai 91000 dan terdiri dari 12 item seperti pada tabel berikut. Item | Harga |
---|---|
Item_1 | 1500 |
Item_2 | 3300 |
Item_3 | 11000 |
Item_4 | 87500 |
Item_5 | 45000 |
Item_6 | 28600 |
Item_7 | 39900 |
Item_8 | 91000 |
Item_9 | 64700 |
Item_10 | 6000 |
Item_11 | 19000 |
Item_12 | 2700 |
linspace()
yang merupakan fungsi dari library Numpy, menggunakan interval_range()
, dan yang terakhir dengan menentukan sendiri angka batasan yang diinginkan. Menggunakan linspace()
linspace()
adalah sebuah fungsi dari Numpy yang digunakan untuk membuat array yang berisi sejumlah angka dengan jarak yang sama. Angka-angka ini yang nantinya akan digunakan sebagai batas untuk tiap kategori. Secara umum di Python linspace()
dapat ditulis sebagai berikut. numpy.linspace(nilai minimum, nilai maksimum, jumlah elemen)
Dalam kasus “harga”, nilai minimum berarti harga terendah di dalam data, harga maksimum berarti harga tertinggi. Sementara itu, jumlah elemen disini berarti mau dibagi menjadi berapa bagian data tersebut. Karena kita akan membagi menjadi 3 kategori, maka kita membutuhkan 4 elemen atau angka sebagai batasnya.
Baca juga: 5 Perbedaan List dan Tuple di Python
Di Python, kita dapat membuat kodenya seperti ini.
bins = np.linspace(min(data['Harga']), max(data['Harga']), 4)
Untuk melihat batasan angkanya, kita dapat print bins.
print(bins)
Selanjutnya kita definisikan kategori harganya.
kategori = ['Murah', 'Standar', 'Mahal']
Setelah menentukan batas dan kategori, kita dapat melakukan binning pada data tersebut menggunakan fungsi Pandas cut()
dengan kode seperti di bawah ini.
data['Harga_binned'] = pd.cut(data['Harga'], bins, labels=kategori, include_lowest=True)
Hasil yang diperoleh dari kode di atas adalah sebagai berikut.
Terlihat ada 7 item yang termasuk kategori Murah, 2 item di kategori Standar, dan 3 item di kategori Mahal.
Menggunakan interval_range()
Kita juga dapat menggunakan interval_range()
yang merupakan sebuah fungsi dari Pandas untuk menentukan batasan bin. Jika kita terapkan pada data harga, kodenya dapat ditulis sebagai berikut.
interval_range = pd.interval_range(start=0, freq=10000, end=100000)
Parameter start
merupakan nilai awal, end
merupakan nilai akhir, dan freq
merupakan panjang dari tiap interval. Untuk lebih detailnya tentang interval_range()
dapat dilihat disini.
Selanjutnya kita gunakan fungsi cut()
untuk binning data.
data['Harga_binned_2'] = pd.cut(data['Harga'], bins=interval_range)
Hasilnya kira-kira seperti ini.
Harap dicatat bahwa jika menggunakan interval_range()
, kita tidak dapat memberikan label (Murah, Standar, Mahal).
Baca juga: 3 Metode Normalisasi Data di Pandas Python
Untuk membaca interval seperti (0, 10000], (10000, 20000], dan sebagainya, tanda kurung ()
berarti tidak diikutsertakan, sedangkan tanda kurung siku []
berarti diikutsertakan. Jadi untuk contoh interval (10000, 20000] misalnya, 10000 tidak masuk dalam interval, tetapi 20000 masuk dalam interval tersebut.
Mendefinisikan sendiri batasan bin
Kita juga dapat mendefinisikan batas-batas bin yang akan dibuat sesuai keinginan. Di Python, dapat ditulis sebagai berikut.
batas_bin = [0, 20000, 70000, 100000]
kategori = ['Murah', 'Standar', 'Mahal']
data['Harga_binned_3'] = pd.cut(data['Harga'], bins=batas_bin, labels=kategori)
Hasilnya kira-kira seperti ini.
qcut()
Selain fungsi cut()
, ada juga fungsi qcut()
yang dapat digunakan untuk melakukan binning data. Menurut dokumentasi pandas, qcut
digambarkan sebagai Quantile-based discretization function. Singkatnya fungsi qcut()
ini akan membagi data ke dalam jumlah yang sama. Karena itu, jarak untuk masing-masing bin boleh jadi berbeda satu sama lain.
Di Python, jika kita akan melakukan binning data menjadi 3 bin menggunakan qcut()
dapat ditulis sebagai berikut.
data['Harga_binned'] = pd.qcut(data['Harga'], 3)
Hasilnya seperti di bawah ini.
qcut()
.
kategori = ['Murah', 'Standar', 'Mahal'] data['Harga_binned_2'] = pd.qcut(data['Harga'], q=3, labels=kategori)Hasilnya kira-kira seperti ini.
Kesimpulannya, jika kita mengharapkan jumlah item yang sama pada masing-masing bin, gunakanlah qcut()
. Namun, jika lebih mengutamakan batas angka tertentu untuk tiap bin, gunakanlah cut()
.
Semoga bermanfaat!
Jika Anda yang sedang belajar data science atau mengolah data dengan bahasa pemrograman Python namun masih suka bingung menulis kode Python-nya, kami telah menyusun Paket E-modul Data Science dengan Python yang didesain khusus untuk pemula dengan penjelasan bahasa Indonesia yang lengkap untuk setiap blok kode-nya. Dapatkan sekarang juga dengan klik di sini!