knitr::opts_chunk$set(
  echo = TRUE,
  message = FALSE,
  warning = FALSE,
  fig.align = "center",
  fig.width = 9,
  fig.height = 5.5,
  out.width = "95%"
)

Pendahuluan

Latar Belakang

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().

Rumusan Masalah

Beberapa permasalahan yang dibahas dalam pengolahan data ini adalah:

  1. Bagaimana cara membaca dataset penjualan kafe ke dalam R?
  2. Bagaimana mengetahui ukuran awal dataset?
  3. Variabel apa saja yang digunakan dalam proses pengolahan data?
  4. Bagaimana memeriksa struktur dan kategori pada dataset?
  5. Bagaimana mengubah variabel kategorik menjadi factor?
  6. Bagaimana melakukan One-Hot Encoding menggunakan fastDummies?
  7. Bagaimana membentuk matriks dummy menggunakan model.matrix()?
  8. Bagaimana membandingkan dataset sebelum dan sesudah encoding?
  9. Bagaimana memeriksa missing value setelah proses pengolahan?
  10. Bagaimana menyimpan hasil dataset yang telah dilakukan encoding?

Tujuan Analisis

Tujuan dari pengolahan data ini adalah:

  1. Membaca dataset penjualan kafe menggunakan R.
  2. Mengetahui ukuran awal dataset.
  3. Membersihkan variabel yang tidak diperlukan dalam analisis.
  4. Memeriksa nama dan struktur variabel.
  5. Mengetahui distribusi kategori pada beberapa variabel.
  6. Mengubah variabel kategorik menjadi factor.
  7. Mengetahui level dari setiap factor.
  8. Melakukan One-Hot Encoding menggunakan fastDummies.
  9. Membentuk dummy variable menggunakan model.matrix().
  10. Mengekspor dataset hasil encoding untuk digunakan pada proses selanjutnya.

Import dan Gambaran Dataset

Menentukan Lokasi Dataset

Dataset yang digunakan merupakan data penjualan kafe yang tersimpan dalam format CSV. Lokasi file ditentukan terlebih dahulu agar dataset dapat dibaca menggunakan R.

file_data <- "C:/Users/LENOVO/OneDrive/Dokumen/Cleaning Data 1.csv"
file.exists(file_data)
## [1] TRUE

Hasil dari pemeriksaan tersebut digunakan untuk memastikan bahwa file dataset tersedia pada lokasi yang telah ditentukan.

Membaca Dataset

Dataset kemudian dibaca menggunakan fungsi read.csv(). Pemisah antar kolom yang digunakan adalah titik koma (;).

data <- read.csv(
  file_data,
  header = TRUE,
  sep = ";"
)

head(data)

Ukuran Dataset Awal

Untuk mengetahui jumlah baris dan kolom pada dataset, digunakan fungsi dim().

dim(data)
## [1] 1000    8

Informasi dimensi dataset menjadi dasar untuk melihat ukuran data sebelum dilakukan proses pembersihan dan transformasi.

Data Cleaning

Menghapus Variabel yang Tidak Digunakan

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.

Pemeriksaan Struktur Dataset

Nama Variabel

Nama variabel diperiksa untuk mengetahui kolom yang tersedia setelah proses pembersihan.

names(data)
## [1] "Item"     "Quantity" "Location"

Struktur Data

Struktur setiap variabel diperiksa menggunakan fungsi str().

str(data)
## '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.

Dimensi Data

Dimensi dataset kembali diperiksa setelah proses pembersihan.

dim(data)
## [1] 1000    3

Pemeriksaan Kategori

Distribusi Item

Variabel Item diperiksa untuk mengetahui kategori yang terdapat di dalam dataset.

table(data$Item, useNA = "ifany")
## 
##     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
)

Distribusi Location

Variabel Location diperiksa untuk melihat kategori lokasi yang tersedia.

table(data$Location, useNA = "ifany")
## 
## 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"
)

Distribusi Quantity

Variabel Quantity juga diperiksa untuk mengetahui nilai yang terdapat pada data.

table(data$Quantity, useNA = "ifany")
## 
##   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.

Visualisasi Data

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.

Transformasi Variabel Kategorik

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.

Pemeriksaan Level Factor

Level Item

Level pada variabel Item diperiksa menggunakan fungsi levels().

levels(data$Item)
## [1] "Cake"     "Coffee"   "Cookie"   "Juice"    "Salad"    "Sandwich" "Smoothie"
## [8] "Tea"

Level Location

Level pada variabel Location diperiksa untuk mengetahui kategori yang telah terbentuk.

levels(data$Location)
## [1] "In-store" "Takeaway"

Level Quantity

Level pada variabel Quantity diperiksa setelah proses konversi menjadi factor.

levels(data$Quantity)
## [1] "1" "2" "3" "4" "5"

Pemeriksaan level dilakukan untuk memastikan kategori yang akan digunakan dalam proses encoding telah terbentuk dengan benar.

Encoding Menggunakan fastDummies

Persiapan Package

Package fastDummies digunakan untuk membuat variabel dummy dari variabel kategorik.

library(fastDummies)

Membuat Dataset Encoding

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.

Pembentukan Matriks Dummy

Selain menggunakan fastDummies, pembentukan variabel dummy juga dapat dilakukan menggunakan fungsi model.matrix().

Matriks Dummy Location

Matriks dummy untuk variabel Location dibentuk menggunakan sintaks berikut.

location_dummy <- model.matrix(~ Location - 1, data = data)

Matriks Dummy Item

Matriks dummy untuk variabel Item dibentuk dengan cara yang sama.

item_dummy <- model.matrix(~ Item - 1, data = data)

Matriks Dummy Quantity

Variabel Quantity juga dapat diubah menjadi bentuk matriks dummy.

quantity_onehot <- model.matrix(~ Quantity - 1, data = data)

Penggunaan -1 pada formula digunakan agar intercept tidak disertakan dalam pembentukan matriks dummy.

Perbandingan Dataset Sebelum dan Sesudah Encoding

Ukuran Data Sebelum Encoding

Ukuran dataset sebelum proses One-Hot Encoding diperiksa kembali.

dim(data)
## [1] 1000    3

Ukuran Data Sesudah Encoding

Ukuran dataset hasil encoding menggunakan fastDummies diperiksa untuk melihat perubahan jumlah kolom.

dim(data_onehot)
## [1] 1000   11

Perubahan jumlah kolom terjadi karena variabel kategorik diubah menjadi beberapa kolom dummy sesuai dengan kategori yang tersedia.

Tampilan Data Hasil Encoding

Beberapa baris awal dataset hasil encoding ditampilkan untuk melihat bentuk data setelah transformasi.

head(data_onehot)

Pemeriksaan Missing Value

Missing Value Sebelum Encoding

Pemeriksaan nilai kosong dilakukan pada dataset sebelum encoding menggunakan colSums(is.na()).

colSums(is.na(data))
##     Item Quantity Location 
##        0        0        0

Missing Value Sesudah Encoding

Pemeriksaan yang sama dilakukan pada dataset hasil One-Hot Encoding.

colSums(is.na(data_onehot))
##          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.

Ekspor Dataset

Dataset hasil encoding disimpan dalam format CSV agar dapat digunakan kembali pada proses pengolahan atau analisis berikutnya.

write.csv(
  data_onehot,
  "data_encoded.csv",
  row.names = FALSE
)

File hasil encoding disimpan dengan nama data_encoded.csv.

Kesimpulan

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.

Lampiran: Sintaks Utama

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
colSums(is.na(data_onehot))
##          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
write.csv(
  data_onehot,
  "data_encoded.csv",
  row.names = FALSE
)