Menyeragamkan Kategori yang Tidak Konsisten
Seragamkan kolom kategori teks bebas dengan memetakan alias, memperbaiki salah ketik melalui pencocokan fuzzy, dan menerapkan daftar kanonis.
Menyeragamkan Kategori yang Tidak Konsisten adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Masalah Kategori yang Tidak Konsisten
Saat data kategori dimasukkan oleh manusia, konsep yang sama dapat muncul dengan banyak ejaan berbeda: Elektronik, elektronik, ELECTRONICS, Elektronicss. Operasi groupby pada kolom ini menghasilkan puluhan kelompok kecil, bukan satu kelompok yang bermakna. Menstandardisasi kategori menjadi daftar kanonis merupakan salah satu langkah pembersihan terpenting sebelum agregasi atau pembuatan fitur pembelajaran mesin.
import pandas as pd
df = pd.read_csv('products.csv')
print(df['category'].value_counts().head(20))Menormalkan Kapitalisasi dan Spasi
Langkah standardisasi pertama dan termudah adalah menormalkan kapitalisasi dan spasi. Terapkan .str.strip().str.lower() untuk menghapus spasi di awal dan akhir serta mengubah semuanya menjadi huruf kecil sebelum melakukan perbandingan lain. Langkah tunggal ini menyatukan banyak variasi: Elektronik, elektronik, dan ' Elektronik ' semuanya menjadi elektronik setelah normalisasi.
df['category_clean'] = df['category'].str.strip().str.lower()
print('Before:', df['category'].nunique())
print('After:', df['category_clean'].nunique())Memetakan Alias dengan Dict
Setelah kapitalisasi dinormalisasi, banyak variasi masih berbeda karena singkatan, sinonim, atau nama lama. Buat kamus pemetaan alias dengan ejaan variasi sebagai kunci dan bentuk kanonis sebagai nilainya. Terapkan dengan df['category_clean'].map(alias_map).fillna(df['category_clean']) — fillna mempertahankan nilai yang tidak terdapat dalam kamus, alih-alih menggantinya dengan NaN.
alias_map = {
'elect': 'electronics',
'elec': 'electronics',
'tech': 'electronics',
'clothing': 'apparel',
'clothes': 'apparel',
'garments': 'apparel'
}
df['category_clean'] = df['category_clean'].map(alias_map).fillna(df['category_clean'])
print(df['category_clean'].value_counts().head())Menggunakan str.replace untuk Memperbaiki Pola
Beberapa nama kategori memiliki kesalahan pemformatan yang konsisten, seperti spasi ganda atau angka di akhir. Gunakan .str.replace() dengan ekspresi reguler untuk memperbaiki pola tersebut pada semua baris sekaligus. Misalnya, .str.replace(r'\s+', ' ', regex=True) menggabungkan beberapa spasi menjadi satu, sedangkan .str.replace(r'\d+$', '', regex=True) menghapus digit di akhir nama kategori.
df['category_clean'] = (
df['category_clean']
.str.replace(r'\s+', ' ', regex=True) # collapse spaces
.str.replace(r'\d+$', '', regex=True) # strip trailing numbers
.str.strip()
)
print(df['category_clean'].value_counts())Pencocokan Fuzzy dengan difflib
Jika salah ketik tidak dapat diprediksi, gunakan pencocokan fuzzy untuk menemukan kategori kanonis yang paling dekat untuk setiap variasi. difflib.get_close_matches() bawaan Python mengembalikan kecocokan terbaik dari daftar kategori yang valid berdasarkan kemiripan string. Terapkan sebagai fungsi pembantu melalui df['category'].apply() untuk menyelesaikan variasi yang tidak dapat ditangani hanya oleh map().
from difflib import get_close_matches
CANONICAL = ['electronics', 'apparel', 'home', 'sports', 'beauty']
def fuzzy_fix(val):
matches = get_close_matches(str(val).lower().strip(), CANONICAL, n=1, cutoff=0.7)
return matches[0] if matches else val
df['category_fuzzy'] = df['category_clean'].apply(fuzzy_fix)
print(df[['category_clean', 'category_fuzzy']].head(10))Membuat Daftar Kategori Kanonis
Tentukan kategori kanonis secara eksplisit, bukan menyimpulkannya dari data. Daftar yang ditulis secara langsung memaksa setiap nilai melewati gerbang validasi; nilai apa pun yang tidak ada dalam daftar akan ditandai sebagai tidak dikenal. Simpan daftar kanonis dalam file konfigurasi atau kolom DataFrame terpisah agar mudah diperbarui ketika bisnis menambahkan kategori produk baru tanpa mengubah kode pembersihan.
CANONICAL_CATEGORIES = {
'electronics', 'apparel', 'home', 'sports',
'beauty', 'food', 'toys', 'automotive'
}
df['is_known_category'] = df['category_fuzzy'].isin(CANONICAL_CATEGORIES)
unknown = df[~df['is_known_category']]['category_fuzzy'].unique()
print('Unknown categories remaining:', unknown)Menangani Kategori yang Tidak Dikenal
Kategori tidak dikenal yang tidak cocok dengan nilai kanonis mana pun setelah perbaikan fuzzy sebaiknya dikelompokkan di bawah label Lainnya, bukan dihapus, agar Anda tidak kehilangan baris secara diam-diam. Tetapkan nilainya menjadi 'other' dengan np.where() atau penetapan bersyarat sederhana. Catat jumlah baris yang dipetakan ke 'other' dan tinjau baris tersebut untuk menemukan pola yang mungkin memerlukan kategori kanonis baru.
import numpy as np
df['category_final'] = np.where(
df['category_fuzzy'].isin(CANONICAL_CATEGORIES),
df['category_fuzzy'],
'other'
)
print(df['category_final'].value_counts())Menerapkan Dtype Categorical
Setelah standardisasi, ubah kolom kategori yang telah dibersihkan menjadi tipe data Categorical Pandas dengan daftar kategori valid yang ditentukan secara eksplisit. Ini menerapkan skema: setiap upaya untuk menetapkan kategori yang tidak valid akan menimbulkan error. Cara ini juga mengurangi penggunaan memori dengan menyimpan string kategori sebagai kode integer secara internal, serta mempercepat operasi groupby pada DataFrames berukuran besar.
df['category_final'] = pd.Categorical(
df['category_final'],
categories=list(CANONICAL_CATEGORIES) + ['other']
)
print(df['category_final'].dtype)
print(df['category_final'].cat.categories)Memvalidasi Kolom yang Telah Dibersihkan
Setelah semua langkah standardisasi selesai, lakukan validasi akhir: pastikan tidak ada nilai di luar kumpulan kanonis pada kolom yang telah dibersihkan. Gunakan assert df['category_final'].isin(valid_set).all(). Tempatkan assertion ini di akhir fungsi pembersihan agar dijalankan setiap kali pipeline dieksekusi, sehingga regresi dapat terdeteksi ketika data mentah baru berisi label kategori yang sebelumnya belum pernah ditemukan.
valid_set = set(CANONICAL_CATEGORIES) | {'other'}
assert df['category_final'].isin(valid_set).all(), 'Invalid category found'
print('All categories valid. Distribution:')
print(df['category_final'].value_counts())Melacak Perubahan Standardisasi
Buat tabel perbedaan yang menampilkan nilai asli dan penggantinya setelah dibersihkan untuk setiap baris yang berubah. Jejak audit ini memungkinkan pemilik data meninjau serta menyetujui atau menolak pemetaan tertentu. Gunakan boolean mask untuk memilih baris yang berubah, lalu bandingkan kolom asli dan kolom akhir secara berdampingan. Ekspor perbedaan tersebut sebagai CSV agar dapat ditinjau oleh pemangku kepentingan nonteknis.
changed = df['category'] != df['category_final']
diff_table = df[changed][['category', 'category_final']].drop_duplicates()
diff_table.columns = ['original', 'mapped_to']
print(f'Unique mappings applied: {len(diff_table)}')
print(diff_table)Menyimpan Dataset yang Telah Distandardisasi
Ganti kolom kategori asli yang masih berantakan dengan kolom yang telah distandardisasi, lalu hapus kolom kerja sementara sebelum menyimpan data. Simpan kamus pemetaan alias dan ambang batas perbaikan fuzzy di konfigurasi pipeline agar standardisasi dapat direproduksi sepenuhnya. Proses pembersihan yang dijalankan dua bulan kemudian pada dump data baru seharusnya menghasilkan hasil yang sama untuk nilai input yang sama.
df_out = df.drop(columns=['category_clean', 'category_fuzzy', 'is_known_category'])
df_out = df_out.rename(columns={'category_final': 'category'})
df_out.to_parquet('products_clean.parquet', index=False)
print('Saved. Category distribution:')
print(df_out['category'].value_counts())Pemeriksaan Singkat
Uji pemahaman Anda tentang konsep Analisis Data dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini, Anda mempelajari: menormalkan huruf besar-kecil dan spasi sebagai langkah standardisasi pertama, memetakan alias dan menerapkan pencocokan fuzzy untuk memperbaiki salah ketik, serta menerapkan daftar kategori kanonis dengan tipe data Categorical dan assertion. Selanjutnya, kita akan membahas validasi skema dan assertion saat runtime untuk melindungi setiap tahap pipeline.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menyeragamkan Kategori yang Tidak Konsisten” gratis?
Ya — teks lengkap “Menyeragamkan Kategori yang Tidak Konsisten” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menyeragamkan Kategori yang Tidak Konsisten”?
Seragamkan kolom kategori teks bebas dengan memetakan alias, memperbaiki salah ketik melalui pencocokan fuzzy, dan menerapkan daftar kanonis. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?
Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Menyeragamkan Kategori yang Tidak Konsisten” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mendeteksi dan Menghapus Duplikat
- Deteksi dan Penanganan Pencilan
- Menyeragamkan Kategori yang Tidak Konsisten
- Validasi Skema dan Pernyataan