Data Tabel · Pelajaran 3 dari 9

Membersihkan data

9 menit baca · BelajarCode

Data dari dunia nyata hampir selalu kotor. Membersihkan data sering memakan waktu lebih banyak daripada menganalisisnya, dan hasil analisis hanya sebaik data yang dipakai.

Masalah yang sering ditemui

Masalah data dan cara menanganinya
MasalahContohPenanganan
Data kosongUmur tidak diisiLewati, atau isi dengan nilai yang masuk akal dan catat
Penulisan tidak seragam"laki-laki", "L", "Laki"Petakan ke satu bentuk baku
Angka berformat"Rp15.000", "15,5"Buang simbol, sesuaikan tanda desimal
Spasi berlebih" Bandung "strip()
Data gandaSatu orang mengisi survei dua kaliBuang salah satu berdasarkan kunci unik
Nilai mustahilUmur 250 tahun, nilai 120Tandai sebagai tidak valid

Contoh: data survei uang saku

Python
1import csv2import io34teks = """id,nama,jenis_kelamin,uang_saku51,Andi,L,Rp15.00062,bela ,perempuan,2000073,Citra,P,84,Dimas,laki-laki,Rp12.50092,bela ,perempuan,20000105,Eka,P,250000000"""1112def jenis_baku(teks):13    teks = teks.strip().lower()14    if teks in ("l", "laki", "laki-laki"):15        return "L"16    if teks in ("p", "perempuan"):17        return "P"18    return None1920def uang(teks):21    teks = teks.strip().replace("Rp", "").replace(".", "")22    return int(teks) if teks else None2324bersih = []25sudah = set()26catatan = []27for baris in csv.DictReader(io.StringIO(teks)):28    if baris["id"] in sudah:29        catatan.append(f"id {baris['id']} ganda, dilewati")30        continue31    sudah.add(baris["id"])32    nilai = uang(baris["uang_saku"])33    if nilai is None:34        catatan.append(f"id {baris['id']} uang saku kosong")35    elif nilai > 1_000_000:36        catatan.append(f"id {baris['id']} uang saku {nilai} tidak masuk akal")37        nilai = None38    bersih.append({39        "nama": baris["nama"].strip().title(),40        "jk": jenis_baku(baris["jenis_kelamin"]),41        "uang_saku": nilai,42    })4344for b in bersih:45    print(b)46print("Catatan:")47for c in catatan:48    print("-", c)
Keluaran
{'nama': 'Andi', 'jk': 'L', 'uang_saku': 15000}
{'nama': 'Bela', 'jk': 'P', 'uang_saku': 20000}
{'nama': 'Citra', 'jk': 'P', 'uang_saku': None}
{'nama': 'Dimas', 'jk': 'L', 'uang_saku': 12500}
{'nama': 'Eka', 'jk': 'P', 'uang_saku': None}
Catatan:
- id 3 uang saku kosong
- id 2 ganda, dilewati
- id 5 uang saku 250000000 tidak masuk akal

Perhatikan bahwa data yang tidak valid ditandai dengan None dan dicatat, bukan dihapus diam-diam atau ditebak nilainya.

Simpan data mentah

Jangan pernah menimpa file data asli. Simpan data mentah apa adanya, lalu tulis hasil pembersihan ke file baru. Dengan begitu, jika ada kesalahan dalam proses pembersihan, kamu bisa mengulanginya dari awal.

Cek pemahaman

Dalam sebuah survei, ada responden yang menulis umur 7 tahun untuk survei khusus siswa SMA. Apa penanganan terbaik?

Latihan

Bersihkan data nilai

Bersihkan daftar nilai berikut: buang spasi, ubah koma desimal menjadi titik, abaikan yang kosong, dan tandai nilai di luar 0 sampai 100. Tampilkan rata-rata dari nilai yang valid saja.

["85", " 90,5", "", "77", "105", "abc", "68,5"]

Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi