Data kategori jarang datang dari satu pintu. Kolom kota pada data pelanggan bisa merupakan gabungan hasil input manual, file ekspor dari sistem lama, dan formulir daring yang masing-masing punya gaya penulisan sendiri. Akibatnya satu kota tampil dalam banyak bentuk: Jakarta, JAKARTA, jakarta, bahkan singkatan seperti Jkt. Setelah chapter sebelumnya merapikan spasi, huruf, dan tanda baca, sekarang kita menyatukan seluruh variasi itu menjadi satu label resmi per kategori.

Mengukur Masalah dengan value_counts #

Langkah pertama standardisasi adalah menghitung, bukan menebak. Method .value_counts() mendaftar setiap label beserta jumlah kemunculannya, sehingga kita melihat dengan pasti berapa variasi yang harus disatukan; dokumentasinya ada di pandas.Series.value_counts . Skrip berikut menampilkan daftar label sebelum standardisasi, menjalankan tiga tahap penyatuan, lalu menampilkan hasil akhirnya.

python
import pandas as pd

kota = pd.Series([
    "Jakarta", "JAKARTA", " jakarta ", "Jkt",
    "Bandung", "bandung ", "BANDUNG",
    "Surabaya", "surabaya",
])

print("Sebelum standardisasi:")
print(kota.value_counts())
print()

kota_rapi = kota.str.strip().str.lower()
kota_rapi = kota_rapi.replace({"jkt": "jakarta"})

peta_kota = {"jakarta": "Jakarta", "bandung": "Bandung", "surabaya": "Surabaya"}
kota_final = kota_rapi.map(peta_kota)

print("Sesudah standardisasi:")
print(kota_final.value_counts())
print()
print("Jumlah label unik sebelum :", kota.nunique())
print("Jumlah label unik sesudah :", kota_final.nunique())

Output yang Dihasilkan:

text
Sebelum standardisasi:
Jakarta      1
JAKARTA      1
 jakarta     1
Jkt          1
Bandung      1
bandung      1
BANDUNG      1
Surabaya     1
surabaya     1
Name: count, dtype: int64

Sesudah standardisasi:
Jakarta     4
Bandung     3
Surabaya    2
Name: count, dtype: int64

Jumlah label unik sebelum : 9
Jumlah label unik sesudah : 3

Bagian pertama output memperlihatkan sembilan label berbeda yang masing-masing muncul satu kali; pandas belum tahu bahwa Jkt dan jakarta merujuk kota yang sama. Bagian kedua memperlihatkan hasil akhir: tiga kota dengan jumlah baris 4, 3, dan 2. Angka 9 menurun menjadi 3 sesuai perhitungan .nunique() di akhir skrip.

Tiga Tahap Menyatukan Label #

Penyatuan label bekerja paling rapi bila dilakukan berurutan dalam tiga tahap yang terpisah:

  1. Normalisasi bentuk tulisan: .str.strip().str.lower() menghapus spasi ujung dan menyeragamkan huruf, sehingga jakarta dan JAKARTA sama-sama menjadi jakarta.
  2. Menyamakan singkatan dan sinonim: .replace() mengganti nilai penuh jkt menjadi jakarta sesuai dictionary {"jkt": "jakarta"}.
  3. Pemetaan ke label resmi: .map(peta_kota) mengganti setiap nilai dengan bentuk resminya dari dictionary peta_kota, misalnya jakarta menjadi Jakarta.

Mari kita telaah baris-baris kuncinya:

  1. Baris 13 (kota_rapi = kota.str.strip().str.lower()): tahap normalisasi menghasilkan label huruf kecil tanpa spasi ujung.
  2. Baris 14 (kota_rapi.replace({"jkt": "jakarta"})): .replace() bekerja pada nilai penuh, berbeda dengan .str.replace() yang mengganti potongan teks (substring) di dalam string.
  3. Baris 16 (peta_kota = {...}): dictionary ini menjadi sumber kebenaran berisi label resmi tiap kategori; bentuk Title Case dipilih agar nyaman dibaca di laporan.
  4. Baris 17 (kota_final = kota_rapi.map(peta_kota)): .map() mengganti setiap nilai sesuai kunci yang cocok; dokumentasinya ada di pandas.Series.map .
  5. Baris 22-23: .nunique() sebelum dan sesudah menjadi bukti terukur bahwa 9 label berhasil dipadatkan menjadi 3.

Memilih Bentuk Label Resmi #

Bentuk Jakarta dipilih sebagai label resmi karena mudah dibaca, tetapi pilihan ini sepenuhnya keputusan tim Anda; yang penting bentuknya konsisten di seluruh laporan. Untuk kasus yang hanya melibatkan perbedaan huruf besar-kecil, .str.title() pada pandas.Series.str.title dapat menggantikan dictionary peta_kota. Dictionary tetap lebih unggul ketika ada sinonim yang tidak bisa diselesaikan aturan huruf, seperti Jkt atau JKT Sel. Simpan dictionary pemetaan di satu tempat dan pakai ulang di semua skrip agar standardisasi tidak berubah antar eksekusi.

Setelah label kategori seragam, kolom teks siap dipakai untuk grouping dan pelaporan. Langkah berikutnya kita beralih dari teks ke kolom numerik: mengenali nilai ekstrem (outlier) sebelum memutuskan penanganannya.