Pra-pemrosesan Data Penjualan Kafe

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

1 Pendahuluan

1.1 Latar Belakang

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.

1.2 Rumusan Masalah

Berdasarkan latar belakang tersebut, rumusan masalah dalam proses pra-pemrosesan data ini adalah:

  1. Bagaimana kondisi dan permasalahan yang terdapat pada data transaksi penjualan kafe sebelum dilakukan pengolahan data?
  2. Bagaimana proses data cleaning dilakukan untuk menangani data kosong, data error, dan data unknown pada data transaksi penjualan kafe?`
  3. Bagaimana proses encoding dilakukan pada variabel kategorik seperti Item dan Location agar data dapat digunakan untuk analisis lebih lanjut?
  4. Bagaimana kondisi data setelah dilakukan proses data cleaning dan encoding?

1.3 Tujuan

Tujuan dari proses pra-pemrosesan data penjualan kafe ini adalah:

  1. Mengetahui kondisi dan permasalahan yang terdapat pada data transaksi penjualan kafe sebelum dilakukan pengolahan.
  2. Melakukan data cleaning untuk menangani data kosong, data error, dan data unknown yang terdapat pada data transaksi penjualan kafe.
  3. Melakukan proses encoding pada variabel kategorik, khususnya Item dan Location, agar data dapat diolah dan dianalisis dengan lebih mudah.
  4. Mengetahui kondisi data setelah melalui proses data cleaning dan encoding sehingga data menjadi lebih siap untuk digunakan dalam analisis selanjutnya # 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 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.csv harus berada dalam folder yang sama dengan file .Rmd, atau path file disesuaikan dengan lokasi file pada komputer.

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.

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

4 Membersihkan Data

4.1 Memilih Variabel

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

# Memilih variabel yang digunakan
data_clean <- data[, c(
  "Item",
  "Quantity",
  "Location"
)]

# Melihat lima data pertama
head(data_clean, 5)

4.2 Ukuran Data

# Melihat ukuran data setelah pemilihan variabel
dim(data_clean)
## [1] 1000    3

5 Pemeriksaan Kualitas Data

5.1 Missing Value

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

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

6 Distribusi Data

6.1 Distribusi Item

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

6.2 Distribusi Location

# 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"
)
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"
)

6.3 Distribusi Quantity

# 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"
)
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"
)

7 Mengubah Tipe Data

7.1 Mengubah Menjadi Faktor

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

8 Label Encoding

8.1 Proses Label Encoding

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)

8.2 Dictionary Item

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

9 One-Hot Encoding

9.1 Membuat Variabel Dummy

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)

9.2 Membentuk Dataset Akhir

# Membentuk dataset hasil One-Hot Encoding
data_onehot <- data.frame(
  quantity_dummy,
  item_dummy,
  location_dummy
)

# Melihat ukuran dataset
dim(data_onehot)
## [1] 1000   24

10 Validasi Encoding

10.1 Pemeriksaan

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

11 Perbandingan Hasil

11.1 Perbandingan Ukuran Data

# 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"
)
Perbandingan Ukuran Data
Tahap Baris Kolom
Data Awal 1000 8
Data Setelah Pemilihan Variabel 1000 3
Data Setelah One-Hot Encoding 1000 24

11.2 Perbandingan Metode

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.

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.

# Menyimpan dataset hasil One-Hot Encoding
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.

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.

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.