| Komponen | Keterangan |
|---|---|
| Nama | Nadi Nabilla |
| Mata Kuliah | Data Mining |
| Topik | Data Preprocessing |
| Perangkat Lunak | R dan RStudio |
| Project | project_preprocessing_nadi nabilla |
Setelah menyelesaikan praktikum ini, mahasiswa diharapkan mampu:
Pada praktikum ini digunakan data pelanggan dan data transaksi dari sebuah perusahaan e-commerce fiktif.
Data pelanggan terdiri atas beberapa informasi seperti:
customer_idnamausiapendapatankotastatusSementara itu, data transaksi berisi informasi transaksi yang dilakukan oleh setiap pelanggan.
Data sengaja dibuat memiliki beberapa permasalahan seperti:
Oleh karena itu, diperlukan proses preprocessing sebelum data digunakan untuk analisis lebih lanjut.
Project digunakan agar seluruh file yang digunakan dalam praktikum tersimpan dalam satu folder.
Project yang digunakan pada praktikum ini adalah:
project_preprocessing_nadi nabilla
Direktori kerja diperiksa menggunakan fungsi
getwd().
getwd()
## [1] "C:/Users/Lenovo/Documents/project_prepocessing_nadi nabilla"
Versi R yang digunakan juga diperiksa menggunakan:
R.version.string
## [1] "R version 4.5.1 (2025-06-13 ucrt)"
Data pelanggan dibuat menggunakan fungsi
data.frame().
pelanggan_raw <- data.frame(
customer_id = c(
"C001", "C002", "C003", "C004", "C005", "C006",
"C007", "C008", "C009", "C010", "C010", "C011"
),
nama = c(
"Ani", "Budi", "Citra", "Dodi", "Eka", "Fani",
"Gilang", "Hana", "Indra", "Joko", "Joko", "Kiki"
),
usia = c(
21, 25, 23, 150, 27, NA,
31, 29, 22, 35, 35, 28
),
pendapatan = c(
4500000, NA, 5200000, 4800000,
4900000, 5100000, 500000000, 4700000,
4600000, 5300000, 5300000, NA
),
kota = c(
"Pekanbaru", "PKU", "PEKANBARU", "Dumai",
"pekanbaru", "DUMAI", "Pekanbaru", "Siak",
"PKU", "Dumai", "Dumai", NA
),
status = c(
"Aktif", "aktif", "ACTIVE", "A",
"Tidak Aktif", "nonaktif", "Aktif",
"AKTIF", "A", "Tidak aktif",
"Tidak aktif", "Aktif"
),
stringsAsFactors = FALSE
)
pelanggan_raw
Data transaksi kemudian dibuat sebagai dataset kedua.
transaksi_raw <- data.frame(
customer_id = c(
"C001", "C002", "C003", "C004", "C005", "C006",
"C007", "C008", "C009", "C010", "C011"
),
jumlah_transaksi = c(
5, 3, 8, 2, 6, 4, 10, 3, 7, 9, 5
),
total_pembelian = c(
1500000, 900000, 3200000, 750000,
2100000, 1800000, 4500000, 1200000,
2800000, 3500000, 1900000
)
)
transaksi_raw
Struktur dataset diperiksa untuk mengetahui tipe setiap variabel.
str(pelanggan_raw)
## 'data.frame': 12 obs. of 6 variables:
## $ customer_id: chr "C001" "C002" "C003" "C004" ...
## $ nama : chr "Ani" "Budi" "Citra" "Dodi" ...
## $ usia : num 21 25 23 150 27 NA 31 29 22 35 ...
## $ pendapatan : num 4.5e+06 NA 5.2e+06 4.8e+06 4.9e+06 5.1e+06 5.0e+08 4.7e+06 4.6e+06 5.3e+06 ...
## $ kota : chr "Pekanbaru" "PKU" "PEKANBARU" "Dumai" ...
## $ status : chr "Aktif" "aktif" "ACTIVE" "A" ...
Ringkasan statistik digunakan untuk melihat karakteristik awal variabel numerik maupun kategorik.
summary(pelanggan_raw)
## customer_id nama usia pendapatan
## Length:12 Length:12 Min. : 21.00 Min. : 4500000
## Class :character Class :character 1st Qu.: 24.00 1st Qu.: 4725000
## Mode :character Mode :character Median : 28.00 Median : 5000000
## Mean : 38.73 Mean : 54440000
## 3rd Qu.: 33.00 3rd Qu.: 5275000
## Max. :150.00 Max. :500000000
## NA's :1 NA's :2
## kota status
## Length:12 Length:12
## Class :character Class :character
## Mode :character Mode :character
##
##
##
##
Jumlah baris dan kolom diperiksa menggunakan fungsi berikut.
dim(pelanggan_raw)
## [1] 12 6
Nilai yang hilang diperiksa pada setiap variabel.
colSums(is.na(pelanggan_raw))
## customer_id nama usia pendapatan kota status
## 0 0 1 2 1 0
Jumlah keseluruhan nilai yang hilang:
sum(is.na(pelanggan_raw))
## [1] 4
Data duplikat diperiksa menggunakan fungsi
duplicated().
duplicated(pelanggan_raw)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
Jumlah baris yang terduplikasi:
sum(duplicated(pelanggan_raw))
## [1] 1
Data duplikat kemudian dapat diperiksa lebih lanjut.
pelanggan_raw[duplicated(pelanggan_raw), ]
Nilai pada variabel kota diperiksa terlebih dahulu.
unique(pelanggan_raw$kota)
## [1] "Pekanbaru" "PKU" "PEKANBARU" "Dumai" "pekanbaru" "DUMAI"
## [7] "Siak" NA
Frekuensi setiap kategori:
table(pelanggan_raw$kota, useNA = "ifany")
##
## Dumai DUMAI pekanbaru Pekanbaru PEKANBARU PKU Siak <NA>
## 3 1 1 2 1 2 1 1
Kategori kemudian dapat diseragamkan.
pelanggan_raw$kota <- trimws(tolower(pelanggan_raw$kota))
pelanggan_raw$kota[pelanggan_raw$kota %in% c("pku", "pekanbaru")] <- "Pekanbaru"
pelanggan_raw$kota[pelanggan_raw$kota == "dumai"] <- "Dumai"
pelanggan_raw$kota[pelanggan_raw$kota == "siak"] <- "Siak"
Pemeriksaan kembali:
unique(pelanggan_raw$kota)
## [1] "Pekanbaru" "Dumai" "Siak" NA
Nilai pada variabel status diperiksa.
unique(pelanggan_raw$status)
## [1] "Aktif" "aktif" "ACTIVE" "A" "Tidak Aktif"
## [6] "nonaktif" "AKTIF" "Tidak aktif"
Kategori kemudian diseragamkan.
pelanggan_raw$status <- trimws(tolower(pelanggan_raw$status))
pelanggan_raw$status[
pelanggan_raw$status %in% c("aktif", "active", "a")
] <- "Aktif"
pelanggan_raw$status[
pelanggan_raw$status %in% c("tidak aktif", "nonaktif")
] <- "Tidak Aktif"
Pemeriksaan kembali:
table(pelanggan_raw$status, useNA = "ifany")
##
## Aktif Tidak Aktif
## 8 4
Variabel usia diperiksa menggunakan boxplot.
boxplot(
pelanggan_raw$usia,
main = "Boxplot Usia",
ylab = "Usia"
)
Dari pemeriksaan tersebut dapat diketahui apakah terdapat nilai usia yang tidak wajar.
Variabel pendapatan juga diperiksa menggunakan boxplot.
boxplot(
pelanggan_raw$pendapatan,
main = "Boxplot Pendapatan",
ylab = "Pendapatan"
)
Nilai ekstrem kemudian dievaluasi sebelum dilakukan penanganan.
Transformasi dilakukan untuk memastikan data memiliki format yang sesuai untuk analisis.
Contohnya adalah memastikan variabel numerik memiliki tipe data numerik.
pelanggan_raw$usia <- as.numeric(pelanggan_raw$usia)
pelanggan_raw$pendapatan <- as.numeric(
pelanggan_raw$pendapatan
)
Data pelanggan dan data transaksi digabungkan berdasarkan
customer_id.
data_final <- merge(
pelanggan_raw,
transaksi_raw,
by = "customer_id",
all.x = TRUE
)
Hasil penggabungan:
data_final
str(data_final)
## 'data.frame': 12 obs. of 8 variables:
## $ customer_id : chr "C001" "C002" "C003" "C004" ...
## $ nama : chr "Ani" "Budi" "Citra" "Dodi" ...
## $ usia : num 21 25 23 150 27 NA 31 29 22 35 ...
## $ pendapatan : num 4.5e+06 NA 5.2e+06 4.8e+06 4.9e+06 5.1e+06 5.0e+08 4.7e+06 4.6e+06 5.3e+06 ...
## $ kota : chr "Pekanbaru" "Pekanbaru" "Pekanbaru" "Dumai" ...
## $ status : chr "Aktif" "Aktif" "Aktif" "Aktif" ...
## $ jumlah_transaksi: num 5 3 8 2 6 4 10 3 7 9 ...
## $ total_pembelian : num 1500000 900000 3200000 750000 2100000 1800000 4500000 1200000 2800000 3500000 ...
colSums(is.na(data_final))
## customer_id nama usia pendapatan
## 0 0 1 2
## kota status jumlah_transaksi total_pembelian
## 1 0 0 0
summary(data_final)
## customer_id nama usia pendapatan
## Length:12 Length:12 Min. : 21.00 Min. : 4500000
## Class :character Class :character 1st Qu.: 24.00 1st Qu.: 4725000
## Mode :character Mode :character Median : 28.00 Median : 5000000
## Mean : 38.73 Mean : 54440000
## 3rd Qu.: 33.00 3rd Qu.: 5275000
## Max. :150.00 Max. :500000000
## NA's :1 NA's :2
## kota status jumlah_transaksi total_pembelian
## Length:12 Length:12 Min. : 2.000 Min. : 750000
## Class :character Class :character 1st Qu.: 3.750 1st Qu.:1425000
## Mode :character Mode :character Median : 5.500 Median :2000000
## Mean : 5.917 Mean :2304167
## 3rd Qu.: 8.250 3rd Qu.:3275000
## Max. :10.000 Max. :4500000
##
dim(data_final)
## [1] 12 8
Jumlah baris dan kolom sebelum preprocessing:
dim(pelanggan_raw)
## [1] 12 6
Jumlah baris dan kolom dataset akhir:
dim(data_final)
## [1] 12 8
Perbandingan ini digunakan untuk memastikan bahwa proses preprocessing dan penggabungan data berjalan sesuai dengan tujuan.
Dataset akhir yang telah melalui proses preprocessing dapat dilihat menggunakan:
head(data_final)
Dataset tersebut selanjutnya dapat digunakan untuk proses analisis atau pemodelan.
Berdasarkan praktikum yang telah dilakukan, proses preprocessing merupakan tahap penting sebelum data digunakan untuk analisis.
Pada praktikum ini dilakukan pemeriksaan struktur data, identifikasi nilai yang hilang, pemeriksaan duplikasi, penyeragaman data kategorik, pemeriksaan outlier, transformasi data, serta penggabungan data pelanggan dan transaksi.
Setelah proses preprocessing selesai, diperoleh dataset yang lebih terstruktur dan siap digunakan untuk tahap analisis selanjutnya.
Han, J., Kamber, M., & Pei, J. (2012). Data Mining: Concepts and Techniques. Morgan Kaufmann.