Data Binning Menggunakan Pandas
Istilah Data Binning memang istilah yang jarang didengar di percakapan sehari-hari, namun sebetulnya istilah itu tidaklah se-asing yang kita kira. Malah kita sering melakukannya secara natural.
Semisalnya, teman kalian mengatakan ke kalian bahwa dia punya seorang anak yang berusia 3 tahun, kemungkinan besar digambaran kalian, anak teman kalian adalah seorang anak-anak.
Atau misalnya lagi, harga nasi uduk di sebelah rumah kalian, yang awalnya 10 ribu Rupiah per bungkus jadi 100 ribu Rupiah per bungkus. Kemungkinan besar, kalian akan mengatakan bahwa harganya mahal.
Itulah Data binning, mengubah data numerik menjadi data kategorik. Yang dimana, di setiap kelompoknya punya kriteria tertentu, yang umumnya kriteria tersebut adalah suatu range-range kecil yang disebut bin. Hanya dengan mengetahui berapa usia seseorang, kita langsung tahu kira-kira dia ada di kelompok mana. Bayi? Balita? Remaja? Atau dewasa?
Namun memang setiap orang punya referensi mereka masing-masing, kalau misalnya kita ambil lagi contoh harga nasi uduk di atas. Adanya orang-orang yang mengatakan 100 Ribu rupiah untuk satu bungkus nasi uduk tidaklah mahal. Itu kenapa, ada baiknya, saat kita mengelompokkan data, kita punya sebuah argumen atau setidaknya referensi-referensi yang dapat menjadi acuan kita.
.cut( )
Salah satu method Pandas yang akan membantu kita untuk melakukan Data Binning yaitu .cut( ). Semisalnya, saya buat data-data umur yang rangenya dari 0 tahun sampai 100 tahun, sebanyak 100 data secara acak. Dengan 101 sebagai bilangan generatornya.
import pandas as pd # pip install pandas
import numpy as np # pip install numpy
from numpy.random import seed, randintseed(101)
age = pd.DataFrame({'age' : randint(0, 100, 100)})
Dikutip dari https://www.sehatq.com/artikel/risiko-penyakit-berdasarkan-klasifikasi-umur-menurut-who, dimana website itu mengatakan, bahwa dia mengutip World Health Organization (WHO), bahwa:
- Usia 0–1 tahun adalah kategori untuk bayi (infants)
- Usia 2–10 tahun adalah kategori untuk Anak-anak (childrens)
- Usia 11–19 tahun adalah kategori untuk Remaja (adolescents)
- Usia 20–60 tahun adalah kategori untuk Dewasa (adult)
- Di atas 60 tahun adalah kategori untuk Lanjut Usia (elderly)
Dan dari sini, sekarang kita punya range-range yang bisa menjadi acuan kita untuk mengelompokkan data-data kita di atas.
pd.cut(age['age'], [0, 2, 11, 20, 61, 101])
Hasil-hasilnya adalah sebuah bins, yang misalnya kalau saya ambil satu contoh yaitu (2, 11] artinya seseorang yang berumur 2 tahun sampai 10 tahun, akan masuk ke bin ini. Dan kita juga bisa menambahkan label-label misalnya, untuk (2, 11] adalah seorang anak-anak.
pd.cut(age['age'], [0, 2, 11, 20, 61, 101],
labels = ['bayi', 'anak-anak', 'Remaja', 'Dewasa', 'Lanjut Usia'])
Dan kita juga bisa menvisualkannya menggunakan histogram.
Histogram
Histogram ditampilkan batangan-batangan dengan sumbu-y adalah frekuensi dan sumbu-x adalah range-range (atau bins) yang telah kita tentukan. Dan saya akan menggunakan bantuan Pandas dan Matplotlib untuk membuat histogram.
import matplotlib.pyplot as plt # pip install matplotlibage.plot(kind = 'hist', bins = [0, 2, 11, 20, 61, 101], figsize = (8, 5))
plt.grid()
Dari histogram, kita dapat melihat dari data acak kita di atas. Paling banyak ada di kategori Usia Lanjut berumur di atas 60 tahun.
Saran
Data binning memang teknik yang berguna, terutama saat kita melakukan eksplorasi data dan mencoba mencari insight dari data. Namun perlu diketahui, bahwa Data binning akan mengurangi informasi data yang kita punya secara individu.
Jadi sebaiknya, kita punya alasan yang kuat, kenapa kita melakukanya. Atau bisa juga dengan tidak menimpa kolom-nya, jadi buat kolom baru seperti di bawah:
age['range'] = pd.cut(age['age'], [0, 2, 11, 20, 61, 101])
age['group'] = pd.cut(age['age'], [0, 2, 11, 20, 61, 101],
labels = ['bayi', 'anak-anak', 'Remaja', 'Dewasa', 'Lanjut Usia'])
Jadi kita tidak kehilangan data atau informasi apapun.
Saya harap tulisan ini dapat membantu… Terimakasih telah membacanya sampai selesai…