Pra-pemrosesan Data Penjualan Kafe

Pengolahan data dilakukan melalui tahap pemeriksaan, pembersihan, analisis distribusi, Label Encoding, dan One-Hot Encoding.

1 Gambaran Singkat

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.

2 Menyiapkan Data

2.1 Membaca Data

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.csv harus berada dalam folder yang sama dengan file .Rmd.

3 Melihat Kondisi Awal Data

3.1 Ukuran dan Struktur Data

Ukuran dan struktur data diperiksa untuk mengetahui jumlah observasi, jumlah variabel, serta tipe data yang tersedia.

dim(data)
## [1] 1000    8
str(data)
## '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 ...

4 Membersihkan Data

4.1 Memilih Variabel

Variabel yang digunakan dalam proses pra-pemrosesan adalah Item, Quantity, dan Location.

data_clean <- data[, c(
  "Item",
  "Quantity",
  "Location"
)]

head(data_clean, 5)

4.2 Ukuran Data

dim(data_clean)
## [1] 1000    3

Data hasil pemilihan variabel terdiri dari 1000 observasi dengan 3 variabel utama.

5 Pemeriksaan Kualitas Data

5.1 Missing Value

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"
)
Jumlah Missing Value pada Setiap Variabel
Variabel Missing
Item Item 0
Quantity Quantity 0
Location Location 0

5.2 ERROR dan UNKNOWN

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"
)
Ringkasan Kualitas Data
Pemeriksaan Jumlah
Missing Value 0
ERROR 0
UNKNOWN 0

6 Distribusi Data

6.1 Distribusi Item

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"
)
Distribusi Item
Item Frekuensi
Cake 138
Coffee 118
Cookie 110
Juice 114
Salad 126
Sandwich 123
Smoothie 136
Tea 135
barplot(
  item_freq,
  main = "Distribusi Item",
  xlab = "Item",
  ylab = "Frekuensi",
  las = 2
)

6.2 Distribusi Location

location_freq <- table(data_clean$Location)

knitr::kable(
  as.data.frame(location_freq),
  col.names = c("Location", "Frekuensi"),
  caption = "Distribusi Location"
)
Distribusi Location
Location Frekuensi
In-store 300
Takeaway 700
barplot(
  location_freq,
  main = "Distribusi Location",
  xlab = "Location",
  ylab = "Frekuensi"
)

6.3 Distribusi Quantity

quantity_freq <- table(data_clean$Quantity)

knitr::kable(
  as.data.frame(quantity_freq),
  col.names = c("Quantity", "Frekuensi"),
  caption = "Distribusi Quantity"
)
Distribusi Quantity
Quantity Frekuensi
1 195
2 203
3 179
4 204
5 219
barplot(
  quantity_freq,
  main = "Distribusi Quantity",
  xlab = "Quantity",
  ylab = "Frekuensi"
)

7 Mengubah Tipe Data

7.1 Mengubah Menjadi Faktor

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

8 Label Encoding

8.1 Proses Label Encoding

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)

8.2 Dictionary Item

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"
)
Dictionary Label Encoding Item
Item Kode
Cake 1
Coffee 2
Cookie 3
Juice 4
Salad 5
Sandwich 6
Smoothie 7
Tea 8

9 One-Hot Encoding

9.1 Membuat Variabel Dummy

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)

9.2 Membentuk Dataset Akhir

data_onehot <- data.frame(
  quantity_dummy,
  item_dummy,
  location_dummy
)

dim(data_onehot)
## [1] 1000   15

Dataset hasil One-Hot Encoding memiliki 1000 observasi dan 15 variabel dummy.

10 Validasi Encoding

10.1 Pemeriksaan

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"
)
Hasil Validasi One-Hot Encoding
Variabel Validasi
Item TRUE
Location TRUE
Quantity TRUE

11 Perbandingan Hasil

11.1 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)
  )
)

knitr::kable(
  perbandingan,
  caption = "Perbandingan Ukuran Data",
  align = "c"
)
Perbandingan Ukuran Data
Tahap Baris Kolom
Data Awal 1000 8
Data Setelah Pemilihan Variabel 1000 3
Data Setelah One-Hot Encoding 1000 15

11.2 Perbandingan Metode

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.

12 Menyimpan Data

12.1 Menyimpan Hasil Encoding

Dataset hasil One-Hot Encoding disimpan dalam format CSV agar dapat digunakan kembali pada proses analisis berikutnya.

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

13 Kesimpulan

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.

14 Daftar Pustaka

  • James, G., Witten, D., Hastie, T., & Tibshirani, R. An Introduction to Statistical Learning.
  • R Core Team. R: A Language and Environment for Statistical Computing. ````