3 Metode Normalisasi Data dengan R

Normalisasi Data dengan R

Seringkali kita mendengar istilah data normal, acapkali kita juga mendengar istilah transformasi. Bagi teman-teman yang pernah belajar statistika, dua istilah ini pastinya tidak asing. Terlebih di dalam dunia penelitian atau riset yang selalu berkaitan dengan data, kedua istilah ini pastinya cenderung digunakan.

Sebuah data yang menyebar secara persis mengikuti sebaran distribusi teoritis normal tidaklah ada dalam kenyataan. Kalaupun ada, peluangnya tentu sangat kecil. Oleh karena itu, istilah yang biasa digunakan dalam statistika adalah pendekatan, mendekati, atau turunan dari distribusi teoritis normal itu sendiri.

Karena keniscayaan itulah biasanya dalam dunia penelitian atau riset, sebuah data yang ditengarai tidak normal dari hasil eksplorasi data akan ditransformasi atau diubah bentuknya sedemikian rupa sehingga menyebar mendekati normal. Ketidaknormalan sebuah data biasanya terjadi karena beberapa aspek, misalnya akibat satuan antar variabel yang berbeda, yang satu dalam jutaan, yang satu dalam kilometer, yang satu miliar, sementara yang satunya lagi jiwa; bisa juga diakibatkan karena di dalam data mengandung pencilan atau outlier sehingga menimbulkan gangguan bila dimodelkan dan memperbesar varians (ragam).

Dalam kesempatan kali ini, kita coba sama-sama belajar bagaimana cara menormalisasi data dengan 3 metode dulu. Sebenarnya banyak cara yang bisa dilakukan, termasuk yang populer adalah transformasi Box-Cox, namun khusus untuk transformasi Box-Cox akan kita pelajari pada unggahan berikutnya. Baik, 3 metode yang akan kita pelajari kali ini adalah metode normalisasi maksimum-minimum, normalisasi transformasi Z atau biasa dikenal dengan Z Score, dan satu lagi yaitu normalisasi Simple Feature Scalling (SFC).

Sebelum praktik dengan menggunakan R, terlebih dulu kita harus mempersiapkan datanya. Teman-teman dapat mengunduh data yang telah saya siapkan. Datanya itu bersumber dari Kementerian Lingkungan Hidup (KLH) Provinsi Jawa Timur dengan referensi tahun 2020 kemarin dengan jumlah variabelnya ada 3, yaitu Wilayah, Jumlah Sampah (Jsam), dan Jumlah Bank Sampah (Jbs), datanya bisa diunduh pada link berikut. Selanjutnya langsung saja kita praktikkan normalisasi datanya pada R dengan menggunakan beberapa code berikut:

Code:

#Instal dan Aktivasi Package readxl
install.packages("readxl")
library(readxl)

#Import data lingkungan
dataling <- read_excel("C:/Users/Joko Ade/Downloads/lingkungan.xlsx")

#melihat identitas data
names(dataling)

Hasil:

[1] "Wilayah" "Jsam"    "Jbs"

Code:

#Melihat struktur data
str(dataling)

Hasil:

tibble [38 x 3] (S3: tbl_df/tbl/data.frame)
 $ Wilayah: chr [1:38] "Pacitan" "Ponorogo" "Trenggalek" "Tulungagung" ...
 $ Jsam   : num [1:38] 104308 127432 109537 198884 154238 ...
 $ Jbs    : num [1:38] 10 6 29 30 135 8 222 25 11 39 ...

Code:

#Karena antara variabel Jsam dan Jbs timpang maka perlu normalisasi
#Normalisasi juga bisa dilakukan untuk variabel yang mempunyai satuan berbeda
#Kita normalkan untuk yang variabel Jsam dan Jbs saja
#Kita aktifkan dulu beberapa jenis normalisasi data

#Normalisasi data dengan minimum maksimum
#Membuat Fungsi Normalisasi Data
min_max_norm <- function(x){
  (x - min(x)) / (max(x) - min(x))
}

#Normalisasi data dengan Z score atau transformasi Z
transZ <- function(x){
  (x - mean(x))/sd(x)
}

#Normalisasi data dengan teknik Simple Feature Scalling
sfc <- function(x){
  x/max(x)
}

#Normalisasi minmax
#dataling[1] artinya kita hanya memanggil data kolom 1 dari dataling
#dataling[-1] artinya kita hanya memanggil data selain kolom 1 dari dataling
#Untuk memahami lebih utuh, teman-teman bisa membaca unggahan saya tentang eksplorasi subset data di link berikut
lingkungan_mimax <- data.frame(dataling[1], lapply(dataling[-1], min_max_norm))

#Melihat data frame hasil normalisasi minmax
lingkungan_mimax

Hasil:

            Wilayah       Jsam         Jbs
1           Pacitan 0.12857613 0.042372881
2          Ponorogo 0.15708061 0.025423729
3        Trenggalek 0.13502122 0.122881356
4       Tulungagung 0.24515586 0.127118644
5            Blitar 0.19012228 0.572033898
6            Kediri 0.22886509 0.033898305
7            Malang 0.47771620 0.940677966
8          Lumajang 0.22561753 0.105932203
9            Jember 0.06748802 0.046610169
10       Banyuwangi 0.56078598 0.165254237
11        Bondowoso 0.12920620 0.072033898
12        Situbondo 0.11669050 0.258474576
13      Probolinggo 0.20741984 0.063559322
14         Pasuruan 0.52330543 0.466101695
15         Sidoarjo 0.48872038 0.050847458
16        Mojokerto 0.00000000 0.000000000
17          Jombang 0.00000000 0.000000000
18          Nganjuk 0.19028976 0.135593220
19           Madiun 0.12314314 0.470338983
20          Magetan 0.12566269 0.487288136
21            Ngawi 0.16490364 0.046610169
22       Bojonegoro 0.23346805 0.114406780
23            Tuban 0.22186742 0.330508475
24         Lamongan 0.00000000 0.000000000
25           Gresik 0.14748551 0.669491525
26        Bangkalan 0.00000000 0.000000000
27          Sampang 0.10893916 0.004237288
28        Pamekasan 0.12246471 0.063559322
29          Sumenep 0.16368308 0.076271186
30      Kota Kediri 0.06790847 0.237288136
31      Kota Blitar 0.03355257 0.216101695
32      Kota Malang 0.30494624 0.000000000
33 Kota Probolinggo 0.04308075 0.156779661
34    Kota Pasuruan 0.05965415 0.004237288
35   Kota Mojokerto 0.02778222 0.258474576
36      Kota Madiun 0.05316891 0.067796610
37    Kota Surabaya 1.00000000 1.000000000
38        Kota Batu 0.00000000 0.737288136

Code:

#Normalisasi dengan transformasi Z
lingkungan_transZ <- data.frame(dataling[1], lapply(dataling[-1], transZ))

#melihat data frame hasil normalisasi transformasi Z
lingkungan_transZ

Hasil:

            Wilayah        Jsam          Jbs
1           Pacitan -0.29017265 -0.647507004
2          Ponorogo -0.14651458 -0.711086503
3        Trenggalek -0.25769044 -0.345504383
4       Tulungagung  0.29737061 -0.329609508
5            Blitar  0.02001015  1.339352342
6            Kediri  0.21526772 -0.679296753
7            Malang  1.46943764  2.722206447
8          Lumajang  0.19890054 -0.409083882
9            Jember -0.59804698 -0.631612129
10       Banyuwangi  1.88809614 -0.186555635
11        Bondowoso -0.28699718 -0.536242880
12        Situbondo -0.35007434  0.163131609
13      Probolinggo  0.10718707 -0.568032630
14         Pasuruan  1.69920012  0.941980473
15         Sidoarjo  1.52489697 -0.615717254
16        Mojokerto -0.93817584 -0.806455751
17          Jombang -0.93817584 -0.806455751
18          Nganjuk  0.02085423 -0.297819759
19           Madiun -0.31755405  0.957875348
20          Magetan -0.30485590  1.021454847
21            Ngawi -0.10708777 -0.631612129
22       Bojonegoro  0.23846594 -0.377294133
23            Tuban  0.18000062  0.433344480
24         Lamongan -0.93817584 -0.806455751
25           Gresik -0.19487239  1.704934462
26        Bangkalan -0.93817584 -0.806455751
27          Sampang -0.38913984 -0.790560876
28        Pamekasan -0.32097323 -0.568032630
29          Sumenep -0.11323923 -0.520348005
30      Kota Kediri -0.59592800  0.083657236
31      Kota Blitar -0.76907626  0.004182862
32      Kota Malang  0.59870459 -0.806455751
33 Kota Probolinggo -0.72105572 -0.218345385
34    Kota Pasuruan -0.63752846 -0.790560876
35   Kota Mojokerto -0.79815787  0.163131609
36      Kota Madiun -0.67021301 -0.552137755
37    Kota Surabaya  4.10166477  2.944734693
38        Kota Batu -0.93817584  1.959252458

Code:

#Normalisasi dengan Simple Freature Scalling
lingkungan_sfc <- data.frame(dataling[1], lapply(dataling[-1], sfc))

#Melihat data frame hasil normalisasi Simple Feature Scalling
lingkungan_sfc

Hasil:

            Wilayah       Jsam         Jbs
1           Pacitan 0.12857613 0.042372881
2          Ponorogo 0.15708061 0.025423729
3        Trenggalek 0.13502122 0.122881356
4       Tulungagung 0.24515586 0.127118644
5            Blitar 0.19012228 0.572033898
6            Kediri 0.22886509 0.033898305
7            Malang 0.47771620 0.940677966
8          Lumajang 0.22561753 0.105932203
9            Jember 0.06748802 0.046610169
10       Banyuwangi 0.56078598 0.165254237
11        Bondowoso 0.12920620 0.072033898
12        Situbondo 0.11669050 0.258474576
13      Probolinggo 0.20741984 0.063559322
14         Pasuruan 0.52330543 0.466101695
15         Sidoarjo 0.48872038 0.050847458
16        Mojokerto 0.00000000 0.000000000
17          Jombang 0.00000000 0.000000000
18          Nganjuk 0.19028976 0.135593220
19           Madiun 0.12314314 0.470338983
20          Magetan 0.12566269 0.487288136
21            Ngawi 0.16490364 0.046610169
22       Bojonegoro 0.23346805 0.114406780
23            Tuban 0.22186742 0.330508475
24         Lamongan 0.00000000 0.000000000
25           Gresik 0.14748551 0.669491525
26        Bangkalan 0.00000000 0.000000000
27          Sampang 0.10893916 0.004237288
28        Pamekasan 0.12246471 0.063559322
29          Sumenep 0.16368308 0.076271186
30      Kota Kediri 0.06790847 0.237288136
31      Kota Blitar 0.03355257 0.216101695
32      Kota Malang 0.30494624 0.000000000
33 Kota Probolinggo 0.04308075 0.156779661
34    Kota Pasuruan 0.05965415 0.004237288
35   Kota Mojokerto 0.02778222 0.258474576
36      Kota Madiun 0.05316891 0.067796610
37    Kota Surabaya 1.00000000 1.000000000
38        Kota Batu 0.00000000 0.737288136

Oke, demikian sedikit ulasan bagaimana kita melakukan normalisasi data dalam R. Jangan lupa untuk share, tanya-tanya di kolom komentar, dan menyimak unggahan berikutnya. Semoga bermanfaat.

Add Comments


EmoticonEmoticon