Pengolahan data dilakukan melalui tahap pemeriksaan, pembersihan, analisis distribusi, Label Encoding, dan One-Hot Encoding.
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 CSV
data <- read.csv(
"C:/Users/LENOVO/Downloads/Cleaning Data 1.csv",
header = TRUE,
sep = ";",
stringsAsFactors = FALSE
)Catatan: Untuk keperluan RPubs, file
Cleaning Data 1.csvharus berada dalam folder yang sama dengan file.Rmd.
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" "Sandwich" "Coffee" "Salad" ...
## $ Quantity : int 5 4 4 1 5 3 3 1 3 1 ...
## $ Price.Per.Unit: chr "2.0" "4.0" "2.0" "5.0" ...
## $ Total.Spent : chr "10.0" "16.0" "8.0" "5.0" ...
## $ Payment.Method: chr "Digital Wallet" "Credit Card" "Digital Wallet" "Digital Wallet" ...
## $ Location : chr "In-store" "Takeaway" "Takeaway" "Takeaway" ...
## $ X : logi NA NA NA NA NA NA ...
Variabel yang digunakan dalam proses pra-pemrosesan adalah
Item, Quantity, dan Location.
Pemeriksaan missing value dilakukan untuk mengetahui apakah terdapat data yang kosong pada setiap variabel.
missing_table <- data.frame(
Variabel = names(data_clean),
Missing = colSums(is.na(data_clean))
)
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.
jumlah_error <- sum(
sapply(
data_clean,
function(x) {
sum(
as.character(x) == "ERROR",
na.rm = TRUE
)
}
)
)
jumlah_unknown <- sum(
sapply(
data_clean,
function(x) {
sum(
as.character(x) == "UNKNOWN",
na.rm = TRUE
)
}
)
)
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 | 0 |
| UNKNOWN | 0 |
Distribusi setiap kategori Item ditampilkan untuk
melihat jumlah transaksi pada setiap jenis produk.
item_freq <- table(data_clean$Item)
knitr::kable(
as.data.frame(item_freq),
col.names = c("Item", "Frekuensi"),
caption = "Distribusi Item"
)| Item | Frekuensi |
|---|---|
| Cake | 138 |
| Coffee | 118 |
| Cookie | 110 |
| Juice | 114 |
| Salad | 126 |
| Sandwich | 123 |
| Smoothie | 136 |
| Tea | 135 |
location_freq <- table(data_clean$Location)
knitr::kable(
as.data.frame(location_freq),
col.names = c("Location", "Frekuensi"),
caption = "Distribusi Location"
)| Location | Frekuensi |
|---|---|
| In-store | 300 |
| Takeaway | 700 |
Variabel kategorik diubah menjadi tipe data faktor agar dapat digunakan dalam proses encoding.
data_factor <- data_clean
data_factor$Item <- factor(data_factor$Item)
data_factor$Location <- factor(data_factor$Location)
data_factor$Quantity <- factor(data_factor$Quantity)
str(data_factor)## 'data.frame': 1000 obs. of 3 variables:
## $ Item : Factor w/ 8 levels "Cake","Coffee",..: 2 6 2 5 6 7 5 5 4 2 ...
## $ Quantity: Factor w/ 5 levels "1","2","3","4",..: 5 4 4 1 5 3 3 1 3 1 ...
## $ Location: Factor w/ 2 levels "In-store","Takeaway": 1 2 2 2 2 1 2 2 1 2 ...
Label Encoding mengubah setiap kategori menjadi kode numerik berdasarkan urutan level faktor.
data_label <- data_factor
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)
head(data_label, 5)Dictionary digunakan untuk melihat hubungan antara kategori asli dengan kode hasil Label Encoding.
dictionary_item <- data.frame(
Item = levels(data_factor$Item),
Kode = seq_along(levels(data_factor$Item))
)
knitr::kable(
dictionary_item,
caption = "Dictionary Label Encoding Item",
align = "c"
)| Item | Kode |
|---|---|
| Cake | 1 |
| Coffee | 2 |
| Cookie | 3 |
| Juice | 4 |
| Salad | 5 |
| Sandwich | 6 |
| Smoothie | 7 |
| Tea | 8 |
One-Hot Encoding mengubah setiap kategori menjadi variabel dummy dengan nilai 0 dan 1.
item_dummy <- model.matrix(
~ Item - 1,
data = data_factor
)
location_dummy <- model.matrix(
~ Location - 1,
data = data_factor
)
quantity_dummy <- model.matrix(
~ Quantity - 1,
data = data_factor
)
onehot_contoh <- data.frame(
quantity_dummy,
item_dummy,
location_dummy
)
head(onehot_contoh, 5)Validasi dilakukan untuk memastikan bahwa setiap observasi memiliki tepat satu kategori aktif pada masing-masing kelompok variabel.
item_valid <- all(
rowSums(item_dummy) == 1
)
location_valid <- all(
rowSums(location_dummy) == 1
)
quantity_valid <- all(
rowSums(quantity_dummy) == 1
)
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 |
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)
)
)
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 | 15 |
Label Encoding menghasilkan kode numerik untuk setiap kategori, sedangkan One-Hot Encoding menghasilkan beberapa variabel dummy dengan nilai 0 dan 1.
Label Encoding lebih sederhana dan menghasilkan jumlah variabel yang lebih sedikit. Sementara itu, One-Hot Encoding dapat digunakan untuk merepresentasikan kategori tanpa memberikan kesan adanya tingkatan antar kategori.
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.
Hasil One-Hot Encoding menghasilkan representasi numerik dalam bentuk variabel dummy yang dapat digunakan untuk proses analisis atau pemodelan data selanjutnya.