Kursus
Betapapun canggihnya analitik atau algoritme prediktif yang kita miliki, kualitas keluaran bergantung pada data masukan. Dengan kata lain, 'garbage in, garbage out.'
Karena data menjadi landasan semua proses ini, penting untuk meluangkan waktu yang cukup guna memastikan data disempurnakan dengan tepat.
Pembersihan data adalah proses fundamental dalam siklus hidup data science, dan perannya tidak dapat dilebih-lebihkan ketika berupaya menggali insight dan menghasilkan jawaban yang andal. Sering kali, data di dunia nyata akan selalu kotor, dan pembersihan data tidak dapat sepenuhnya dihindari.
Dalam artikel ini, kita akan membahas beberapa gagasan penting, seperti cara menangani nilai yang hilang, duplikat, dan pencilan. Untuk petunjuk yang lebih komprehensif, pastikan untuk mengikuti kursus Cleaning Data in Python atau Cleaning Data in R kami.
Apa Penyebab Data Tidak Bersih?
Sederhananya, pembersihan data (atau cleansing) adalah proses yang diperlukan sebagai persiapan analisis data. Ini dapat mencakup menemukan dan menghapus duplikat serta catatan yang tidak lengkap, serta memodifikasi data untuk memperbaiki catatan yang tidak akurat.
Data yang tidak bersih atau kotor selalu menjadi masalah, namun dalam satu dekade terakhir kita telah melihat lonjakan eksponensial dalam pembuatan data. Hanya pada tahun 2020, dunia menghasilkan lebih dari 64 zettabyte data, setara dengan 6,4 triliun gigabita. Meskipun kurang dari 2% dari semua data ini disimpan, hal ini tetap memperparah masalah umum yang sudah ada tentang "data kotor." Sebelum pembersihan data dapat dilakukan dengan benar, penting untuk memahami bagaimana data tersebut menjadi kotor sejak awal. Ini dapat muncul dari sumber umum seperti:
- Kesalahan manusia saat entri data, pencatatan, atau pengodean
- Perangkat sensor yang bermasalah, seperti pada internet of things (IoT)
- Korupsi akibat kerusakan perangkat keras atau perangkat lunak.
Menyadari akar penyebab data kotor yang ingin kita bersihkan menjadi landasan yang baik untuk menerapkan kriteria kualitas data yang memungkinkan pengelompokan berbagai masalah yang terkait dengan dataset kita.
Mengapa Pembersihan Data Sangat Penting?
Proses pembersihan data penting karena membantu membuat templat untuk membersihkan data organisasi. Seperti disebutkan sebelumnya, proses analitik data atau data science apa pun adalah garbage in, garbage out. Jika diabaikan, hasilnya adalah temuan analitis yang keliru dan mahal, baik dari segi waktu maupun uang, serta sumber daya lain yang dikerahkan.
Apa itu Kualitas Data?
Kualitas data adalah ukuran kualitatif dan/atau kuantitatif tentang seberapa baik data kita cocok untuk tujuan yang harus dipenuhi. Ukuran-ukuran ini adalah templat praktis yang dapat kita gunakan untuk menilai seberapa sesuai data yang disediakan dengan tujuan yang kita inginkan. Anggap ukuran kualitas data ini sebagai uji metrik yang harus dilalui data kita agar layak untuk proses data science.
Kriteria kualitas data
- Akurasi: Pertanyaan sederhana yang dapat kita ajukan untuk memverifikasi akurasi adalah - apakah informasi yang terkandung dalam data disediakan dengan benar hingga ke setiap detail? Dengan data, kita berupaya mendekati pola di dunia nyata; akurasi membantu menentukan seberapa benar pendekatan ini.
- Relevansi: Apakah informasi ini berdampak pada tujuan akhir yang kita inginkan?
- Konsistensi: Apakah sumber data ini telah terverifikasi dan dapatkah informasi yang terkandung di dalamnya dipercaya? Misalnya, ada pelanggan berusia 15 tahun tetapi status perkawinannya tercatat menikah.
- Kelengkapan: Apakah data yang disediakan cukup dan komprehensif untuk tujuan akhir yang diinginkan? Ini adalah masalah umum terkait data yang hilang dan salah satu cara mengatasinya adalah dengan menyelidiki sumber data.
- Keseragaman: Misalkan kita memiliki kolom penjualan tetapi tidak semua transaksi dilakukan dalam mata uang yang sama. Maka menjadi penting untuk mengonversi semua nilai penjualan ke satu mata uang, dan itulah yang dimaksud dengan keseragaman; memastikan ukuran data ditentukan menggunakan satuan pengukuran yang sama di semua sistem.
Pembersihan data vs. transformasi data
Penting untuk membedakan antara pembersihan data dan transformasi data. Transformasi data adalah serangkaian proses yang dapat membantu kita mengekstrak lebih banyak insight dari data yang disediakan. Proses ini biasanya mengubah format mentah data menjadi format lain, beberapa contohnya meliputi:
- Encoding: Proses mengonversi nilai kategorikal menjadi nilai biner yang kemudian dapat digunakan dalam komputasi untuk machine learning. Gambar menunjukkan seperti apa kolom gender jika dienkode. Meskipun tetap membawa informasi yang sama, datanya telah ditransformasikan ke format yang berbeda.

- Pembinaan data (data binning): Juga disebut bucketing, proses ini membantu mengurangi efek/ukuran pengamatan kecil. Ini melibatkan pengelompokan nilai kontinu ke dalam bin (atau kategori).

- Penskalaan (scaling): Teknik umum dalam machine learning untuk membantu menstandardisasi nilai dengan skala berbeda ke rentang tetap.

Perhatikan bahwa dalam sebagian besar proses transformasi data, representasi asli data diubah. Meski datanya tetap sama, teknik tertentu diperkenalkan untuk mengubahnya ke format yang dapat digunakan untuk machine learning atau tujuan lain.
Bagaimana Pembersihan Data Dilakukan
Penting untuk memiliki serangkaian pedoman untuk mencapai data berkualitas tinggi. Pedoman ini dapat disebut sebagai alur kerja pembersihan data. Pedoman ini membantu kita memperhitungkan semua proses yang diperlukan untuk pembersihan data. Proses yang termasuk dalam alur kerja ini adalah:
- Eksplorasi data
- Pembersihan data
- Verifikasi data
- Pelaporan pembersihan data Beberapa proses ini juga akan didemonstrasikan di Python
Eksplorasi data
Eksplorasi data adalah tentang memahami data melalui eksplorasi mendalam terhadap variabel yang ada. Ini memerlukan sejumlah teknik visual dan agregasi untuk mengungkap masalah yang mendasari data dengan tepat. Untuk eksplorasi yang baik, berikut beberapa hal yang perlu diperhatikan:
Konteks data
Sebelum kita dapat membersihkan data apa pun, kita harus memahami konteks data tersebut. Konteks data adalah sumber semua entitas yang terkandung dalam data. Ini menangkap serangkaian keadaan yang melingkupi bagaimana data dikumpulkan, dan bagaimana data dikumpulkan memberi wawasan tentang bagaimana data dapat digunakan dan untuk apa digunakan.
Ini menjadi pedoman tentang apa yang dapat diterima dalam pembersihan (dan analisis) sehingga kita dapat memperoleh insight yang tepat dari data tersebut. Setelah kita memiliki pengetahuan yang jelas tentang bagaimana data dikumpulkan, kita kemudian perlu mengeksplorasi data tersebut.
Analisis Data Eksploratori
Analisis data eksploratori mengacu pada proses kritis melakukan investigasi awal terhadap data untuk menemukan pola, menemukan anomali, menguji hipotesis, dan memeriksa asumsi dengan bantuan statistik ringkasan dan representasi grafis. Tidak ada penemuan tanpa eksplorasi. Jika kita tidak mengeksplorasi data kita, sulit untuk menemukan berbagai masalah yang ada di dalamnya.
Misalnya, kita memiliki dataset yang disediakan untuk kita di sini. Berkas Rolling Sales dari Department of Finance mencantumkan properti yang terjual dalam dua belas bulan terakhir di New York City untuk kelas pajak 1, 2, dan 4. Kita akan mengunduh dan membaca data Bronx yang disediakan.
#pandas
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
#read excel file
df = pd.read_excel("rollingsales_bronx.xls")
#preview data
df.head()

Masalah yang menonjol pada data frame ini meliputi:
- kolom tanpa nama
- nilai yang hilang pada tiga baris pertama
Namun, mengeksplorasi data asli di Excel menunjukkan bahwa tabel sebenarnya di workbook baru dimulai pada baris ke-4. Oleh karena itu, membaca data kembali dengan menetapkan beberapa parameter memungkinkan kita menunjukkan baris mana yang harus dilewati dan baris mana yang dijadikan header:
#we read the data in again but skill 3 rows this time
df = pd.read_excel("rollingsales_bronx.xls", skiprows = 4, header = [0])
df.head()

Ada perubahan signifikan pada bagaimana data sekarang ditampilkan. Meskipun kita bisa saja membersihkan impor pertama, eksplorasi data membantu kita menghemat banyak waktu hanya dengan beberapa modifikasi pada fungsi impor data di Python.
Eksplorasi data seperti memasuki tempat kejadian perkara sebagai agen investigasi, di mana kita secara pasif mengamati semua hal yang tidak pada tempatnya dan pembersihan data adalah proses aktif memecahkan kejahatan tersebut.
Pembersihan data
Eksplorasi data biasanya berjalan beriringan dengan proses pembersihan data. Setelah kita menemukan masalah pada data menggunakan cara visual, agregasi, atau statistik, kita perlu memperbaikinya. Pada fase ini, data akan dihapus, dikoreksi, atau diimputasi.
Catatan tidak konsisten
Contoh khas catatan tidak konsisten adalah formulir tempat individu diminta memasukkan jenis kelamin. Kita bisa mendapatkan berbagai format yang mewakili hal yang sama, misalnya 'M', 'm', 'Male', atau 'MALE', dan apakah kita menjual 'aples', 'apples', atau 'APPLES' bulan ini. Cara terbaik untuk menemukannya bisa melalui grafik frekuensi atau menampilkan semua nilai yang berbeda dalam kolom. Beberapa operasi pada catatan tidak konsisten mencakup namun tidak terbatas pada:
- Mengonversi string ke huruf kecil atau proporsional
- Menghapus spasi
- Mengganti nama kolom
Contoh Python: Menggunakan dataset yang diimpor sebelumnya pada bagian eksplorasi data, perhatikan bagaimana nama kolom ditulis tidak konsisten:

Walaupun ini tampak sepele, penting untuk membuat nama kolom konsisten agar mudah diakses. Misalnya, EASE-MENT memiliki tanda hubung (-) di antara tiap kata, sementara yang lain hanya memiliki spasi.
Sebagian dari pembersihan data adalah memastikan konsistensi. Mari kita coba memperbaikinya dalam dua langkah:
- Ganti spasi antar kata dengan garis bawah
- Ubah ke huruf proporsional
# Extract columns
cols = df.columns
# Create empty list for new column names
new_cols = []
# Iterate over each column name to fix issues
for column in cols:
# Convert column name to title case
proper_cols = column.title()
# Replace spaces and hyphens with underscores
proper_cols_hyphen = proper_cols.replace(" ", "_")
clean_col = proper_cols_hyphen.replace("-", "_")
# Append the cleaned column name to the list
new_cols.append(clean_col)
# Display the transformed column names
new_cols
# Replace existing columns in the dataframe with the cleaned list
df.columns = new_cols
# Preview the updated dataframe
df.head()

Tipe data dan konversi tipe
Tipe data adalah cara data direpresentasikan, yang memberi tahu kompiler bagaimana data akan digunakan. Bagaimana data direpresentasikan menentukan jenis operasi yang mungkin dilakukan pada data tersebut. Mari kita lihat tipe data pada setiap kolom dataframe dari data Bronx.
#data types
df.dtypes

NB: Perhatikan bagaimana kita kini dapat dengan mudah memilih nama kolom menggunakan metode titik (df.Year_Built).
Semua tipe data tampak sesuai kecuali kolom Year_Built, yang seharusnya kategorikal. Walau tidak terlalu signifikan, saat kita melakukan agregasi kolom-kolom ini, Year_Built kemungkinan akan ikut terhitung.
#Fix Year_Built column
df.Year_Built = df.Year_Built.astype("str")
#Check
df.dtypes

Data yang hilang
Ada kalanya terdapat observasi (baris) dengan data yang hilang dan terkadang Anda bisa memiliki seluruh kolom yang benar-benar kosong. Jadi apa yang kita lakukan dalam kasus seperti ini? Apakah kita mengabaikannya? Ini ibarat atap bocor yang akan menetes saat hujan.
Nilai yang hilang memiliki representasi berbeda di berbagai alat. Representasi ini termasuk NULL, string kosong, NaN, NA, #NA, dll. Konteks data penting dalam menangani data yang hilang, dan memahami mengapa data hilang sangat krusial. Ada dua metode utama untuk menangani data yang hilang:
- Penghapusan data
- Imputasi data
Sebelum keputusan dapat dibuat tentang metode mana yang akan digunakan, terlebih dahulu harus diperiksa pola nilai yang hilang di seluruh kolom. Kita akan menggunakan teknik visual dan deskriptif untuk menilainya.
#extract the column names
cols = df.columns
#plot a heatmap of missing values with seaborn
plt.figure(figsize = (10,5))
sns.heatmap(df[cols].isnull())

Plot tersebut secara visual menunjukkan bahwa:
- Semua nilai pada Ease_ment dan hampir semua nilai pada Apartment_Number hilang
- Kolom terkait Units dan Square_Feet memiliki nilai hilang yang tersebar Untuk dataset yang jauh lebih besar, plot ini mungkin tidak ideal. Cara lain adalah memeriksa seberapa signifikan nilai yang hilang ini dibandingkan ukuran data aktual.
#Get the percentage of missing values in each column missing_pct = round(df.isnull().sum()/len(df) * 100, 1) print(missing_pct)

Kita akan menghapus kolom Ease_Ment dan Apartment_Number lalu mengganti nilai yang hilang pada kolom lainnya.
#columns with more than 30% missing values
drop_cols = missing_pct[missing_pct > 30].index
#We can drop these columns with greater than 30 percent missing values
df_new = df.drop(columns = drop_cols)
#Extract columns with mising values between 1 and 30%
replace_cols = missing_pct[(missing_pct > 0) & (missing_pct < 30)].index
#Iterate to replace missing values
for col in replace_cols:
#if column is year built we replace with median otherwise the mean
if col == "Year_Built":
df_new.fillna(df_new[col].median(), inplace = True)
else:
mean_value = df_new[col].mean()
df_new.fillna(mean_value, inplace = True)
df_new.isnull().sum() #preview for missing values

Tentu saja, ada lebih banyak hal dalam menangani nilai hilang, seperti yang dibahas di kursus Datacamp tentang Dealing with Missing Values in Python. Dataset, tipe, dan struktur berbeda memiliki kebutuhan berbeda, sehingga penanganan nilai hilang bukan proses yang lurus dan seragam untuk semua jenis dataset. Gambar di bawah menunjukkan berbagai skenario untuk menerapkan teknik penghapusan atau imputasi.

Duplikat
Kita harus memastikan ada satu sumber kebenaran untuk setiap observasi. Ada skenario di mana kita memiliki beberapa observasi tentang satu pelanggan, baik karena ada pengiriman formulir ganda oleh pengguna, atau terjadi kesalahan saat entri data. Apa pun penyebabnya, kita perlu mengembangkan satu versi kebenaran yang lengkap. Ini akan membantu bisnis memastikan bahwa:
- Waktu dan uang tidak terbuang untuk menargetkan pelanggan yang sama dua kali
- Satu versi kebenaran yang tepercaya dan lengkap dikembangkan, dan keputusan bisnis yang andal dapat dibuat berdasarkan hasil analisis.
Pencilan
Pencilan adalah titik data ekstrem. Biasanya berupa nilai yang sangat rendah atau sangat tinggi yang tidak sesuai dengan pola lainnya dalam data, misalnya:
- Pelanggan berusia 200 tahun
- Bacaan sensor 40° Celsius di wilayah Antartika
Mengidentifikasi Pencilan Ada berbagai teknik untuk mengidentifikasi pencilan, baik melalui cara visual maupun teknik statistik
-
Mengurutkan dataset: Dengan sekadar mengurutkan data, seseorang dapat dengan mudah menemukan pencilan dalam dataset atau variabel yang diminati. Namun, teknik ini gagal pada dataset besar dan bisa sulit untuk meninjau semua nilai secara sekilas.
-
Visualisasi: Menggunakan teknik visual seperti boxplot, histogram, dan scatterplot dapat memudahkan deteksi pencilan.
-
Menggunakan Z-score: Teknik statistik untuk mengukur keanehan suatu nilai yang diamati dengan asumsi data berdistribusi normal. Ini adalah jumlah simpangan baku yang menunjukkan seberapa jauh nilai yang diamati berada di atas atau di bawah nilai mean.
Proses Penanganan Pencilan Penanganan pencilan berfungsi sebagai proses menghapus atau mengganti pencilan yang terwakili dalam data kita:
- Menghapus pencilan dari data: Ini dapat melibatkan penghapusan nilai yang berada pada persentil X terbawah atau teratas dari data Anda. Berikut beberapa skenario saat pencilan dapat dihapus:
- Ketika jelas bahwa data diukur secara tidak benar. Seperti disebutkan sebelumnya, pelanggan aktif yang berusia 200 tahun bukan masukan yang valid, contoh khas pencilan yang harus dihapus.
-
Jika pencilan tidak mengubah hasil analisis Anda, Anda dapat menghapusnya. Ini juga dapat dipertimbangkan ketika jumlah pencilan dalam dataset tidak banyak dibandingkan data keseluruhan.
-
Ganti pencilan: Ini melibatkan penggantian nilai ekstrem tersebut dengan nilai mean, median, atau modus. Jika jumlah pencilan cukup besar dibandingkan data aktual, maka menghapus pencilan akan gagal. Catatan: Nilai mean rentan terhadap pencilan. Oleh karena itu, disarankan mempertimbangkan nilai median atau modus untuk penggantian.
Verifikasi Data
Setelah pembersihan data selesai, penting untuk kembali menilai kualitas data melalui metode eksplorasi data. Ini untuk memverifikasi ketepatan dan kelengkapan proses pembersihan data, sebagian untuk memastikan kita tidak melewatkan langkah, dan juga untuk memastikan kita sejalan dengan konteks data.
Pembersihan data, pelaporan, dan automasi
Pelaporan mencakup pendokumentasian kondisi data pascapembersihan, serta pendokumentasian proses yang terlibat dalam pembersihan. Pelaporan memastikan adanya panduan untuk kebutuhan pembersihan data serupa di masa mendatang (reproducibility), sehingga proses ini dapat diautomasi saat diperlukan lagi.
Automasi bertujuan memastikan pembersihan data dapat direplikasi. Banyak bagian proses pembersihan data terdiri dari skrip yang dapat digunakan kembali sehingga bisa dipakai dengan hanya sedikit perubahan, bila diperlukan.
Kesimpulan
Kita telah membahas pembersihan data secara mendalam dan seluruh komponen yang perlu Anda perhatikan untuk proyek pembersihan data yang sukses. Ini adalah fase yang memakan waktu, di mana profesional data diperkirakan menghabiskan 60% dari keseluruhan proyek data science. Ini adalah fondasi yang secara tunggal akan menentukan hasil proyek data science. Data yang berbeda dari sumber berbeda memiliki kebutuhan yang bervariasi dan Anda perlu menyesuaikan prosesnya agar sesuai dengan kasus penggunaan Anda.
Sumber daya:
- Gambar yang terkait dengan transformasi data diambil dari workbook Excel yang dapat ditemukan di sini
- Notebook Python tersedia di DataCamp workspace
