2026-10-04Pengolahan data dilakukan melalui tahap pemeriksaan, pembersihan, analisis distribusi, Label Encoding, dan One-Hot Encoding.
Data penjualan kafe merupakan salah satu sumber informasi yang dapat digunakan untuk mengetahui karakteristik transaksi, jenis produk yang dijual, jumlah produk yang dibeli, serta lokasi transaksi. Namun, sebelum data digunakan untuk analisis lebih lanjut, diperlukan proses pra-pemrosesan agar data memiliki struktur yang sesuai dan dapat diolah dengan baik.
Pra-pemrosesan data merupakan tahap penting dalam analisis data karena kondisi data yang belum terstruktur dapat memengaruhi hasil analisis maupun pemodelan. Salah satu proses yang dilakukan dalam pra-pemrosesan adalah mengubah variabel kategorik menjadi bentuk numerik. Hal ini diperlukan karena sebagian metode analisis dan algoritma pemodelan membutuhkan data dalam bentuk numerik.
Pada data penjualan kafe, variabel seperti Item,
Location, dan Quantity dapat diperlakukan
sebagai variabel kategorik. Oleh karena itu, digunakan dua metode
encoding, yaitu Label Encoding dan One-Hot
Encoding. Label Encoding memberikan kode numerik pada setiap
kategori, sedangkan One-Hot Encoding mengubah setiap kategori menjadi
variabel dummy dengan nilai 0 dan 1.
Selain proses encoding, data juga perlu diperiksa terlebih dahulu
melalui pemeriksaan struktur, ukuran data, missing value, serta nilai
ERROR dan UNKNOWN. Pemeriksaan tersebut
dilakukan untuk memastikan bahwa data yang digunakan berada dalam
kondisi yang layak untuk tahap analisis selanjutnya.
Berdasarkan hal tersebut, dilakukan pra-pemrosesan pada data penjualan kafe melalui tahapan pemeriksaan data, pemilihan variabel, analisis distribusi, perubahan tipe data menjadi faktor, Label Encoding, serta One-Hot Encoding.
Berdasarkan latar belakang tersebut, rumusan masalah dalam proses pra-pemrosesan data ini adalah:
Tujuan dari proses pra-pemrosesan data penjualan kafe ini adalah:
Pra-pemrosesan data merupakan tahap awal dalam analisis data yang bertujuan untuk memastikan data berada dalam kondisi yang baik sebelum digunakan pada tahap analisis selanjutnya.
Pada data penjualan kafe ini, proses pra-pemrosesan meliputi pemeriksaan struktur data, pemilihan variabel, pemeriksaan kualitas data, analisis distribusi, perubahan tipe data menjadi faktor, Label Encoding, serta One-Hot Encoding.
Data dibaca menggunakan fungsi read.csv(). Karena file
menggunakan pemisah titik koma, maka argumen sep = ";"
digunakan.
# Membaca file EXCEL
data <- read.csv(
"~/data_sampel (2).csv",
header = TRUE,
sep = ";",
stringsAsFactors = FALSE
)
# Melihat lima data pertama
head(data)Catatan: Untuk keperluan RPubs, file
Cleaning Data 1.csvharus berada dalam folder yang sama dengan file.Rmd, atau path file disesuaikan dengan lokasi file pada komputer.
Ukuran dan struktur data diperiksa untuk mengetahui jumlah observasi, jumlah variabel, serta tipe data yang tersedia.
## [1] 1000 8
## 'data.frame': 1000 obs. of 8 variables:
## $ Transaction.ID : chr "TXN_2176024" "TXN_6327139" "TXN_5488764" "TXN_9530003" ...
## $ Item : chr "Coffee" "ERROR" "Coffee" "Salad" ...
## $ Quantity : chr "5" "4" "4" "1" ...
## $ Price.Per.Unit : chr "ERROR" "4.0" "2.0" "5.0" ...
## $ Total.Spent : chr "10.0" "16.0" "8.0" "5.0" ...
## $ Payment.Method : chr "Digital Wallet" "" "Digital Wallet" "Digital Wallet" ...
## $ Location : chr "In-store" "Takeaway" "Takeaway" "" ...
## $ Transaction.Date: chr "03/02/2023" "ERROR" "30/06/2023" "24/08/2023" ...
Pemeriksaan missing value dilakukan untuk mengetahui apakah terdapat data yang kosong pada setiap variabel.
# Menghitung jumlah missing value
missing_table <- data.frame(
Variabel = names(data_clean),
Missing = colSums(is.na(data_clean))
)
# Menampilkan hasil
knitr::kable(
missing_table,
caption = "Jumlah Missing Value pada Setiap Variabel",
align = "c"
)| Variabel | Missing | |
|---|---|---|
| Item | Item | 0 |
| Quantity | Quantity | 0 |
| Location | Location | 0 |
Selain missing value, dilakukan pemeriksaan terhadap nilai
ERROR dan UNKNOWN.
# Menghitung jumlah ERROR
jumlah_error <- sum(
sapply(
data_clean,
function(x) {
sum(
as.character(x) == "ERROR",
na.rm = TRUE
)
}
)
)
# Menghitung jumlah UNKNOWN
jumlah_unknown <- sum(
sapply(
data_clean,
function(x) {
sum(
as.character(x) == "UNKNOWN",
na.rm = TRUE
)
}
)
)
# Membuat tabel ringkasan kualitas data
knitr::kable(
data.frame(
Pemeriksaan = c(
"Missing Value",
"ERROR",
"UNKNOWN"
),
Jumlah = c(
sum(is.na(data_clean)),
jumlah_error,
jumlah_unknown
)
),
caption = "Ringkasan Kualitas Data",
align = "c"
)| Pemeriksaan | Jumlah |
|---|---|
| Missing Value | 0 |
| ERROR | 80 |
| UNKNOWN | 76 |
Distribusi setiap kategori Item ditampilkan untuk
melihat jumlah transaksi pada setiap jenis produk.
# Membuat tabel frekuensi Item
item_freq <- table(data_clean$Item)
# Menampilkan distribusi Item
knitr::kable(
as.data.frame(item_freq),
col.names = c("Item", "Frekuensi"),
caption = "Distribusi Item"
)| Item | Frekuensi |
|---|---|
| 28 | |
| Cake | 129 |
| Coffee | 108 |
| Cookie | 101 |
| ERROR | 29 |
| Juice | 105 |
| Salad | 111 |
| Sandwich | 112 |
| Smoothie | 129 |
| Tea | 122 |
| UNKNOWN | 26 |
# Membuat grafik distribusi Item
barplot(
item_freq,
main = "Distribusi Item",
xlab = "Item",
ylab = "Frekuensi",
las = 2
)# Membuat tabel frekuensi Location
location_freq <- table(data_clean$Location)
# Menampilkan distribusi Location
knitr::kable(
as.data.frame(location_freq),
col.names = c("Location", "Frekuensi"),
caption = "Distribusi Location"
)| Location | Frekuensi |
|---|---|
| 322 | |
| ERROR | 37 |
| In-store | 300 |
| Takeaway | 306 |
| UNKNOWN | 35 |
# Membuat grafik distribusi Location
barplot(
location_freq,
main = "Distribusi Location",
xlab = "Location",
ylab = "Frekuensi"
)# Membuat tabel frekuensi Quantity
quantity_freq <- table(data_clean$Quantity)
# Menampilkan distribusi Quantity
knitr::kable(
as.data.frame(quantity_freq),
col.names = c("Quantity", "Frekuensi"),
caption = "Distribusi Quantity"
)| Quantity | Frekuensi |
|---|---|
| 15 | |
| 1 | 177 |
| 2 | 200 |
| 3 | 174 |
| 4 | 194 |
| 5 | 211 |
| ERROR | 14 |
| UNKNOWN | 15 |
# Membuat grafik distribusi Quantity
barplot(
quantity_freq,
main = "Distribusi Quantity",
xlab = "Quantity",
ylab = "Frekuensi"
)Variabel kategorik diubah menjadi tipe data faktor agar dapat digunakan dalam proses encoding.
# Membuat salinan data
data_factor <- data_clean
# Mengubah variabel menjadi faktor
data_factor$Item <- factor(data_factor$Item)
data_factor$Location <- factor(data_factor$Location)
data_factor$Quantity <- factor(data_factor$Quantity)
# Melihat struktur data
str(data_factor)## 'data.frame': 1000 obs. of 3 variables:
## $ Item : Factor w/ 11 levels "","Cake","Coffee",..: 3 5 3 7 8 9 7 5 6 3 ...
## $ Quantity: Factor w/ 8 levels "","1","2","3",..: 6 5 5 2 6 4 4 2 4 2 ...
## $ Location: Factor w/ 5 levels "","ERROR","In-store",..: 3 4 4 1 1 3 2 1 3 1 ...
Label Encoding mengubah setiap kategori menjadi kode numerik berdasarkan urutan level faktor.
# Membuat salinan data
data_label <- data_factor
# Membuat kode numerik
data_label$Item_Code <- as.integer(data_label$Item)
data_label$Location_Code <- as.integer(data_label$Location)
data_label$Quantity_Code <- as.integer(data_label$Quantity)
# Melihat hasil
head(data_label, 5)Dictionary digunakan untuk melihat hubungan antara kategori asli dengan kode hasil Label Encoding.
# Membuat dictionary Item
dictionary_item <- data.frame(
Item = levels(data_factor$Item),
Kode = seq_along(levels(data_factor$Item))
)
# Menampilkan dictionary
knitr::kable(
dictionary_item,
caption = "Dictionary Label Encoding Item",
align = "c"
)| Item | Kode |
|---|---|
| 1 | |
| Cake | 2 |
| Coffee | 3 |
| Cookie | 4 |
| ERROR | 5 |
| Juice | 6 |
| Salad | 7 |
| Sandwich | 8 |
| Smoothie | 9 |
| Tea | 10 |
| UNKNOWN | 11 |
One-Hot Encoding mengubah setiap kategori menjadi variabel dummy dengan nilai 0 dan 1.
# One-Hot Encoding Item
item_dummy <- model.matrix(
~ Item - 1,
data = data_factor
)
# One-Hot Encoding Location
location_dummy <- model.matrix(
~ Location - 1,
data = data_factor
)
# One-Hot Encoding Quantity
quantity_dummy <- model.matrix(
~ Quantity - 1,
data = data_factor
)
# Menggabungkan seluruh variabel dummy
onehot_contoh <- data.frame(
quantity_dummy,
item_dummy,
location_dummy
)
# Melihat lima data pertama
head(onehot_contoh, 5)Validasi dilakukan untuk memastikan bahwa setiap observasi memiliki tepat satu kategori aktif pada masing-masing kelompok variabel.
# Validasi Item
item_valid <- all(
rowSums(item_dummy) == 1
)
# Validasi Location
location_valid <- all(
rowSums(location_dummy) == 1
)
# Validasi Quantity
quantity_valid <- all(
rowSums(quantity_dummy) == 1
)
# Menampilkan hasil validasi
knitr::kable(
data.frame(
Variabel = c(
"Item",
"Location",
"Quantity"
),
Validasi = c(
item_valid,
location_valid,
quantity_valid
)
),
caption = "Hasil Validasi One-Hot Encoding",
align = "c"
)| Variabel | Validasi |
|---|---|
| Item | TRUE |
| Location | TRUE |
| Quantity | TRUE |
# Membuat tabel perbandingan ukuran data
perbandingan <- data.frame(
Tahap = c(
"Data Awal",
"Data Setelah Pemilihan Variabel",
"Data Setelah One-Hot Encoding"
),
Baris = c(
nrow(data),
nrow(data_clean),
nrow(data_onehot)
),
Kolom = c(
ncol(data),
ncol(data_clean),
ncol(data_onehot)
)
)
# Menampilkan tabel
knitr::kable(
perbandingan,
caption = "Perbandingan Ukuran Data",
align = "c"
)| Tahap | Baris | Kolom |
|---|---|---|
| Data Awal | 1000 | 8 |
| Data Setelah Pemilihan Variabel | 1000 | 3 |
| Data Setelah One-Hot Encoding | 1000 | 24 |
Label Encoding mengubah setiap kategori ke dalam bentuk kode numerik, sedangkan One-Hot Encoding merepresentasikan setiap kategori melalui sejumlah variabel dummy yang memiliki nilai 0 dan 1.
Dibandingkan dengan One-Hot Encoding, Label Encoding memiliki proses yang lebih sederhana dan menghasilkan jumlah variabel yang relatif lebih sedikit. Namun, penggunaan kode numerik dapat menimbulkan interpretasi seolah-olah terdapat hubungan urutan atau tingkatan antar kategori, padahal pada variabel kategorik tertentu tidak terdapat hubungan tersebut.
Sebaliknya, One-Hot Encoding memisahkan setiap kategori ke dalam variabel yang berbeda sehingga tidak menunjukkan adanya urutan antar kategori. Meskipun metode ini dapat meningkatkan jumlah variabel yang dihasilkan, One-Hot Encoding umumnya lebih tepat digunakan untuk merepresentasikan variabel kategorik nominal, terutama dalam proses analisis dan pemodelan data.
Berdasarkan proses pra-pemrosesan yang telah dilakukan, data penjualan kafe berhasil dipersiapkan melalui beberapa tahap.
Tahapan tersebut meliputi pemeriksaan kondisi awal data, pemilihan
variabel, pemeriksaan missing value, ERROR, dan
UNKNOWN, analisis distribusi data, perubahan tipe data
menjadi faktor, Label Encoding, serta One-Hot Encoding.
Label Encoding menghasilkan representasi kategori dalam bentuk kode numerik. Sementara itu, One-Hot Encoding menghasilkan variabel dummy dengan nilai 0 dan 1 untuk setiap kategori.
Hasil akhir dari proses One-Hot Encoding dapat digunakan sebagai data numerik untuk mendukung proses analisis atau pemodelan pada tahap berikutnya.