knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE,
fig.align = "center",
fig.width = 9,
fig.height = 5.5,
out.width = "95%"
)Data penjualan merupakan salah satu sumber informasi yang dapat digunakan untuk memahami aktivitas transaksi pada sebuah usaha. Pada data penjualan kafe, terdapat beberapa variabel yang menggambarkan produk, lokasi, jumlah pembelian, serta informasi transaksi lainnya.
Sebelum data digunakan untuk proses analisis lebih lanjut, diperlukan tahapan persiapan data agar struktur dan format setiap variabel sesuai dengan kebutuhan analisis. Tahapan tersebut meliputi pemeriksaan dataset, pembersihan variabel yang tidak digunakan, pemeriksaan kategori, transformasi variabel kategorik menjadi factor, serta proses encoding.
Salah satu metode encoding yang digunakan dalam pengolahan data
kategorik adalah One-Hot Encoding. Metode ini mengubah kategori menjadi
beberapa variabel biner sehingga data kategorik dapat direpresentasikan
dalam bentuk numerik. Pada laporan ini, proses One-Hot Encoding
dilakukan menggunakan package fastDummies dan fungsi
model.matrix().
Beberapa permasalahan yang dibahas dalam pengolahan data ini adalah:
fastDummies?model.matrix()?Tujuan dari pengolahan data ini adalah:
fastDummies.model.matrix().Dataset yang digunakan merupakan data penjualan kafe yang tersimpan dalam format CSV. Lokasi file ditentukan terlebih dahulu agar dataset dapat dibaca menggunakan R.
## [1] TRUE
Hasil dari pemeriksaan tersebut digunakan untuk memastikan bahwa file dataset tersedia pada lokasi yang telah ditentukan.
Dataset kemudian dibaca menggunakan fungsi read.csv().
Pemisah antar kolom yang digunakan adalah titik koma
(;).
Beberapa variabel tidak digunakan dalam proses encoding pada laporan ini. Variabel tersebut dihapus agar dataset lebih fokus pada variabel yang akan digunakan dalam proses analisis.
data$X <- NULL
data$Payment.Method <- NULL
data$Total.Spent <- NULL
data$Price.Per.Unit <- NULL
data$Transaction.ID <- NULL
head(data)Setelah variabel yang tidak diperlukan dihapus, dataset menjadi lebih sederhana dan hanya mempertahankan variabel yang diperlukan untuk proses berikutnya.
Nama variabel diperiksa untuk mengetahui kolom yang tersedia setelah proses pembersihan.
## [1] "Item" "Quantity" "Location"
Struktur setiap variabel diperiksa menggunakan fungsi
str().
## 'data.frame': 1000 obs. of 3 variables:
## $ Item : chr "Coffee" "Sandwich" "Coffee" "Salad" ...
## $ Quantity: int 5 4 4 1 5 3 3 1 3 1 ...
## $ Location: chr "In-store" "Takeaway" "Takeaway" "Takeaway" ...
Pemeriksaan struktur dilakukan untuk mengetahui tipe data masing-masing variabel sebelum proses transformasi.
Variabel Item diperiksa untuk mengetahui kategori yang
terdapat di dalam dataset.
##
## Cake Coffee Cookie Juice Salad Sandwich Smoothie Tea
## 138 118 110 114 126 123 136 135
Distribusi kategori Item juga divisualisasikan
menggunakan diagram batang agar perbandingan jumlah transaksi pada
setiap jenis item dapat terlihat dengan lebih jelas.
item_freq <- table(data$Item, useNA = "ifany")
barplot(
item_freq,
main = "Distribusi Item Penjualan",
xlab = "Item",
ylab = "Jumlah Transaksi",
las = 2
)Variabel Location diperiksa untuk melihat kategori
lokasi yang tersedia.
##
## In-store Takeaway
## 300 700
Distribusi lokasi kemudian divisualisasikan dalam bentuk diagram batang.
location_freq <- table(data$Location, useNA = "ifany")
barplot(
location_freq,
main = "Distribusi Lokasi Penjualan",
xlab = "Location",
ylab = "Jumlah Transaksi"
)Variabel Quantity juga diperiksa untuk mengetahui nilai
yang terdapat pada data.
##
## 1 2 3 4 5
## 195 203 179 204 219
Karena Quantity merupakan variabel numerik yang kemudian
diperlakukan sebagai kategori, distribusinya dapat ditampilkan
menggunakan diagram batang.
quantity_freq <- table(data$Quantity, useNA = "ifany")
barplot(
quantity_freq,
main = "Distribusi Quantity",
xlab = "Quantity",
ylab = "Jumlah Transaksi"
)Pemeriksaan frekuensi dan visualisasi dilakukan sebelum proses transformasi agar kategori pada masing-masing variabel dapat diketahui dan dibandingkan dengan lebih mudah.
Sebelum masuk ke tahap transformasi dan encoding, distribusi variabel utama telah divisualisasikan menggunakan diagram batang. Visualisasi tersebut membantu memberikan gambaran awal mengenai kategori yang paling sering muncul pada dataset.
Variabel kategorik kemudian diubah menjadi tipe factor.
Transformasi ini dilakukan pada variabel Item,
Location, dan Quantity.
data$Item <- factor(data$Item)
data$Location <- factor(data$Location)
data$Quantity <- factor(data$Quantity)
str(data)## '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 ...
Setelah proses transformasi, ketiga variabel tersebut memiliki tipe data factor dan dapat digunakan untuk proses encoding kategorik.
Level pada variabel Item diperiksa menggunakan fungsi
levels().
## [1] "Cake" "Coffee" "Cookie" "Juice" "Salad" "Sandwich" "Smoothie"
## [8] "Tea"
Level pada variabel Location diperiksa untuk mengetahui
kategori yang telah terbentuk.
## [1] "In-store" "Takeaway"
Package fastDummies digunakan untuk membuat variabel
dummy dari variabel kategorik.
Dataset asli disalin terlebih dahulu ke objek baru bernama
data_onehot. Selanjutnya, One-Hot Encoding dilakukan pada
variabel Item dan Location.
data_onehot <- data
data_onehot <- dummy_cols(
data_onehot,
select_columns = c("Item", "Location"),
remove_first_dummy = FALSE,
remove_selected_columns = TRUE
)
head(data_onehot)Parameter remove_first_dummy = FALSE digunakan agar
seluruh kategori tetap direpresentasikan sebagai dummy variable.
Variabel kategorik yang telah diproses kemudian dihapus dari dataset
hasil encoding melalui remove_selected_columns = TRUE.
Selain menggunakan fastDummies, pembentukan variabel
dummy juga dapat dilakukan menggunakan fungsi
model.matrix().
Matriks dummy untuk variabel Location dibentuk
menggunakan sintaks berikut.
Matriks dummy untuk variabel Item dibentuk dengan cara
yang sama.
Ukuran dataset sebelum proses One-Hot Encoding diperiksa kembali.
## [1] 1000 3
Ukuran dataset hasil encoding menggunakan fastDummies
diperiksa untuk melihat perubahan jumlah kolom.
## [1] 1000 11
Perubahan jumlah kolom terjadi karena variabel kategorik diubah menjadi beberapa kolom dummy sesuai dengan kategori yang tersedia.
Pemeriksaan nilai kosong dilakukan pada dataset sebelum encoding
menggunakan colSums(is.na()).
## Item Quantity Location
## 0 0 0
Pemeriksaan yang sama dilakukan pada dataset hasil One-Hot Encoding.
## Quantity Item_Cake Item_Coffee Item_Cookie
## 0 0 0 0
## Item_Juice Item_Salad Item_Sandwich Item_Smoothie
## 0 0 0 0
## Item_Tea Location_In-store Location_Takeaway
## 0 0 0
Pemeriksaan ini dilakukan untuk memastikan kondisi missing value pada dataset setelah proses transformasi.
Dataset hasil encoding disimpan dalam format CSV agar dapat digunakan kembali pada proses pengolahan atau analisis berikutnya.
File hasil encoding disimpan dengan nama
data_encoded.csv.
Berdasarkan tahapan pengolahan yang dilakukan, dataset penjualan kafe telah melalui proses persiapan data mulai dari pembacaan dataset, pemeriksaan ukuran dan struktur data, penghapusan variabel yang tidak digunakan, pemeriksaan kategori, hingga transformasi variabel kategorik menjadi factor.
Selanjutnya, proses One-Hot Encoding dilakukan menggunakan package
fastDummies serta pembentukan matriks dummy menggunakan
model.matrix(). Dataset sebelum dan sesudah encoding juga
dibandingkan untuk melihat perubahan struktur data. Pemeriksaan missing
value dilakukan sebagai bagian dari validasi hasil pengolahan.
Hasil dataset yang telah dilakukan encoding kemudian disimpan dalam format CSV sehingga dapat digunakan untuk tahapan analisis data berikutnya.
Bagian ini merangkum sintaks utama yang digunakan dalam proses pengolahan data.
file_data <- "C:/Users/LENOVO/OneDrive/Dokumen/Cleaning Data 1.csv"
data <- read.csv(
file_data,
header = TRUE,
sep = ";"
)
data$X <- NULL
data$Payment.Method <- NULL
data$Total.Spent <- NULL
data$Price.Per.Unit <- NULL
data$Transaction.ID <- NULL
data$Item <- factor(data$Item)
data$Location <- factor(data$Location)
data$Quantity <- factor(data$Quantity)
library(fastDummies)
data_onehot <- data
data_onehot <- dummy_cols(
data_onehot,
select_columns = c("Item", "Location"),
remove_first_dummy = FALSE,
remove_selected_columns = TRUE
)
location_dummy <- model.matrix(~ Location - 1, data = data)
item_dummy <- model.matrix(~ Item - 1, data = data)
quantity_onehot <- model.matrix(~ Quantity - 1, data = data)
colSums(is.na(data))## Item Quantity Location
## 0 0 0
## Quantity Item_Cake Item_Coffee Item_Cookie
## 0 0 0 0
## Item_Juice Item_Salad Item_Sandwich Item_Smoothie
## 0 0 0 0
## Item_Tea Location_In-store Location_Takeaway
## 0 0 0