0% menganggap dokumen ini bermanfaat (0 suara)
6 tayangan

Modul 2 - Data Clening dan Preprocessing

Modul ini membahas tentang data cleaning dan preprocessing, termasuk teknik-teknik untuk menangani data yang hilang, tidak konsisten, outliers, dan duplikasi. Mahasiswa diharapkan dapat menggunakan Python dan library terkait untuk melakukan langkah-langkah ini, serta memahami pentingnya preprocessing dalam analisis data. Praktikum mencakup instalasi, penggunaan dataset, dan penerapan teknik-teknik tersebut secara langsung.

Diunggah oleh

KTI ID
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
6 tayangan

Modul 2 - Data Clening dan Preprocessing

Modul ini membahas tentang data cleaning dan preprocessing, termasuk teknik-teknik untuk menangani data yang hilang, tidak konsisten, outliers, dan duplikasi. Mahasiswa diharapkan dapat menggunakan Python dan library terkait untuk melakukan langkah-langkah ini, serta memahami pentingnya preprocessing dalam analisis data. Praktikum mencakup instalasi, penggunaan dataset, dan penerapan teknik-teknik tersebut secara langsung.

Diunggah oleh

KTI ID
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 12

Modul 2

Data Cleaning & Preprocessing


2.1. Tujuan Praktikum
1. Mahasiswa mampu memahami karakteristik data
2. Mahasiswa mampu menjelaskan dan menggunakan teknik-teknik data preprocessing
dengan python
2.2. Alat dan Bahan
1. Jupyter Notebook atau IDE Python yang lain.
2. Python v.3 atau lebih baru.
3. Library pandas, matplotlib, dll.
4. Dataset dari asisten praktikum
2.3. Landasan Teori
Data preprocessing adalah proses persiapan data sebelum data tersebut digunakan
dalam analisis atau pengolahan lebih lanjut. Tujuan dari data preprocessing adalah untuk
membersihkan, mengorganisasi, dan mentransformasi data sehingga data menjadi lebih
cocok untuk analisis, pemodelan, atau tugas tertentu. Berikut adalah beberapa langkah-
langkah umum dalam data preprocessing:
1. Collecting Data (Pengumpulan Data):
Pertama, data perlu dikumpulkan dari berbagai sumber yang relevan. Data ini
bisa berupa data mentah dari berbagai database, file, atau API.
2. Data Cleaning (Pembersihan Data):
Identifikasi dan penanganan data yang hilang (missing data) atau data yang
tidak valid. Ini bisa termasuk menghapus atau mengisi nilai-nilai yang hilang.
3. Data Transformation (Transformasi Data):
Transformasi data adalah proses mengubah format atau nilai data. Beberapa
langkah yang umum dilakukan adalah:
Normalisasi: Menyelaraskan skala data sehingga semuanya memiliki
rentang yang seragam.
Encoding: Mengubah data kategori atau kualitatif menjadi format yang bisa
diproses oleh algoritma, seperti one-hot encoding.
Scaling: Mengubah data numerik agar memiliki skala yang seragam, seperti
menggunakan z-score atau min-max scaling.
Aggregasi: Menggabungkan data untuk menciptakan ringkasan atau
statistik agregat.
4. Data Reduction (Pengurangan Data):
Dalam beberapa kasus, data yang sangat besar bisa diurangi agar lebih mudah
dikelola tanpa kehilangan informasi penting. Teknik pengurangan data bisa
termasuk pengambilan sampel, pemilihan atribut, atau reduksi dimensi.
5. Data Integration (Integrasi Data):
Jika data berasal dari berbagai sumber, Anda mungkin perlu
menggabungkannya menjadi satu dataset tunggal sehingga dapat dianalisis
bersama-sama.
6. Data Splitting (Pemisahan Data):
Biasanya, data dibagi menjadi dataset pelatihan (training set) dan dataset
pengujian (testing set) untuk tujuan pengembangan model. Ini dilakukan untuk
menghindari overfitting dan menguji kinerja model.
7. Handling Outliers (Penanganan Pencilan):
Pencilan (outliers) adalah nilai yang signifikan dari pola umum data. Penanganan
outliers bisa meliputi penghapusan, penggantian, atau pemodelan khusus.
8. Feature Engineering (Rekayasa Fitur):
Membuat atau mengubah atribut (fitur) yang lebih informatif atau relevan untuk
tugas yang ada.
9. Data Visualization (Visualisasi Data):
Visualisasi data membantu dalam pemahaman data sebelum analisis lebih
lanjut. Grafik dan plot data bisa membantu mengidentifikasi pola dan tren.
10. Documentation (Dokumentasi):
Penting untuk mendokumentasikan semua langkah-langkah preprocessing yang
telah dilakukan agar orang lain dapat memahami dan mengulanginya jika
diperlukan.
Data preprocessing adalah langkah kunci dalam data science dan analisis data, karena
data yang baik dan bersih akan menghasilkan hasil analisis yang lebih baik dan model
yang lebih akurat.
2.4. Langkah-langkah Praktikum
1. Instalasi dan Persiapan Dataset
1. Pastikan Anda sudah menginstalasi Python pada komputer yang anda gunakan
2. Pastikan Anda menggunakan dataset
diabetes_prediction_dataset_uncleaned.csv yang disediakan oleh pengampu /
asisten praktikum disini.
2. Instalasi Library dan Loading library
In [1]: %%capture

## instalasi ini hanya dilakukan jika di


## komputer anda belum terinstall library tsb.
!pip install pandas missingno numpy matplotlib seaborn scipy

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
import missingno as msno
from scipy import stats

3. Load Dataset
In [2]: dataset = pd.read_csv('diabetes_prediction_dataset_uncleaned.csv')

4. Data Cleaning
A. Menangani Missing Value
Missing value (nilai yang hilang) adalah kondisi dimana data untuk suatu
variabel atau atribut tidak ada atau tidak terisi dalam dataset.
In [3]: # mendapatkan missing value pada setiap kolom
missing_values_count = dataset.isnull().sum()

#cek missing value


missing_values_count
Out[3]: gender 2
age 3
hypertension 0
heart_disease 0
smoking_history 0
bmi 0
HbA1c_level 3
blood_glucose_level 0
diabetes 0
dtype: int64

Hasil : Ada missing value pada kolom gender, age dan HbA1c_level
In [4]: #cek shape untuk melihat jumlah row saat ini
dataset.shape

Out[4]: (100010, 9)

Solusi 1: Menghapus row dengan gender yang kosong.


In [5]: dataset.dropna(subset=['gender'], inplace=True)

In [6]: # cek kembali missing value


missing_values_count = dataset.isnull().sum()

missing_values_count

Out[6]: gender 0
age 3
hypertension 0
heart_disease 0
smoking_history 0
bmi 0
HbA1c_level 3
blood_glucose_level 0
diabetes 0
dtype: int64

In [7]: #cek shape setelah dihapus


dataset.shape

Out[7]: (100008, 9)

Amati jumlah data sebelum dan sesudah dihapus gender yang kosong
Solusi 2: Menggunakan Data Imputation : Mengisi kolom age dengan nilai
median umur yang ada, dan kolom HbA1c_level dengan rata-rata dari data
yang ada.
In [8]: dataset = dataset.fillna({
'age': dataset['age'].median(),
'HbA1c_level': dataset['age'].mean(),
})

In [9]: # cek kembali missing value setelah dilalukan imputation


missing_values_count = dataset.isnull().sum()

missing_values_count

Out[9]: gender 0
age 0
hypertension 0
heart_disease 0
smoking_history 0
bmi 0
HbA1c_level 0
blood_glucose_level 0
diabetes 0
dtype: int64

Hasil : Missing value berhasil diatasi


B. Menangani Data yang tidak konsisten (Inconsistent Data)
Data yang tidak konsisten, sering disebut sebagai inconsistent data,
merujuk pada situasi di mana data dalam sebuah dataset atau basis data
tidak mematuhi aturan atau format yang konsisten. Ini dapat disebabkan
oleh berbagai faktor, termasuk kesalahan penginputan, perbedaan dalam
format data, atau perubahan aturan bisnis. Data yang tidak konsisten
sering terjadi pada kolom dengan data text.
In [10]: # Cek unique values untuk melihat inconsistent data
# pada kolom smoking_history
smoking = dataset['smoking_history'].unique()

# urutkan secara alphabet


smoking.sort()
smoking

Out[10]: array(['No Info', 'NoInfo', 'Not Info', 'curent', 'current', 'ever',


'former', 'never', 'noever', 'not current'], dtype=object)

Hasil : Beberapa data kelihatan inconsistent seperti


['No Info', 'NoInfo', 'Not Info', 'curent', 'current', 'ever', 'former', 'never', 'noever', 'not
current']
beberapa kata dalam kolom smoking_history tidak konsisten, maka diperlukan perbaikan
pada data yang tidak konsisten tersebut
Solusi : menggunakan Fuzzy Matching untuk mengkoreksi inconsistent
data. Fuzzy matching adalah proses mencocokkan teks atau data yang
mirip, tetapi tidak persis sama, dengan menggunakan algoritma atau
metode yang memperhitungkan kesalahan pengejaan, variasi format, dan
perbedaan minor dalam data untuk menemukan kesamaan atau kemiripan.
In [11]: %%capture

# instalasi library fuzzywuzzy dan load library fuzzywuzzy


!pip install fuzzywuzzy

import fuzzywuzzy
from fuzzywuzzy import process

In [12]: # mendapatkan 10 kata terdekat dengan "No Info"


# pada kolom smoking_history
matches = fuzzywuzzy.process.extract(
"No Info",
smoking,
limit=10,
scorer=fuzzywuzzy.fuzz.token_sort_ratio)
matches

Out[12]: [('No Info', 100),


('Not Info', 93),
('NoInfo', 62),
('not current', 44),
('former', 31),
('noever', 31),
('never', 17),
('curent', 15),
('current', 14),
('ever', 0)]

Kata "No Info", "Not Info", dan "NoInfo" akan dikoreksi menjadi "No Info"
In [13]: # membuat fungsi untuk mengganti kata pada kolom tertentu
# pada dataframe berdasarkan rasio kemiripan

def replace_inconsistent_data(df, column, string_to_match, min_ratio=47):


# dapatkan unique string
strings = df[column].unique()

# 10 teratas uniquer string


matches = fuzzywuzzy.process.extract(
string_to_match,
strings,
limit=10,
scorer=fuzzywuzzy.fuzz.token_sort_ratio)

# dapatkan kata dengan rasio kemiripan > 90


close_matches = [
matches[0] for matches in matches if matches[1] >= min_ratio
]

# dapatkan rows yang mirip pada kolom tertentu


rows_with_matches = df[column].isin(close_matches)

# replace dengan string_to_match


df.loc[rows_with_matches, column] = string_to_match

print("Penggantian data selesai!")

In [14]: # mengganti kata yang mirip dengan "No Info" pada kolom smoking_history
replace_inconsistent_data(df=dataset,
column='smoking_history',
string_to_match="No Info")

Penggantian data selesai!

In [15]: # cek kembali kata unik


smoking = dataset['smoking_history'].unique()

# urutkan secara alphabet


smoking.sort()
smoking

Out[15]: array(['No Info', 'curent', 'current', 'ever', 'former', 'never',


'noever', 'not current'], dtype=object)

Kerjakan tugas berikut :


Lakukan koreksi pada data lain pada kolom smoking_history dan gender sampai
tidak ada inconsistent data pada kolom-kolom tersebut
C. Menangani Data Outliers
Data outliers adalah nilai yang secara signifikan berbeda dari pola umum
dalam sebuah dataset.
In [16]: # melihat outlier dengan boxplot pada kolom age

plt.figure(figsize=(4,3))
dataset.boxplot(column='age')

Out[16]: <AxesSubplot:>
Hasil : Ada dua record pada kolom age yang menunjukkan outliers dengan nilai 120
dan 140. Untuk itu diperlukan koreksi pada nilai tersebut dengan nilai yang wajar.
Dalam hal ini akan digunakan nilai median dari semua umur

Solusi: Menggunakan menggunakan nilai median untuk mengganti age


yang lebih dari 100.
In [17]: # age dengan nilai diatas seratus akan diganti dengan
# nilai median semua data age
dataset.loc[dataset['age'] > 100, 'age'] = dataset['age'].mean()

In [18]: # cek kembali outlier dengan boxplot dan histogram plot pada kolom age
plt.figure(figsize=(8,3))
plt.subplot(1, 2, 1)
plt.boxplot(dataset['age'])

plt.subplot(1, 2, 2)
plt.hist(dataset['age'], edgecolor='white')

plt.show()
Hasil : Kolom age sudah menunjukkan nilai yang wajar.
D. Menangani Duplikasi Data (Deduplication)
Deduplikasi (deduplication) adalah proses mengidentifikasi dan
menghapus atau menggabungkan entitas ganda atau duplikat dalam
sebuah dataset atau basis data.
In [19]: # cek duplicate rows
duplicate = dataset[dataset.duplicated()]
duplicate

Out[19]: gender age hypertension heart_disease smoking_history bmi HbA1c_le


2756 Male 80.0 0 0 No Info 27.32
3272 Female 80.0 0 0 No Info 27.32
3418 Female 19.0 0 0 No Info 27.32
3939 Female 78.0 1 0 former 27.32
3960 Male 47.0 0 0 No Info 27.32
... ... ... ... ... ... ...
100001 Female 55.0 0 0 never 35.42
100002 Female 55.0 0 0 never 35.42
100003 Female 55.0 0 0 never 35.42
100005 Female 13.0 0 0 No Info 31.31
100006 Male 43.0 0 0 No Info 27.32
3859 rows × 9 columns
Hasil : Ada 3859 rows yang terduplikasi pada semua kolom

Solusi: Menghapus data duplicate.


In [20]: dataset.drop_duplicates(inplace=True)

In [21]: # cek kembali duplicate rows


duplicate = dataset[dataset.duplicated()]
duplicate

Out[21]: gender age hypertension heart_disease smoking_history bmi HbA1c_level bloo

Hasil : Data duplicate sudah terhapus

5. Data Preprocessing
Mempersiapkan data untuk digunakan sebagai dataset pada metode-
metode data mining
A. Menggunakan Label Encoder
Label encoder adalah teknik dalam pemrosesan data yang digunakan
untuk mengubah nilai-nilai kategori (label) dalam dataset menjadi nilai
numerik, sehingga memungkinkan algoritma machine learning untuk
bekerja dengan data kualitatif.
In [22]: # cek unique values pada gender
gender = dataset['gender'].unique()
gender

Out[22]: array(['Female', 'Male', 'Other'], dtype=object)

In [23]: #import label encoder


from sklearn import preprocessing

# gunakan label encoder pada kolom gender


label_encoder = preprocessing.LabelEncoder()
dataset['gender'] = label_encoder.fit_transform(dataset['gender'])
dataset.head()
Out[23]: gender age hypertension heart_disease smoking_history bmi HbA1c_level b
0 0 80.0 0 1 never 25.19 6.6
1 0 54.0 0 0 No Info 27.32 6.6
2 1 28.0 0 0 never 27.32 5.7
3 0 36.0 0 0 current 23.45 5.0
4 1 76.0 1 1 current 20.14 4.8

Hasil : Kolom gender sudah menjadi numeric

Kerjakan tugas berikut :


Lakukan label encoder pada kolom smoking_history
B. Membagi data menjadi training data dan testing data
Dengan menggunakan satu dataset memungkinkan membagi dataset
untuk training dan testing / validasi
In [24]: # menggunakan sklearn library untuk membagi menjadi train dan test
from sklearn.model_selection import train_test_split

# ukuran untuk data test adalah 20% (0,2) dari total data
train, test = train_test_split(dataset, test_size=0.2)

In [25]: # cek jumlah train dan test data


train.shape

Out[25]: (76919, 9)

In [26]: test.shape

Out[26]: (19230, 9)

2.5. Tugas dan Latihan (belum)


Gunakan dataset dengan nama household_uncleaned.csv yang disediakan oleh asisten
praktikum, lalu kerjakan dan jawab tugas-tugas berikut ini:
1. Apakah data tersebut memiliki missing value? Pada kolom apa saja?
2. Bersihkan missing value (jika ada) dengan teknik imputasi!
3. Adakah data kolom yang tidak konsisten pada kolom category, sub_category, dan
format? Tunjukkan data-data tersebut!
4. Ada kolom yang memiliki outliers?
5. Bersihkan outliers dengan menghapus record yang memiliki outliers!
6. Adakah data yang terduplikasi? Bersihkan data yang terduplikasi jika ada!
7. Gunakan label encoder untuk merubah format dan sub_category menjadi numeric!

Anda mungkin juga menyukai