Sebagian besar algoritma machine learning menghitung dengan angka, bukan dengan teks. Kolom pembayaran yang berisi QRIS, Transfer, Kartu Kredit, dan COD harus diubah menjadi bentuk numerik sebelum masuk ke model. Teknik one-hot encoding menyelesaikannya dengan memecah satu kolom kategori menjadi beberapa kolom biner: satu kolom per nilai unik, dan setiap baris bernilai True pada tepat satu kolom. Pada Chapter ini kita memakai pd.get_dummies()
, membaca perilaku bawaan pandas 3.0, lalu mengonversi hasilnya ke angka 0/1 bila dibutuhkan.
Memecah Kolom Menjadi Kolom Biner #
Skrip berikut mengambil dua kolom dataset pesanan agar hasilnya mudah dibaca, memecah kolom pembayaran menjadi empat kolom dummy, lalu menunjukkan versi angka. Jalankan dan amati dtype kedua versi.
import pandas as pd
pesanan = pd.DataFrame({
"id_pesanan": ["PSN-001", "PSN-002", "PSN-003", "PSN-004",
"PSN-005", "PSN-006", "PSN-007", "PSN-008"],
"nama_pelanggan": ["Budi", "Siti", "Dewi", "Andi",
"Rina", "Tono", "Lina", "Sari"],
"kota": ["Jakarta", "Bandung", "Surabaya", "Jakarta",
"Medan", "Bandung", "Jakarta", "Surabaya"],
"pembayaran": ["QRIS", "Transfer", "QRIS", "Kartu Kredit",
"COD", "Transfer", "QRIS", "COD"],
"nilai_transaksi": [250_000, 1_800_000, 750_000, 2_400_000,
480_000, 1_200_000, 320_000, 980_000],
"berat_paket": [1.2, 4.5, 0.8, 7.0, 2.5, 3.0, 1.0, 5.5],
})
ringkas = pesanan[["nama_pelanggan", "pembayaran"]]
dummies = pd.get_dummies(ringkas, columns=["pembayaran"], prefix="bayar")
print(dummies)
print()
print(dummies.dtypes)
print()
dummies_angka = pd.get_dummies(
ringkas, columns=["pembayaran"], prefix="bayar", dtype=int
)
print(dummies_angka.dtypes)Output yang Dihasilkan:
nama_pelanggan bayar_COD bayar_Kartu Kredit bayar_QRIS bayar_Transfer
0 Budi False False True False
1 Siti False False False True
2 Dewi False False True False
3 Andi False True False False
4 Rina True False False False
5 Tono False False False True
6 Lina False False True False
7 Sari True False False False
nama_pelanggan str
bayar_COD bool
bayar_Kartu Kredit bool
bayar_QRIS bool
bayar_Transfer bool
dtype: object
nama_pelanggan str
bayar_COD int64
bayar_Kartu Kredit int64
bayar_QRIS int64
bayar_Transfer int64
dtype: objectMari kita telaah apa yang terjadi pada kode di atas:
- Baris 17 (
ringkas = pesanan[["nama_pelanggan", "pembayaran"]]):get_dummies()membiarkan kolom lain apa adanya, jadi kita memilih dua kolom saja agar tabel hasil tetap muat di satu baris cetakan. - Baris 18 (
pd.get_dummies(ringkas, columns=["pembayaran"], prefix="bayar")): hanya kolom yang disebut padacolumnsyang dipecah.get_dummies()membuat satu kolom per nilai unik, menamainyaprefix+_+ nilai asli, dan mengurutkannya secara alfabetis:bayar_COD,bayar_Kartu Kredit,bayar_QRIS,bayar_Transfer. - Isi baris: setiap baris bernilai
Truepada tepat satu kolom dummy. Baris Andi bernilaiTruedibayar_Kartu KreditdanFalsedi tiga kolom lainnya, persis sepertipembayaran-nya. - Baris 21 (
print(dummies.dtypes)): keempat kolom dummy bertipebool. Kolomnama_pelanggantetapstrkarena tidak ikut dipecah. - Baris 24-27 (
dtype=int): argumendtype=intmeminta dummy dalam bentuk angka. Cetakannya menunjukkan keempat kolom dummy menjadiint64; nilai di dalamnya kini 0 dan 1, tanpa perlu konversi tambahan.
Kolom Bool versus Kolom 0/1 #
Perhatikan dtype pada output: pandas 3.0 menghasilkan kolom bool berisi True/False, bukan 0/1 seperti pada banyak tutorial era pandas 1.x dan 2.x. Secara teknis kedua bentuk setara karena True berperilaku seperti 1 saat dijumlahkan, dan bool lebih hemat memori. Meski begitu, sebagian pipeline tertentu, misalnya format data untuk library lain, memang meminta integer; gunakan dtype=int saat memanggil get_dummies() atau astype(int) pada hasilnya, sesuai kebutuhan.
Dua hal kecil perlu diingat saat membaca hasil get_dummies(). Nama kolom hasil menggabungkan prefix dengan nilai asli, sehingga bisa mengandung spasi seperti bayar_Kartu Kredit; bersihkan nilai kategori lebih dulu bila nama kolom harus rapi. Penjelasan lengkap dengan contoh lain ada di user guide Computing indicator/dummy variables
. Kolom kategori kini sudah berbentuk biner yang siap masuk ke model; Sebelum menyamakan skala kolom numerik pada chapter penutup section ini, Chapter berikutnya menyajikan sisi lain encoding: factorize() yang memadatkan kategori menjadi satu kolom kode integer.