Menguasai Seni Pembersihan Data dengan Python - KDnuggets

Menguasai Seni Pembersihan Data dengan Python – KDnuggets

Node Sumber: 2939047

Menguasai Seni Pembersihan Data dengan Python
Gambar oleh Penulis
 

Data cleaning is a critical part of any data analysis process. It’s the step where you remove errors, handle missing data, and make sure that your data is in a format that you can work with. Without a well-cleaned dataset, any subsequent analyses can be skewed or incorrect.

Artikel ini memperkenalkan Anda pada beberapa teknik utama untuk pembersihan data dengan Python, menggunakan perpustakaan canggih seperti pandas, numpy, seaborn, dan matplotlib.

Before diving into the mechanics of data cleaning, let’s understand its importance. Real-world data is often messy. It can contain duplicate entries, incorrect or inconsistent data types, missing values, irrelevant features, and outliers. All these factors can lead to misleading conclusions when analyzing data. This makes data cleaning an indispensable part of the data science lifecycle.

Kami akan membahas tugas pembersihan data berikut.
 

Menguasai Seni Pembersihan Data dengan Python
Gambar oleh Penulis

Before getting started, let’s import the necessary libraries. We’ll be using pandas for data manipulation, and seaborn and matplotlib for visualizations.

Kami juga akan mengimpor modul Python datetime untuk memanipulasi tanggal.

import pandas as pd
import seaborn as sns
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

First, we’ll need to load our data. In this example, we’re going to load a CSV file using pandas. We also add the delimiter argument.

df = pd.read_csv('F:KDNuggetsKDN Mastering the Art of Data Cleaning in Pythonproperty.csv', delimiter= ';')

Next, it’s important to inspect the data to understand its structure, what kind of variables we’re working with, and whether there are any missing values. Since the data we imported is not huge, let’s have a look at the whole dataset.

# Look at all the rows of the dataframe
display(df)

Berikut tampilan kumpulan datanya.

 

Menguasai Seni Pembersihan Data dengan Python
 

Anda dapat langsung melihat ada beberapa nilai yang hilang. Selain itu, format tanggalnya tidak konsisten.

Sekarang, mari kita lihat ringkasan DataFrame menggunakan metode info().

# Get a concise summary of the dataframe
print(df.info())

Inilah keluaran kodenya.

 

Menguasai Seni Pembersihan Data dengan Python
 

Kita dapat melihat bahwa hanya kolom square_feet yang tidak memiliki nilai NULL, jadi kita harus menanganinya. Selain itu, kolom tanggal_iklan, dan tanggal_penjualan adalah tipe data objek, meskipun ini harus berupa tanggal.

Lokasi kolom benar-benar kosong. Apakah kita membutuhkannya?

Kami akan menunjukkan cara menangani masalah ini. Kita akan mulai dengan mempelajari cara menghapus kolom yang tidak diperlukan.

Ada dua kolom dalam kumpulan data yang tidak kami perlukan dalam analisis data, jadi kami akan menghapusnya.

Kolom pertama adalah pembeli. Kami tidak memerlukannya, karena nama pembeli tidak mempengaruhi analisis.

Kami menggunakan metode drop() dengan nama kolom yang ditentukan. Kami mengatur sumbu ke 1 untuk menentukan bahwa kami ingin menghapus kolom. Selain itu, argumen inplace disetel ke True sehingga kita mengubah DataFrame yang ada, dan tidak membuat DataFrame baru tanpa kolom yang dihapus.

df.drop('buyer', axis = 1, inplace = True)

Kolom kedua yang ingin kita hapus adalah lokasi. Meskipun informasi ini mungkin berguna, ini adalah kolom yang benar-benar kosong, jadi mari kita hapus saja.

Kami mengambil pendekatan yang sama seperti kolom pertama.

df.drop('location', axis = 1, inplace = True)

Tentu saja, Anda dapat menghapus kedua kolom ini secara bersamaan.

df = df.drop(['buyer', 'location'], axis=1)

Kedua pendekatan mengembalikan kerangka data berikut.

 

Menguasai Seni Pembersihan Data dengan Python

Data duplikat dapat terjadi pada kumpulan data Anda karena berbagai alasan dan dapat mengganggu analisis Anda.

Mari kita deteksi duplikat dalam kumpulan data kita. Inilah cara melakukannya.

Kode di bawah ini menggunakan metode ini digandakan() untuk mempertimbangkan duplikat di seluruh kumpulan data. Pengaturan defaultnya adalah menganggap kemunculan pertama suatu nilai sebagai unik dan kemunculan berikutnya sebagai duplikat. Anda dapat mengubah perilaku ini menggunakan menjaga parameter. Misalnya, df.duplikat(keep=False) akan menandai semua duplikat sebagai Benar, termasuk kemunculan pertama.

# Detecting duplicates
duplicates = df[df.duplicated()]
duplicates

Inilah hasilnya.

 

Menguasai Seni Pembersihan Data dengan Python
 

Baris dengan indeks 3 telah ditandai sebagai duplikat karena baris 2 dengan nilai yang sama merupakan kemunculan pertama.

Sekarang kita perlu menghapus duplikat, yang kita lakukan dengan kode berikut.

# Detecting duplicates
duplicates = df[df.duplicated()]
duplicates

Grafik drop_duplikat() function considers all columns while identifying duplicates. If you want to consider only certain columns, you can pass them as a list to this function like this: df.drop_duplicates(subset=[‘column1’, ‘column2’]).

 

Menguasai Seni Pembersihan Data dengan Python
 

Seperti yang Anda lihat, baris duplikat telah dihilangkan. Namun, pengindeksannya tetap sama, dengan indeks 3 hilang. Kami akan membereskannya dengan mengatur ulang indeks.

df = df.reset_index(drop=True)

Tugas ini dilakukan dengan menggunakan reset_index() fungsi. Argumen drop=True digunakan untuk membuang indeks asli. Jika Anda tidak menyertakan argumen ini, indeks lama akan ditambahkan sebagai kolom baru di DataFrame Anda. Dengan menyetel drop=True, Anda memberi tahu panda untuk melupakan indeks lama dan menyetel ulang ke indeks bilangan bulat default.

Untuk latihan, cobalah hapus duplikat dari kumpulan data Microsoft ini.

Terkadang, tipe data mungkin salah diatur. Misalnya, kolom tanggal mungkin diartikan sebagai string. Anda perlu mengonversinya ke tipe yang sesuai.

Dalam kumpulan data kami, kami akan melakukannya untuk kolom tanggal_iklan dan tanggal_penjualan, karena keduanya ditampilkan sebagai tipe data objek. Selain itu, tanggal tanggal diformat secara berbeda di seluruh baris. Kita perlu membuatnya konsisten, sekaligus mengubahnya menjadi saat ini.

Cara termudah adalah dengan menggunakan sampai_tanggal waktu() metode. Sekali lagi, Anda dapat melakukannya kolom demi kolom, seperti yang ditunjukkan di bawah ini.

Saat melakukan itu, kita menyetel argumen hari pertama ke Benar karena beberapa tanggal dimulai dengan hari pertama.

# Converting advertisement_date column to datetime
df['advertisement_date'] = pd.to_datetime(df['advertisement_date'], dayfirst = True) # Converting sale_date column to datetime
df['sale_date'] = pd.to_datetime(df['sale_date'], dayfirst = True)

Anda juga dapat mengonversi kedua kolom secara bersamaan dengan menggunakan menerapkan() metode dengan sampai_tanggal waktu().

# Converting advertisement_date and sale_date columns to datetime
df[['advertisement_date', 'sale_date']] = df[['advertisement_date', 'sale_date']].apply(pd.to_datetime, dayfirst = True)

Kedua pendekatan memberi Anda hasil yang sama.

 

Menguasai Seni Pembersihan Data dengan Python
 

Sekarang tanggalnya berada dalam format yang konsisten. Kami melihat bahwa tidak semua data telah dikonversi. Ada satu nilai NaT di tanggal_iklan dan dua di tanggal_penjualan. Ini berarti tanggalnya hilang.

Mari kita periksa apakah kolom diubah menjadi tanggal dengan menggunakan info () Metode.

# Get a concise summary of the dataframe
print(df.info())

 

Menguasai Seni Pembersihan Data dengan Python
 

Seperti yang Anda lihat, kedua kolom tidak dalam format datetime64[ns].

Sekarang, coba ubah data dari TEXT menjadi NUMERIC di sini Kumpulan data Airbnb.

Kumpulan data dunia nyata sering kali memiliki nilai yang hilang. Menangani data yang hilang sangatlah penting, karena algoritme tertentu tidak dapat menangani nilai tersebut.

Contoh kita juga memiliki beberapa nilai yang hilang, jadi mari kita lihat dua pendekatan paling umum untuk menangani data yang hilang.

Menghapus Baris Dengan Nilai yang Hilang

Jika jumlah baris dengan data yang hilang tidak signifikan dibandingkan dengan jumlah total observasi, Anda dapat mempertimbangkan untuk menghapus baris tersebut.

Dalam contoh kita, baris terakhir tidak memiliki nilai kecuali kaki persegi dan tanggal iklan. Kita tidak bisa menggunakan data tersebut, jadi mari kita hapus baris ini.

Berikut kode tempat kami menunjukkan indeks baris.

df = df.drop(8)

DataFrame sekarang terlihat seperti ini.

 

Menguasai Seni Pembersihan Data dengan Python
 

Baris terakhir telah dihapus, dan DataFrame kami sekarang terlihat lebih baik. Namun, masih ada beberapa data yang hilang yang akan kami tangani menggunakan pendekatan lain.

Mengabaikan Nilai yang Hilang

Jika Anda memiliki data yang hilang secara signifikan, strategi yang lebih baik daripada menghapus adalah dengan melakukan imputasi. Proses ini melibatkan pengisian nilai yang hilang berdasarkan data lain. Untuk data numerik, metode imputasi yang umum melibatkan penggunaan ukuran tendensi sentral (mean, median, mode).

Di DataFrame kami yang sudah diubah, kami memiliki nilai NaT (Bukan Waktu) di kolom tanggal_iklan dan tanggal_penjualan. Kami akan memperhitungkan nilai-nilai yang hilang ini menggunakan berarti() Metode.

Kode menggunakan isi () metode untuk menemukan dan mengisi nilai nol dengan nilai rata-rata.

# Imputing values for numerical columns
df['advertisement_date'] = df['advertisement_date'].fillna(df['advertisement_date'].mean())
df['sale_date'] = df['sale_date'].fillna(df['sale_date'].mean())

Anda juga dapat melakukan hal yang sama dalam satu baris kode. Kami menggunakan menerapkan() untuk menerapkan fungsi yang ditentukan menggunakan lambda. Sama seperti di atas, fungsi ini menggunakan isi () dan berarti() metode untuk mengisi nilai yang hilang.

# Imputing values for multiple numerical columns
df[['advertisement_date', 'sale_date']] = df[['advertisement_date', 'sale_date']].apply(lambda x: x.fillna(x.mean()))

Output dalam kedua kasus terlihat seperti ini.

 

Menguasai Seni Pembersihan Data dengan Python
 

Kolom tanggal_penjualan kami sekarang memiliki waktu yang tidak kami perlukan. Mari kita hapus.

Kami akan menggunakan waktu-waktu() metode, yang mengubah tanggal menjadi representasi string dan format tertentu.

df['sale_date'] = df['sale_date'].dt.strftime('%Y-%m-%d')

 

Menguasai Seni Pembersihan Data dengan Python
 

Tanggal-tanggalnya sekarang terlihat rapi.

Jika Anda perlu menggunakan waktu-waktu() pada beberapa kolom, Anda dapat menggunakannya kembali lambda cara berikut.

df[['date1_formatted', 'date2_formatted']] = df[['date1', 'date2']].apply(lambda x: x.dt.strftime('%Y-%m-%d'))

Sekarang, mari kita lihat bagaimana kita dapat memperhitungkan nilai kategorikal yang hilang.

Categorical data is a type of data that is used to group information with similar characteristics. Each of these groups is a category. Categorical data can take on numerical values (such as “1” indicating “male” and “2” indicating “female”), but those numbers do not have mathematical meaning. You can’t add them together, for instance.

Data kategorikal biasanya dibagi menjadi dua kategori:

  1. Data nominal: Ini terjadi ketika kategori hanya diberi label dan tidak dapat disusun dalam urutan tertentu. Contohnya termasuk jenis kelamin (pria, wanita), golongan darah (A, B, AB, O), atau warna kulit (merah, hijau, biru).
  1. Data biasa: Ini adalah saat kategori dapat diurutkan atau diberi peringkat. Meskipun jarak antar kategori tidak sama, namun urutan kategori mempunyai arti. Contohnya termasuk skala rating (rating 1 sampai 5 sebuah film), tingkat pendidikan (SMA, sarjana, pascasarjana), atau stadium kanker (Stage I, Stadium II, Stadium III).

Untuk memasukkan data kategorikal yang hilang, mode ini biasanya digunakan. Dalam contoh kita, kolom property_category adalah data kategorikal (nominal), dan ada data yang hilang dalam dua baris.

Mari ganti nilai yang hilang dengan mode.

# For categorical columns
df['property_category'] = df['property_category'].fillna(df['property_category'].mode()[0])

Kode ini menggunakan isi () berfungsi untuk menggantikan semua nilai NaN di kolom property_category. Ini menggantikannya dengan mode.

Additionally, the [0] part is used to extract the first value from this Series. If there are multiple modes, this will select the first one. If there’s only one mode, it still works fine.

Inilah hasilnya.

 

Menguasai Seni Pembersihan Data dengan Python
 

Datanya sekarang terlihat cukup bagus. Satu-satunya hal yang tersisa adalah melihat apakah ada outlier.

Anda dapat berlatih menangani null dalam hal ini Pertanyaan wawancara meta, di mana Anda harus mengganti NULL dengan nol.

Outliers are data points in a dataset that are distinctly different from the other observations. They may lie exceptionally far from the other values in the data set, residing outside an overall pattern. They’re considered unusual due to their values either being significantly higher or lower compared to the rest of the data.

Pencilan dapat muncul karena berbagai sebab seperti:

  • Kesalahan pengukuran atau input
  • Korupsi data
  • Anomali statistik yang sebenarnya

Pencilan dapat berdampak signifikan terhadap hasil analisis data dan pemodelan statistik Anda. Hal ini dapat menyebabkan distribusi yang miring, bias, atau membuat asumsi statistik yang mendasarinya tidak valid, mendistorsi kesesuaian model yang diperkirakan, mengurangi keakuratan prediksi model prediktif, dan menghasilkan kesimpulan yang salah.

Beberapa metode yang umum digunakan untuk mendeteksi outlier adalah Z-score, IQR (Interquartile Range), box plot, scatter plot, dan teknik visualisasi data. Dalam beberapa kasus lanjutan, metode pembelajaran mesin juga digunakan.

Visualizing data can help identify outliers. Seaborn’s boxplot is handy for this.

plt.figure(figsize=(10, 6))
sns.boxplot(data=df[['advertised_price', 'sale_price']])

Kami menggunakan plt.figure() untuk mengatur lebar dan tinggi gambar dalam inci.

Kemudian kita membuat diagram kotak untuk kolom harga_iklan dan harga_jual, yang tampilannya seperti ini.

 

Menguasai Seni Pembersihan Data dengan Python
 

Plotnya dapat diperbaiki agar lebih mudah digunakan dengan menambahkan ini ke kode di atas.

plt.xlabel('Prices')
plt.ylabel('USD')
plt.ticklabel_format(style='plain', axis='y')
formatter = ticker.FuncFormatter(lambda x, p: format(x, ',.2f'))
plt.gca().yaxis.set_major_formatter(formatter)

Kami menggunakan kode di atas untuk mengatur label untuk kedua sumbu. Kita juga memperhatikan bahwa nilai pada sumbu y berada dalam notasi ilmiah, dan kita tidak dapat menggunakannya untuk nilai harga. Jadi kita mengubahnya menjadi gaya biasa menggunakan fungsi plt.ticklabel_format().

Kemudian kita membuat formatter yang akan menampilkan nilai pada sumbu y dengan koma sebagai pemisah ribuan dan titik desimal. Baris kode terakhir menerapkan ini pada sumbu.

Outputnya sekarang terlihat seperti ini.

 

Menguasai Seni Pembersihan Data dengan Python
 

Sekarang, bagaimana kita mengidentifikasi dan menghilangkan outlier?

Salah satu caranya adalah dengan menggunakan metode IQR.

IQR, atau Interquartile Range, adalah metode statistik yang digunakan untuk mengukur variabilitas dengan membagi kumpulan data menjadi kuartil. Kuartil membagi kumpulan data yang diurutkan berdasarkan peringkat menjadi empat bagian yang sama, dan nilai dalam rentang kuartil pertama (persentil ke-25) dan kuartil ketiga (persentil ke-75) membentuk rentang antarkuartil.

The interquartile range is used to identify outliers in the data. Here’s how it works:

  1. First, calculate the first quartile (Q1), the third quartile (Q3), and then determine the IQR. The IQR is computed as Q3 – Q1.
  2. Any value below Q1 – 1.5IQR or above Q3 + 1.5IQR is considered an outlier.

On our boxplot, the box actually represents the IQR. The line inside the box is the median (or second quartile). The ‘whiskers’ of the boxplot represent the range within 1.5*IQR from Q1 and Q3.

Setiap titik data di luar kumis ini dapat dianggap outlier. Dalam kasus kami, nilainya adalah $12,000,000. Jika Anda melihat diagram kotak, Anda akan melihat betapa jelasnya hal ini terwakili, yang menunjukkan mengapa visualisasi data penting dalam mendeteksi outlier.

Sekarang, mari kita hilangkan outlier dengan menggunakan metode IQR dalam kode Python. Pertama, kami akan menghapus outlier harga yang diiklankan.

Q1 = df['advertised_price'].quantile(0.25)
Q3 = df['advertised_price'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['advertised_price'] (Q1 - 1.5 * IQR)) |(df['advertised_price'] > (Q3 + 1.5 * IQR)))]

Pertama-tama kita menghitung kuartil pertama (atau persentil ke-25) menggunakan kuantil() fungsi. Kami melakukan hal yang sama untuk kuartil ketiga atau persentil ke-75.

Mereka menunjukkan nilai yang masing-masing berada di bawah 25% dan 75% data.

Kemudian kita menghitung selisih antar kuartil. Sejauh ini semuanya hanya menerjemahkan langkah-langkah IQR ke dalam kode Python.

As a final step, we remove the outliers. In other words, all data less than Q1 – 1.5 * IQR or more than Q3 + 1.5 * IQR.

The ‘~’ operator negates the condition, so we are left with only the data that are not outliers.

Kemudian kita bisa melakukan hal yang sama dengan harga jualnya.

Q1 = df['sale_price'].quantile(0.25)
Q3 = df['sale_price'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['sale_price'] (Q1 - 1.5 * IQR)) |(df['sale_price'] > (Q3 + 1.5 * IQR)))]

Tentu saja, Anda dapat melakukannya dengan cara yang lebih ringkas menggunakan untuk loop.

for column in ['advertised_price', 'sale_price']: Q1 = df[column].quantile(0.25) Q3 = df[column].quantile(0.75) IQR = Q3 - Q1 df = df[~((df[column] (Q1 - 1.5 * IQR)) |(df[column] > (Q3 + 1.5 * IQR)))]

Perulangan mengulangi dua kolom. Untuk setiap kolom, ini menghitung IQR dan kemudian menghapus baris di DataFrame.

Harap perhatikan bahwa operasi ini dilakukan secara berurutan, pertama untuk harga_yang diiklankan dan kemudian untuk harga_jual. Hasilnya, DataFrame dimodifikasi di tempat untuk setiap kolom, dan baris dapat dihapus karena merupakan outlier di kolom mana pun. Oleh karena itu, operasi ini mungkin menghasilkan baris yang lebih sedikit dibandingkan jika outlier untuk harga_yang diiklankan dan harga_jual dihapus secara terpisah dan hasilnya kemudian digabungkan.

Dalam contoh kita, outputnya akan sama di kedua kasus. Untuk melihat perubahan plot kotaknya, kita perlu memplotnya lagi menggunakan kode yang sama seperti sebelumnya.

plt.figure(figsize=(10, 6))
sns.boxplot(data=df[['advertised_price', 'sale_price']])
plt.xlabel('Prices')
plt.ylabel('USD')
plt.ticklabel_format(style='plain', axis='y')
formatter = ticker.FuncFormatter(lambda x, p: format(x, ',.2f'))
plt.gca().yaxis.set_major_formatter(formatter)

Inilah hasilnya.

 

Menguasai Seni Pembersihan Data dengan Python
 

Anda dapat berlatih menghitung persentil dengan Python dengan menyelesaikannya Pertanyaan wawancara Majelis Umum.

Data cleaning is a crucial step in the data analysis process. Though it can be time-consuming, it’s essential to ensure the accuracy of your findings.

Fortunately, Python’s rich ecosystem of libraries makes this process more manageable. We learned how to remove unnecessary rows and columns, reformat data, and deal with missing values and outliers. These are the usual steps that have to be performed on most any data. However, you’ll also sometimes need to menggabungkan dua kolom menjadi satu, memverifikasi data yang ada, berikan label padanya, atau hilangkan spasi putih.

Semua ini adalah pembersihan data, karena memungkinkan Anda mengubah data dunia nyata yang berantakan menjadi kumpulan data terstruktur dengan baik yang dapat Anda analisis dengan percaya diri. Bandingkan saja kumpulan data yang kita mulai dengan kumpulan data yang kita gunakan pada akhirnya.

Jika Anda tidak melihat kepuasan dari hasil ini dan data yang bersih tidak membuat Anda bersemangat, apa yang sedang Anda lakukan dalam ilmu data!?
 

Nat Rosidi adalah seorang ilmuwan data dan dalam strategi produk. Dia juga seorang profesor yang mengajar analitik, dan merupakan pendiri Goresan Strata, sebuah platform yang membantu ilmuwan data mempersiapkan wawancara mereka dengan pertanyaan wawancara nyata dari perusahaan terkemuka. Terhubung dengan dia di Twitter: StrataScratch or LinkedIn.

Stempel Waktu:

Lebih dari KDnugget