Analitika Data I
Semester Ganjil 2022/2023
Data
Preprocessing
Oleh:
Syaiful Anam, [Link], MT, Ph.D
Lab. Komputer dan Sains Data
Program Studi Sarjana Ilmu Aktuaria
Jurusan Matematika
Universitas Brawijaya Copy Right @Syaiful Anam Matematika UB
Data Preprocessing
Pembersihan Data
Integrasi Data dan
Transformasi Data
Reduksi Data
Copy Right @Syaiful Anam Matematika UB
Mengapa Data dilakukan Pre Processing?
Data di dunia nyata kotor
Occupation=“”
incomplete
noisy Salary=“-10”
Age=“42”
Tidak konsisten Birthday=“03/07/1997”
Peringkat "1,2,3",
sekarang peringkat "A, B,
C”
Copy Right @Syaiful Anam Matematika UB
Contoh data yang tidak lengkap
Client Nama Alamat TglLahir Majalah Umur
Number yang dibeli
22003 Dwi Jl Pasuruan No.1 15/04/86 Car 20
22003 Dwi Jl. Pasuruan No.1 15/04/86 20
22004 Sidiq Jl. Lumajang No.2 15/05/86 Music 20
22003 Dwi Jl. Pasuruan No.1 15/04/86 House 20
Copy Right @Syaiful Anam Matematika UB
Contoh
Client Nama Alamat TglLahir Majalah Umur
Number yang
dibeli
22003 Dwi Jl Pasuruan No.1 15/04/86 Car 20
22003 Dwi Jl. Pasuruan No.1 15/04/86 Music 40
22004 Sidiq Jl. Lumajang No.2 15/05/86 Music 20
22003 Dwi Jl. Pasuruan No.1 15/04/86 House 20
Copy Right @Syaiful Anam Matematika UB
Contoh
Client Nama Alamat TglLahir Majalah yang Umur
Number dibeli
22003 Dwi Jl Pasuruan No.5 15/04/86 Car 20
22003 Dwi Jl. Malang No.1 15/04/86 Music 20
22019 Dewi Jl. Pasuruan No.1 15/05/86 Music 20
22019 Dewi Jl. Pasuruan No.1 15/04/86 House 20
Copy Right @Syaiful Anam Matematika UB
Contoh
Client Nama Alamat TglLahir Majalah Umur
Number yang dibeli
22003 Dwi Jl Pasuruan No.1 15/04/86 Car 20
22003 Dwi Jl. Pasuruan No.1 15/04/86 Music -20
22004 Sidiq Jl. Lumajang No.2 15/05/86 Music 20
22003 Dwi Jl. Pasuruan No.1 15/04/86 House 20
Copy Right @Syaiful Anam Matematika UB
Read CSV File
# impor dataset
dataset = pd.read_csv(
'contoh_dataset.csv',
delimiter=';',
header='infer',
index_col=False
)
Copy Right @Syaiful Anam Matematika UB
Ada beberapa parameter metode
read_csv():
• Nama file (dalam hal ini contoh_dataset.csv),
• delimiter : meskipun format file adalah csv (comma
separated values), delimiter data belum tentu karakter
koma (dalam hal ini ;),
• header : indeks baris yang digunakan sebagai nama kolom,
dalam hal ini ditentukan secara otomatis oleh library
('infer'),
• index_col : kolom yang digunakan sebagai label baris dan
indexing. Tidak diperlukan untuk kasus ini (False).
Copy Right @Syaiful Anam Matematika UB
Contoh
• Menampilkan data kosong di Python
Copy Right @Syaiful Anam Matematika UB
Contoh Menampilkan data di
Python
# impor library
import numpy as np
import pandas as pd
data = {
'Province': ['Banten', 'DKI Jakarta','Jawa Barat','Banten','Jawa Barat','DKI
Jakarta','Banten','Banten','Jawa Barat','DKI Jakarta','Banten','Banten','Jawa
Barat','DKI Jakarta','DKI Jakarta'],
'Age': [24,[Link],60,34,58,[Link],21,44,40,51,32,30,30,19,25],
'Wage':
[5000000,3400000,7350000,3500000,[Link],8000000,5500000,10000000,9
000000,10500000,[Link],6400000,[Link],2200000,4500000],
'Life insured':
['Yes','No','No','No','Yes','No','No','Yes','Yes','Yes','No','No','No','Yes','Yes'],
}
dataset = [Link](data)
[Link](10)
Copy Right @Syaiful Anam Matematika UB
Contoh Menampilkan data di
Python
• dataset=pd.read_csv('[Link]')
• [Link]()
Copy Right @Syaiful Anam Matematika UB
Mengapa data tidak lengkap?
◼ Data tidak lengkap berasal dari
– Tidak ada nilai data saat
dikumpulkan
– Pertimbangan yang berbeda
antara waktu ketika data
dikumpulkan dan ketika
dianalisis.
– Masalah manusia / perangkat
keras / perangkat lunak
Copy Right @Syaiful Anam Matematika UB
Mengapa data bernoise?
◼ Data bernoise berasal dari proses
– Koleksi
– Entri
– Transmisi
Copy Right @Syaiful Anam Matematika UB
Mengapa data tidak konsisten?
◼ Data tidak konsisten berasal
dari
– Perbedaan sumber data
Copy Right @Syaiful Anam Matematika UB
Tugas Utama dalam Preprocessing Data
◼ Pembersihan Data
❑ Mengisi nilai-nilai yang hilang,
❑ Melakukan smooting noisy data
❑ Mengidentifikasi atau menghapus outlier, dan
❑ Menyelesaikan inkonsistensi
Copy Right @Syaiful Anam Matematika UB
Tugas Utama dalam Preprocessing
Data
◼ Integrasi Data
◼ Mengintegrasikan multiple databases, data cubes, or
files
Copy Right @Syaiful Anam Matematika UB
Tugas Utama dalam Preprocessing
Data
◼ Transformasi Data
– Menormalisasi and aggregation
Copy Right @Syaiful Anam Matematika UB
Tugas Utama dalam Preprocessing
Data
◼ Reduksi Data
– Memperoleh pengurangan representasi volume tetapi
menghasilkan hasil analitik yang sama atau serupa
Copy Right @Syaiful Anam Matematika UB
Tugas Utama dalam Preprocessing Data
◼ Diskritisasi Data
– Bagian dari reduksi data tetapi dengan kepentingan
khusus, terutama untuk data numerik
Copy Right @Syaiful Anam Matematika UB
Data preprocessing
◼ Kebutuhan untuk pra-pemrosesan di DM
◼ Pengurangan data - terlalu banyak data
◼ Pembersihan data - noise
◼ Integrasi dan transformasi data
Copy Right @Syaiful Anam Matematika UB
Tugas dari Pembersihan Data
◼ Mengisi nilai yang hilang
◼ Identifikasi pencilan dan menghaluskan data bernoise
◼ Memperbaiki data yang tidak konsisten
◼ Mengatasi redundansi yang disebabkan oleh integrasi
data
Copy Right @Syaiful Anam Matematika UB
Data Hilang
◼ Data tidak selalu tersedia
– Contoh. Banyak instances mempunyai nilai
yang tidak tersimpan untuk beberapa atribut,
contohnya seperti customer income dalam
data penjualan
Copy Right @Syaiful Anam Matematika UB
Data hilang mungkin disebabkan
oleh
❑ Kerusakan peralatan
❑ Tdak konsisten dengan data yang direkam lainnya
dan karenanya dihapus
❑ Data tidak dimasukkan karena kesalahpahaman
❑ Data tertentu mungkin tidak dianggap penting pada
saat masuk
❑ tidak terdaftar dalam riwayat atau perubahan data
Data yang hilang mungkin
perlu diinferensi
Copy Right @Syaiful Anam Matematika UB
Bagaimana Menangani Data yang
Hilang?
• Abaikan tupel
• Metode ini tidak terlalu efektif, kecuali tupel berisi
beberapa atribut dengan nilai yang hilang.
• Ini sangat buruk ketika persentase nilai yang hilang
per atribut sangat bervariasi.
Copy Right @Syaiful Anam Matematika UB
Abaikan tupel / menghapus tupple
• [Link](inplace=True)
• [Link](20)
Copy Right @Syaiful Anam Matematika UB
Bagaimana Menangani Data yang
Hilang?
• Mengisi nilai yang hilang secara manual: Secara
umum, pendekatan ini memakan waktu dan
mungkin tidak layak diberikan satu set data besar
dengan banyak nilai yang hilang.
Copy Right @Syaiful Anam Matematika UB
Bagaimana Menangani Data yang
Hilang?
• Gunakan konstanta global untuk mendapatkan
nilai yang hilang.
• Ganti semua nilai atribut yang hilang dengan
konstanta yang sama, seperti label seperti \ Tidak
Dikenal ", atau 1.
• Metode ini sederhana, tetapi tidak dianjurkan.
Copy Right @Syaiful Anam Matematika UB
Bagaimana Menangani Data yang
Hilang?
• Gunakan atribut mean untuk mengisi nilai yang
hilang
• Misalnya, anggaplah pendapatan rata-rata semua
pelanggan Electronics adalah $ 28.000.
• Gunakan nilai ini untuk menggantikan nilai
pendapatan yang hilang.
Copy Right @Syaiful Anam Matematika UB
Slicing
• Data kemudian dibagi menjadi dua jenis: data
independen/prediktor (X) dan data dependen/target (y).
Pembagian data ini menggunakan pandas.
• [Link] seperti di bawah. Karena dataset adalah
matriks M*N, kita menggunakan slicing dengan format
[baris, kolom].
• Untuk dataset contoh:
• X = [Link][:, :-1].values
• y = [Link][:, -1].values
Copy Right @Syaiful Anam Matematika UB
Menangani nilai kosong (NaN)
• Ada dua pilihan: hapus observasi itu, atau substitusi nilai
dengan mean/rata-rata kolom itu.
• # menangani nilai kosong
from [Link] import SimpleImputer
# ganti NaN dengan mean kolom itu
imputer = SimpleImputer(missing_values=[Link], strategy='mean')
imputer = [Link](X[:, 2:4])
X[:, 2:4] = [Link](X[:, 2:4])
print(X)
Copy Right @Syaiful Anam Matematika UB
Mengisi dengan mean
• dataset[‘Column_name’]=dataset[‘Column_name’].fillna(me
an_value).
Copy Right @Syaiful Anam Matematika UB
Bagaimana Menangani Data yang
Hilang?
• Gunakan nilai yang paling mungkin untuk nilai yang
hilang
• Ini dapat ditentukan dengan alat berbasis inferensi
menggunakan formalisme Bayesian atau induksi
pohon keputusan.
• Misalnya, menggunakan atribut pelanggan lain
dalam kumpulan data Anda, Anda dapat membuat
pohon keputusan untuk memprediksi nilai yang
hilang untuk pendapatan.
Copy Right @Syaiful Anam Matematika UB
Data Bernoise
◼ Noise: kesalahan acak atau varians dalam variabel yang
diukur
◼ Atributsalah mungkin disebabkan
– instrumen pengumpulan data yang salah
– masalah entri data
– masalah transmisi data
– keterbatasan teknologi
◼ Masalah data lainnya yang membutuhkan pembersihan
data
– rekaman rangkap
– data tidak lengkap
– data tidak konsisten
Copy Right @Syaiful Anam Matematika UB
Bagaimana Cara Menangani Data
Bernoise?
◼ Binning method:
– Pertama, mengurutkan data dan partisi menjadi bin (equi-
kedalaman)
– Langkah selanjutnya menghaluskan dengan rata-rata bin,
menghaluskan dengan median bin, atau menghaluskan
dengan batas bin, dll.
◼ Regresi
– menghaluskan dengan memasukkan data ke dalam fungsi
regresi
◼ Clustering
o Mendeteksi dan menghilangkan outlier
◼ Kombinasi Komputer dan inspeksi manusia
o Mendeteksi nilai-nilai yang mencurigakan dan memeriksa oleh
manusia (mis., berurusan dengan kemungkinan pencilan)
Copy Right @Syaiful Anam Matematika UB
Metode Binning untuk Data Smoothing
• * Data yang diurutkan untuk harga (dalam dolar): 4, 8, 9, 15, 21,
21, 24, 25, 26, 28, 29, 34
• * Partition into (equi-depth) bins:
• Bin 1: 4, 8, 9, 15
• Bin 2: 21, 21, 24, 25
• Bin 3: 26, 28, 29, 34
• * Smoothing dengan bin means:
• Bin 1: 9, 9, 9, 9
• Bin 2: 23, 23, 23, 23
• Bin 3: 29, 29, 29, 29
• * Smoothing dengan bin boundaries:
• Bin 1: 4, 4, 4, 15
• Bin 2: 21, 21, 25, 25
• Bin 3: 26, 26, 26, 34
Copy Right @Syaiful Anam Matematika UB
Metode Binning untuk Data
Smoothing
import numpy as np
import math
dataset = [4, 8, 9, 15, 21, 21, 24, 25, 26, 28, 29, 34]
b = dataset #[Link](len(dataset))
b=[Link](b)#sort the array
# create bins
bin=[Link]([3,4])
# Bin mean
for i in range(0,12,4):
k=int(i/4)
mean=(b[i] + b[i+1] + b[i+2] + b[i+3])/4
print(mean)
for j in range(4):
bin[k,j]=mean
print("Bin Mean: \n",bin)
Copy Right @Syaiful Anam Matematika UB
Metode Binning untuk Data
Smoothing
import numpy as np
import math
dataset = [4, 8, 9, 15, 21, 21, 24, 25, 26, 28, 29, 34]
b = dataset #[Link](len(dataset))
b=[Link](b)#sort the array
# create bins
bin=[Link]([3,4])
# Bin mean
for i in range(0,12,4):
k=int(i/4)
print(b[i+3])
for j in range(4):
if (b[i+j]-b[i]) < (b[i+3]-b[i+j]):
bin[k,j]=b[i]
else:
bin[k,j]=b[i+3]
print("Bin Boundary: \n",bin)
Copy Right @Syaiful Anam Matematika UB
Metode Binning untuk Data
Smoothing
import numpy as np
import math
dataset = [4, 8, 9, 15, 21, 21, 24, 25, 26, 28, 29, 34]
b = dataset #[Link](len(dataset))
b=[Link](b)#sort the array
# create bins
bdata=4
bin=[Link]([3,4])
# Bin mean
for i in range(0,12,4):
k=int(i/bdata)
for j in range(4):
if bdata%2==0:
bin[k,j]=(b[i+(bdata)//2-1]+b[i+bdata//2])/2
else:
bin[k,j]=b[i+(bdata)//2]
print("Bin Boundary: \n",bin)
Copy Right @Syaiful Anam Matematika UB
Regression
Y1
Y1’ y=x+1
X1 x
Copy Right @Syaiful Anam Matematika UB
Analisis Cluster
Copy Right @Syaiful Anam Matematika UB
Integrasi Data
◼ Integrasi Data
– menggabungkan data dari berbagai sumber ke
penyimpanan yang koheren
– Masalah identifikasi entitas: mengidentifikasi
entitas dunia nyata dari berbagai sumber data,
contoh., [Link]-id [Link]-#
◼ Mendeteksi dan menyelesaikan konflik nilai data
– untuk entitas dunia nyata yang sama, nilai atribut
dari sumber berbeda adalah berbeda
– kemungkinan alasan: representasi berbeda, skala
berbeda.
Copy Right @Syaiful Anam Matematika UB
Menangani Redundansi dalam Integrasi
Data
◼ Data redundan sering terjadi ketika integrasi beberapa basis
data
– Atribut yang sama mungkin memiliki nama yang berbeda
di database yang berbeda
– Satu atribut dapat menjadi atribut "turunan" di tabel lain,
mis., Pendapatan tahunan
◼ Datayang redundan mungkin dapat dideteksi dengan
analisis korelasional
◼ Integrasi
data yang cermat dari berbagai sumber dapat
membantu mengurangi / menghindari redudansi dan
inkonsistensi dan meningkatkan kecepatan dan kualitas
penambangan Copy Right @Syaiful Anam Matematika UB
Transformasi Data
◼ Smoothing: menghilangkan noise dari data
◼ Aggregation: peringkasan
◼ Normalisasi: diskalakan agar jatuh dalam kisaran kecil yang ditentukan
– Normalisasi min-max
– Normalisasi z-score
– Normalisasi dengan penskalaan desimal
◼ Konstruksi fitur/ atribut
– Atribut baru dibangun dari yang diberikan
Copy Right @Syaiful Anam Matematika UB
Mengkodekan data kategori
• # kodekan data kategori
• from [Link] import OneHotEncoder
• from [Link] import ColumnTransformer
• # kodekan nama provinsi (kolom ke-0)
• # kode hanya sebatas penanda
• encoder_X = ColumnTransformer([('province_encoder',
OneHotEncoder(), [1])], remainder='passthrough')
• X= encoder_X.fit_transform(X).astype(float)
• print(X)
Copy Right @Syaiful Anam Matematika UB
Mengkodekan data kategori
• # y adalah dependent, cukup kodekan ke angka
• from [Link] import LabelEncoder
• labelencoder_y = LabelEncoder()
• y = labelencoder_y.fit_transform(y)
• print(y)
Copy Right @Syaiful Anam Matematika UB
Membagi dataset ke
dalam training set dan test set
• from sklearn.model_selection import train_test_split
• X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.2, random_state=0)
• Untuk parameter:
• test_size : proporsi test set, dalam hal ini 0.2.
• train_size: proporsi train size. Jika tidak di set, maka akan
menyesuaikan dengan test size (dalam kasus ini 0.8).
Berlaku kebalikannya.
• random_state : konstan ini akan membuat hasil splitting
tetap sama antar runtime atau antar mesin. Nilai bebas.
Copy Right @Syaiful Anam Matematika UB
Transformasi Data: Normalisasi
◼ Normalisasi min-max
v − minA
v' = (new _ maxA − new _ minA) + new _ minA
maxA − minA
◼ Normalisasi z-score
v − meanA
v' =
stand _ devA
◼ Normalisasi dengan penskalaan desimal
v
v'= j dimana j adalah bilangan bulat integer terkecil
10 sedemikian sehingga Max(|v' |)<1
Copy Right @Syaiful Anam Matematika UB
Contoh
• Misalkan data untuk analisis termasuk usia atribut. Nilai
usia untuk tupel data adalah (dalam urutan meningkat):
• 13, 15, 16, 16, 19, 20, 20, 21, 22, 22, 25, 25, 25, 25,
30, 33, 33, 35, 35, 35, 35, 36, 40, 45, 46, 52, 70.
a)Gunakan normalisasi min-max untuk mengubah nilai 35
untuk usia ke kisaran [0; 1].
b)Gunakan normalisasi z-skor untuk mengubah nilai 35
untuk usia, di mana standar deviasi usia adalah ?.
c) Gunakan normalisasi dengan penskalaan desimal untuk
mengubah nilai 35 untuk usia.
Copy Right @Syaiful Anam Matematika UB
Gunakan normalisasi min-max untuk mengubah
nilai 35 untuk usia ke kisaran [0; 1].
• data=[13, 15, 16, 16, 19, 20, 20, 21, 22, 22, 25, 25, 25,
25, 30, 33, 33, 35,...
• 35, 35, 35, 36, 40, 45, 46, 52, 70]
• Maks=max(data);
• Mins=min(data);
• minnew=input('Minimum Baru =');
• maxnew=input('Maximum Baru =');
• databaru=(35-Mins)/(Maks-Mins)*(maxnew-
minnew)+minnew
Copy Right @Syaiful Anam Matematika UB
Gunakan normalisasi z-skor untuk mengubah nilai 35
untuk usia, di mana standar deviasi usia adalah ??.
• data=[13, 15, 16, 16, 19, 20, 20, 21, 22, 22, 25, 25, 25,
25, 30, 33, 33, 35,...
• 35, 35, 35, 36, 40, 45, 46, 52, 70]
• rata=mean(data);
• STD=std(data);
• databaru=(35-rata)/STD
Copy Right @Syaiful Anam Matematika UB
Gunakan normalisasi dengan penskalaan
desimal untuk mengubah nilai 35 untuk usia
• data=[13, 15, 16, 16, 19, 20, 20, 21, 22, 22, 25, 25, 25,
25, 30, 33, 33, 35,...
• 35, 35, 35, 36, 40, 45, 46, 52, 70]
• Max=max(data);
• j=1;
• while (abs(Max)/10^j>1)
• j=j+1;
• end;
• Databaru=35/10^j
Copy Right @Syaiful Anam Matematika UB
Normalisasi
• from [Link] import StandardScaler
• sc = StandardScaler()
• # variabel dummy kode provinsi juga diskalakan
• X_train = sc.fit_transform(X_train)
• X_test = [Link](X_test)
• print(X_test)
Copy Right @Syaiful Anam Matematika UB
Reduksi Data
◼ Agregasidata
◼ Pemilihan fitur dan pengurangan dimensi
◼ Sampling
– Sampling secara acak
◼ Instance
selection (search based)
◼ Kompresi Data
◼ PCA, Transformasi Wavelet
◼ Diskritisasi Data
Copy Right @Syaiful Anam Matematika UB
Histograms
40
◼ Teknik reduksi data yang
populer 35
◼ Membagi data menjadi
ember dan simpan rata- 30
rata (jumlah) untuk setiap
ember 25
◼ Dapat dibangun secara 20
optimal dalam satu
dimensi menggunakan 15
pemrograman dinamis
10
◼ Terkait dengan masalah
kuantisasi. 5
0
10000 30000 50000 70000 90000
Copy Right @Syaiful Anam Matematika UB
Sampling
Raw Data
Copy Right @Syaiful Anam Matematika UB
Sampling
Raw Data Cluster/Stratified Sample
Copy Right @Syaiful Anam Matematika UB
Diskritisasi
◼ Tigatipe atribut:
– Nominal - nilai dari himpunan tidak berurutan
– Ordinal - nilai dari set yang dipesan
– Continuous - bilangan real
◼ Diskritisasi:
– Membagi rentang atribut kontinu ke dalam interval
– Beberapa algoritma klasifikasi hanya menerima
atribut kategorikal.
– Mengurangi ukuran data dengan diskritisasi
– Bersiaplah untuk analisis lebih lanjut
Copy Right @Syaiful Anam Matematika UB
Beberapa teknik diskritisasi
• Metode Binning– equal-width, equal-frequency
• Metode berbasis Entropy
Copy Right @Syaiful Anam Matematika UB
Metode Binning
• Nilai Atribut (untuk satu atribut :umur):
• 0, 4, 12, 16, 16, 18, 24, 26, 28
• Equi-width binning – untuk bin width =10:
• Bin 1: 0, 4 [-,10) bin
• Bin 2: 12, 16, 16, 18 [10,20) bin
• Bin 3: 24, 26, 28 [20,+) bin
• – denote negative infinity, + positive infinity
• Equi-frequency binning – untuk bin density = 3:
• Bin 1: 0, 4, 12 [-, 14) bin
• Bin 2: 16, 16, 18 [14, 21) bin
• Bin 3: 24, 26, 28 [21,+] bin
Copy Right @Syaiful Anam Matematika UB
Data Preprocessing in Python
using Scikit Learn
• Di python, scikit-learn library memiliki fungsi bawaan di
bawah [Link].
• Ada lebih banyak opsi untuk pra-pemrosesan
Copy Right @Syaiful Anam Matematika UB
Contoh Data Preprocessing
• [Link]
remove-the-outliers-404d16608dba
• [Link]
beginners
• [Link]
for-missing-data-imputation
Copy Right @Syaiful Anam Matematika UB