Pendahuluan

Data merupakan kumpulan informasi yang dapat digunakan untuk memperoleh informasi dan mendukung proses analisis. Sebelum dilakukan analisis lebih lanjut, data perlu diperiksa dan dipersiapkan terlebih dahulu agar data yang digunakan dapt memiliki kualitas yang baik. Data yang digunakan dalam analisis ini merupakan data transaksi penjualan kafe. Data awal terdiri dari 10.000 transaksi dengan beberapa variabel, di antaranya Item, Quantity, Price Per Unit, Total Spent, Payment Method, Location, dan Transaction Date. Data tersebut masih mengandung berbagai macam permasalahan, seperti data kosong (missing value), nilai ERROR, dan nilai UNKNOWN. Pada analisis ini, dari 10.000 data dilakukan pengambilan sampel secara acak melaui R sebanyak 1.000 data. Sampel tersebut kemudian digunakan untuk proses pemeriksaan dan pengolahan data. Setelah data diperiksa dan dibersihkan, dilakukan pengolahan terhadap variabel kategorik, khususnya Item, Quantity, dan Location. Tujuan dari pengolahan data ini adalah untuk memahami kondisi data, melakukan proses encoding, serta mengubah data menjadi bentuk yang dapat digunakan dalam proses analisis menggunakan komputer.

Pengambilan Sampel

Data awal yang digunakan merupakan data transaksi kafe yang masih dalam kondisi data kotor dengan berbagai macam permasalahan. Jumlah data awal adalah 10.000 baris. Karena jumlah data yang cukup besar, dilakukan pengambilan sampel secara acak sebanyak 1.000 data menggunakan R. Pengambilan sampel dilakukan tanpa pengembalian, sehingga data yang terambil pertama tidak akan terulang lagi di pengambilan kedua.

tabel1 <-read.csv("D:\\Downloads\\dirty_cafe_sales.csv", header=TRUE, sep=";")
head(tabel1)
##   Transaction.ID     Item Quantity Price.Per.Unit Total.Spent Payment.Method
## 1    TXN_1961373   Coffee        2            2.0         4.0    Credit Card
## 2    TXN_4977031     Cake        4            3.0        12.0           Cash
## 3    TXN_4271903   Cookie        4            1.0       ERROR    Credit Card
## 4    TXN_7034554    Salad        2            5.0        10.0        UNKNOWN
## 5    TXN_3160411   Coffee        2            2.0         4.0 Digital Wallet
## 6    TXN_2602893 Smoothie        5            4.0        20.0    Credit Card
##   Location Transaction.Date
## 1 Takeaway        8 09 2023
## 2 In-store       16 05 2023
## 3 In-store       19 07 2023
## 4  UNKNOWN       27 04 2023
## 5 In-store       11 06 2023
## 6                31 03 2023
dim(tabel1)
## [1] 10000     8
set.seed(123)

indeks_sampel <- sample(1:nrow(tabel1), 
                        size = 1000, 
                        replace = FALSE)

data_sampel <- tabel1[indeks_sampel, ]
dim(data_sampel)
## [1] 1000    8
head(data_sampel)
##      Transaction.ID     Item Quantity Price.Per.Unit Total.Spent Payment.Method
## 2463    TXN_6928775                 2            1.0         2.0           Cash
## 2511    TXN_7503593   Cookie        5            1.0         5.0 Digital Wallet
## 8718    TXN_7677646 Sandwich        5            4.0        20.0               
## 2986    TXN_9725461 Smoothie        3            4.0        12.0    Credit Card
## 1842    TXN_9678108    Salad        3            5.0        15.0          ERROR
## 9334    TXN_3830888   Coffee        4            2.0         8.0               
##      Location Transaction.Date
## 2463 In-store       25 03 2023
## 2511 Takeaway       19 04 2023
## 8718                15 02 2023
## 2986 In-store       25 11 2023
## 1842 Takeaway       10 10 2023
## 9334 In-store       20 02 2023

Berdasarkan output, data awal terdiri dari 10.000 baris dan 8 variabel. Setelah dilakukan pengambilan sampel secara acak, diperoleh 1.000 baris data dengan 8 variabel. Penggunaan set.seed(123) dilakukan agar proses pengambilan sampel dapat menghasilkan sampel yang sama ketika syntax dijalankan kembali.

Pemeriksaan Data Bermasalah

Setelah sampel didapatkan, dilakukan pemeriksaan terhadap data yang memiliki nilai ERROR, UNKNOWN, dan nilai kosong.

#menghitung jumlah data ERROR
sum(data_sampel == "ERROR", na.rm = TRUE)
## [1] 183
sum(is.na(data_sampel))
## [1] 0
# Menghitung jumlah data UNKNOWN
sum(data_sampel == "UNKNOWN", na.rm = TRUE)
## [1] 173
# Menghitung jumlah data KOSONG / NA
sum(is.na(data))
## Warning in is.na(data): is.na() applied to non-(list or vector) of type
## 'closure'
## [1] 0

Perintah head(data_sampel) digunakan untuk melihat beberapa data pertama. Selanjutnya, sum(data_sampel == “ERROR”, na.rm = TRUE) digunakan untuk menghitung jumlah nilai ERROR, sedangkan sum(data_sampel == “UNKNOWN”, na.rm = TRUE) digunakan untuk mengetahui jumlah nilai UNKNOWN.Untuk mengetahui data yang kosong digunakan is.na(). Berdasarkan hasil pemeriksaan diatas, banyak data sampel yang masih mengandung berbagai nilai yang tidak valid. Oleh karena itu, data masih haru dilakukan proses cleaning data agar dapat digunakan untuk pengolahan data berikutnya.

Data Cleaning

Setelah kondisi data diketahui, selanjutnya dilakukan proses cleaning data untuk memperbaiki nilai yang kosong, ERROR, dan UNKNOWN pada data. Proses cleaning dilakukan tanpa mengurangi jumlah data sampel, sehingga seluruh data sampel tetap digunakan dalam analisis. Perbaikan data dilakukan dengan mempertimbangkan informasi yang ada pada data. Untuk beberapa nilai yang masih dapat ditentukan berdasarkan hubungan antarvariabel, pengisiannya dilakukan menggunakan hubungan antar variabel tersebut. Contohnya, pada nilai di variabel Item dapat disesuaikan dengan informasi pada nilai Price Per Unit yang tersedia. Sementara itu, apabila ada nilai kosong, ERROR, atau UNKNOWN yang tidak dapat ditentukan menggunakan informasi dari variabel lain, nilai tersebut diisi menggunakan metode imputansi data. Dengan begitu, data yang bermasalah dapat diperbaiki tanpa menghapus baris data.

data_cleaning <-read.csv("D:\\Documents\\Cleaning Data 1.csv", header=TRUE, sep=";")
data_cleaning$X <- NULL
head(data_cleaning)
##   Transaction.ID     Item Quantity Price.Per.Unit Total.Spent Payment.Method
## 1    TXN_2176024   Coffee        5            2.0        10.0 Digital Wallet
## 2    TXN_6327139 Sandwich        4            4.0        16.0    Credit Card
## 3    TXN_5488764   Coffee        4            2.0         8.0 Digital Wallet
## 4    TXN_9530003    Salad        1            5.0         5.0 Digital Wallet
## 5    TXN_3753993 Sandwich        5            4.0        20.0    Credit Card
## 6    TXN_2251128 Smoothie        3            4.0        12.0    Credit Card
##   Location
## 1 In-store
## 2 Takeaway
## 3 Takeaway
## 4 Takeaway
## 5 Takeaway
## 6 In-store
View(data_cleaning)

Transformasi Data Kategorik I

Setelah data disiapkan, tahap selanjutnya adalah melakukan pengolahan data kategorik. Metode yang digunakan pada pengolahan data ini adalah label encoding dan one hot encoding. Tiga variabel yang diambil untuk transformasi data adalah Item, Location, dan Quantity. Namun, karena variabel Qunatity meruapakan variabel numerik maka tidak dilakukan transformasi label maupun one hot encoding.

Label Encoding

Label Encoding Item

tabel2 <-read.csv("D:\\Documents\\Cleaning Data 1.csv", header=TRUE, sep=";")

# Mengubah Item menjadi factor
Item_factor <- factor(tabel2$Item)

# Melihat hasil factor
Item_factor
##    [1] Coffee   Sandwich Coffee   Salad    Sandwich Smoothie Salad    Salad   
##    [9] Juice    Coffee   Smoothie Smoothie Salad    Cake     Tea      Sandwich
##   [17] Cookie   Tea      Smoothie Juice    Smoothie Cake     Cake     Juice   
##   [25] Salad    Salad    Smoothie Tea      Salad    Juice    Cookie   Salad   
##   [33] Cake     Cake     Cake     Salad    Smoothie Smoothie Coffee   Smoothie
##   [41] Cookie   Coffee   Coffee   Salad    Sandwich Cake     Salad    Sandwich
##   [49] Tea      Smoothie Smoothie Cake     Juice    Juice    Cake     Salad   
##   [57] Cake     Cake     Tea      Cake     Sandwich Smoothie Sandwich Smoothie
##   [65] Sandwich Cake     Cake     Cookie   Tea      Tea      Smoothie Smoothie
##   [73] Cake     Cake     Coffee   Coffee   Tea      Cookie   Salad    Smoothie
##   [81] Coffee   Cake     Tea      Juice    Cake     Tea      Tea      Sandwich
##   [89] Salad    Tea      Salad    Sandwich Salad    Juice    Juice    Salad   
##   [97] Juice    Cake     Cookie   Tea      Smoothie Tea      Juice    Smoothie
##  [105] Tea      Juice    Tea      Coffee   Smoothie Cookie   Cake     Sandwich
##  [113] Tea      Cake     Juice    Cake     Coffee   Cake     Cookie   Sandwich
##  [121] Salad    Smoothie Sandwich Cookie   Juice    Tea      Salad    Cookie  
##  [129] Cake     Cookie   Salad    Juice    Coffee   Cake     Coffee   Tea     
##  [137] Smoothie Juice    Cookie   Sandwich Tea      Cake     Cake     Cake    
##  [145] Sandwich Coffee   Cookie   Smoothie Coffee   Coffee   Smoothie Salad   
##  [153] Tea      Coffee   Tea      Juice    Sandwich Cake     Cookie   Cookie  
##  [161] Cookie   Cookie   Cookie   Sandwich Cake     Cake     Cookie   Cake    
##  [169] Tea      Cookie   Cake     Sandwich Cookie   Cookie   Sandwich Cookie  
##  [177] Cookie   Cookie   Cookie   Cake     Smoothie Cake     Salad    Salad   
##  [185] Cake     Cake     Juice    Juice    Smoothie Sandwich Smoothie Tea     
##  [193] Cake     Coffee   Juice    Cookie   Cake     Juice    Tea      Sandwich
##  [201] Smoothie Tea      Juice    Cookie   Coffee   Tea      Sandwich Sandwich
##  [209] Juice    Smoothie Tea      Sandwich Tea      Sandwich Juice    Smoothie
##  [217] Salad    Cake     Tea      Sandwich Sandwich Tea      Tea      Sandwich
##  [225] Coffee   Tea      Salad    Tea      Coffee   Salad    Tea      Salad   
##  [233] Smoothie Juice    Coffee   Cake     Cake     Sandwich Salad    Smoothie
##  [241] Sandwich Sandwich Cookie   Cake     Coffee   Juice    Tea      Smoothie
##  [249] Coffee   Sandwich Salad    Tea      Juice    Sandwich Cake     Coffee  
##  [257] Tea      Coffee   Juice    Tea      Juice    Salad    Cookie   Coffee  
##  [265] Juice    Smoothie Cake     Smoothie Tea      Sandwich Juice    Smoothie
##  [273] Smoothie Coffee   Smoothie Cake     Smoothie Sandwich Cake     Cake    
##  [281] Cookie   Sandwich Juice    Salad    Smoothie Smoothie Salad    Salad   
##  [289] Smoothie Juice    Cake     Coffee   Cookie   Tea      Tea      Salad   
##  [297] Sandwich Juice    Coffee   Cake     Cookie   Sandwich Cake     Salad   
##  [305] Tea      Smoothie Smoothie Smoothie Tea      Salad    Juice    Salad   
##  [313] Tea      Sandwich Coffee   Smoothie Cake     Sandwich Coffee   Cake    
##  [321] Smoothie Coffee   Tea      Smoothie Smoothie Cookie   Coffee   Salad   
##  [329] Smoothie Tea      Coffee   Juice    Cake     Juice    Cookie   Cake    
##  [337] Juice    Salad    Cookie   Sandwich Juice    Salad    Cake     Smoothie
##  [345] Salad    Salad    Juice    Sandwich Salad    Salad    Coffee   Coffee  
##  [353] Cookie   Cake     Salad    Coffee   Sandwich Coffee   Smoothie Juice   
##  [361] Sandwich Tea      Cookie   Juice    Smoothie Tea      Salad    Tea     
##  [369] Cookie   Smoothie Salad    Smoothie Salad    Smoothie Juice    Salad   
##  [377] Smoothie Cake     Tea      Juice    Coffee   Coffee   Sandwich Sandwich
##  [385] Salad    Coffee   Smoothie Salad    Juice    Smoothie Salad    Cookie  
##  [393] Cookie   Cake     Sandwich Sandwich Coffee   Smoothie Coffee   Smoothie
##  [401] Salad    Sandwich Juice    Tea      Salad    Cookie   Smoothie Cookie  
##  [409] Sandwich Smoothie Tea      Salad    Sandwich Salad    Cake     Cake    
##  [417] Juice    Smoothie Cookie   Cake     Coffee   Cake     Cookie   Smoothie
##  [425] Sandwich Sandwich Juice    Juice    Sandwich Tea      Salad    Coffee  
##  [433] Tea      Sandwich Tea      Cake     Sandwich Juice    Salad    Tea     
##  [441] Juice    Juice    Salad    Coffee   Cake     Cake     Tea      Sandwich
##  [449] Smoothie Cake     Cake     Tea      Coffee   Cookie   Sandwich Juice   
##  [457] Smoothie Cookie   Tea      Sandwich Tea      Cake     Salad    Juice   
##  [465] Coffee   Juice    Juice    Cake     Cookie   Tea      Coffee   Sandwich
##  [473] Salad    Juice    Tea      Smoothie Salad    Smoothie Coffee   Salad   
##  [481] Juice    Cookie   Coffee   Juice    Cookie   Cake     Cookie   Coffee  
##  [489] Coffee   Cookie   Tea      Cookie   Salad    Smoothie Sandwich Sandwich
##  [497] Salad    Salad    Sandwich Cookie   Coffee   Sandwich Salad    Cake    
##  [505] Tea      Cake     Smoothie Tea      Juice    Cookie   Salad    Sandwich
##  [513] Cookie   Salad    Tea      Juice    Juice    Smoothie Cookie   Salad   
##  [521] Salad    Juice    Tea      Salad    Juice    Juice    Smoothie Tea     
##  [529] Smoothie Sandwich Smoothie Sandwich Sandwich Cake     Salad    Tea     
##  [537] Coffee   Cake     Sandwich Tea      Sandwich Cookie   Coffee   Tea     
##  [545] Tea      Cake     Juice    Smoothie Cake     Cookie   Smoothie Smoothie
##  [553] Cookie   Sandwich Salad    Salad    Cookie   Cake     Salad    Tea     
##  [561] Smoothie Salad    Tea      Smoothie Tea      Cake     Cookie   Tea     
##  [569] Juice    Sandwich Juice    Sandwich Smoothie Coffee   Cake     Tea     
##  [577] Cookie   Cake     Coffee   Coffee   Smoothie Juice    Tea      Cookie  
##  [585] Coffee   Smoothie Tea      Smoothie Salad    Salad    Coffee   Smoothie
##  [593] Cake     Cake     Cookie   Salad    Sandwich Sandwich Juice    Coffee  
##  [601] Coffee   Smoothie Cake     Sandwich Tea      Sandwich Smoothie Sandwich
##  [609] Salad    Coffee   Salad    Tea      Juice    Smoothie Cookie   Cookie  
##  [617] Smoothie Salad    Cake     Cake     Cake     Tea      Juice    Sandwich
##  [625] Juice    Juice    Tea      Tea      Juice    Cookie   Coffee   Cake    
##  [633] Juice    Cookie   Coffee   Juice    Coffee   Juice    Salad    Smoothie
##  [641] Cookie   Salad    Tea      Sandwich Cookie   Cookie   Tea      Salad   
##  [649] Cookie   Smoothie Tea      Cake     Salad    Juice    Juice    Juice   
##  [657] Juice    Coffee   Tea      Cookie   Cake     Coffee   Cookie   Juice   
##  [665] Smoothie Cake     Tea      Sandwich Juice    Cookie   Smoothie Juice   
##  [673] Cookie   Smoothie Coffee   Smoothie Cookie   Coffee   Cake     Juice   
##  [681] Cake     Tea      Coffee   Coffee   Coffee   Smoothie Salad    Sandwich
##  [689] Smoothie Cake     Coffee   Coffee   Sandwich Sandwich Salad    Cookie  
##  [697] Smoothie Coffee   Salad    Cake     Smoothie Cake     Tea      Salad   
##  [705] Coffee   Sandwich Coffee   Cookie   Smoothie Sandwich Cookie   Sandwich
##  [713] Coffee   Cookie   Tea      Salad    Tea      Salad    Juice    Cookie  
##  [721] Tea      Cake     Juice    Juice    Juice    Cake     Coffee   Tea     
##  [729] Cake     Salad    Cake     Salad    Tea      Tea      Juice    Cake    
##  [737] Tea      Cake     Sandwich Salad    Sandwich Cake     Salad    Cake    
##  [745] Coffee   Sandwich Salad    Salad    Sandwich Juice    Tea      Cookie  
##  [753] Smoothie Tea      Sandwich Cake     Cookie   Sandwich Smoothie Tea     
##  [761] Tea      Salad    Smoothie Salad    Tea      Smoothie Tea      Salad   
##  [769] Cookie   Juice    Cake     Cake     Smoothie Tea      Smoothie Salad   
##  [777] Sandwich Smoothie Coffee   Salad    Smoothie Coffee   Smoothie Coffee  
##  [785] Tea      Coffee   Smoothie Cake     Cake     Juice    Cake     Sandwich
##  [793] Cookie   Smoothie Cake     Sandwich Tea      Sandwich Cookie   Juice   
##  [801] Cookie   Juice    Tea      Juice    Sandwich Smoothie Juice    Sandwich
##  [809] Sandwich Smoothie Smoothie Smoothie Cookie   Coffee   Coffee   Tea     
##  [817] Sandwich Coffee   Smoothie Cake     Cookie   Sandwich Salad    Cake    
##  [825] Coffee   Cake     Tea      Cookie   Tea      Coffee   Cookie   Cake    
##  [833] Juice    Tea      Coffee   Coffee   Coffee   Sandwich Coffee   Coffee  
##  [841] Sandwich Cookie   Tea      Tea      Salad    Sandwich Cookie   Smoothie
##  [849] Tea      Coffee   Tea      Salad    Coffee   Salad    Coffee   Cookie  
##  [857] Smoothie Salad    Coffee   Tea      Sandwich Juice    Juice    Cake    
##  [865] Cake     Tea      Cookie   Smoothie Sandwich Cake     Smoothie Smoothie
##  [873] Tea      Tea      Cake     Smoothie Juice    Juice    Smoothie Smoothie
##  [881] Tea      Smoothie Salad    Cake     Coffee   Coffee   Sandwich Cake    
##  [889] Salad    Sandwich Sandwich Sandwich Cake     Cookie   Salad    Juice   
##  [897] Salad    Salad    Coffee   Cake     Coffee   Juice    Tea      Cake    
##  [905] Coffee   Salad    Salad    Cake     Smoothie Sandwich Coffee   Smoothie
##  [913] Coffee   Sandwich Sandwich Smoothie Cookie   Cake     Smoothie Tea     
##  [921] Juice    Smoothie Sandwich Cake     Cookie   Cookie   Sandwich Tea     
##  [929] Sandwich Sandwich Tea      Juice    Cookie   Coffee   Tea      Tea     
##  [937] Cake     Juice    Cake     Cake     Cookie   Salad    Coffee   Juice   
##  [945] Cake     Cookie   Sandwich Coffee   Juice    Tea      Salad    Smoothie
##  [953] Coffee   Cookie   Tea      Salad    Sandwich Salad    Cake     Salad   
##  [961] Cake     Cake     Smoothie Juice    Cookie   Tea      Cookie   Salad   
##  [969] Smoothie Cake     Cookie   Tea      Tea      Tea      Salad    Cake    
##  [977] Salad    Smoothie Tea      Sandwich Cookie   Coffee   Smoothie Cake    
##  [985] Sandwich Coffee   Juice    Coffee   Cookie   Cake     Coffee   Smoothie
##  [993] Salad    Coffee   Juice    Salad    Juice    Sandwich Smoothie Coffee  
## Levels: Cake Coffee Cookie Juice Salad Sandwich Smoothie Tea
# Melihat urutan level kategori
levels(Item_factor)
## [1] "Cake"     "Coffee"   "Cookie"   "Juice"    "Salad"    "Sandwich" "Smoothie"
## [8] "Tea"
# Mengubah factor menjadi kode angka
Item_code <- as.numeric(Item_factor)

# Membuat data frame hasil encoding
data_encoded <- data.frame(tabel1$Item, Item_code)

# Melihat hasilnya
head(data_encoded)
##   tabel1.Item Item_code
## 1      Coffee         2
## 2        Cake         6
## 3      Cookie         2
## 4       Salad         5
## 5      Coffee         6
## 6    Smoothie         7

Variabel Item diubah menjadi factor terlebih dahulu. Kemudian, levels() digunakan untuk melihat kategori yang terdapat dalam variabel tersebut. Lalu, as.numeric() digunakan untuk mengubah level kategori menjadi kode numerik. Pada transformasi ini kategori Item ditentukan terlebih dahulu melalui levels, lalu setiap kategori diberikan kode numerik berdasarkan urutan kategori tersebut.

Label Encoding Location

tabel2 <-read.csv("D:\\Documents\\Cleaning Data 1.csv", header=TRUE, sep=";")

# Mengubah menjadi factor
Location_factor <- factor(tabel2$Location)

# Melihat factor
Location_factor
##    [1] In-store Takeaway Takeaway Takeaway Takeaway In-store Takeaway Takeaway
##    [9] In-store Takeaway Takeaway Takeaway Takeaway Takeaway In-store Takeaway
##   [17] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##   [25] In-store In-store Takeaway Takeaway Takeaway In-store In-store Takeaway
##   [33] Takeaway Takeaway Takeaway Takeaway Takeaway In-store Takeaway Takeaway
##   [41] In-store Takeaway Takeaway In-store Takeaway In-store In-store Takeaway
##   [49] Takeaway In-store Takeaway Takeaway In-store Takeaway Takeaway Takeaway
##   [57] Takeaway Takeaway In-store In-store Takeaway Takeaway Takeaway In-store
##   [65] Takeaway In-store Takeaway Takeaway In-store Takeaway In-store Takeaway
##   [73] In-store In-store Takeaway In-store In-store Takeaway Takeaway In-store
##   [81] Takeaway Takeaway Takeaway Takeaway Takeaway In-store In-store In-store
##   [89] Takeaway Takeaway Takeaway In-store Takeaway Takeaway In-store Takeaway
##   [97] Takeaway In-store In-store In-store Takeaway Takeaway Takeaway In-store
##  [105] In-store In-store Takeaway In-store In-store Takeaway In-store Takeaway
##  [113] In-store In-store In-store Takeaway Takeaway Takeaway In-store In-store
##  [121] Takeaway Takeaway In-store Takeaway Takeaway Takeaway Takeaway Takeaway
##  [129] Takeaway In-store Takeaway In-store Takeaway Takeaway Takeaway In-store
##  [137] In-store In-store In-store Takeaway Takeaway Takeaway Takeaway Takeaway
##  [145] In-store Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway In-store
##  [153] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway In-store Takeaway
##  [161] In-store In-store Takeaway In-store Takeaway In-store Takeaway Takeaway
##  [169] In-store Takeaway In-store In-store Takeaway Takeaway Takeaway Takeaway
##  [177] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [185] In-store In-store Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [193] Takeaway Takeaway In-store Takeaway Takeaway In-store Takeaway Takeaway
##  [201] Takeaway In-store In-store In-store Takeaway Takeaway In-store Takeaway
##  [209] In-store Takeaway In-store In-store In-store In-store Takeaway Takeaway
##  [217] Takeaway Takeaway In-store In-store Takeaway Takeaway Takeaway In-store
##  [225] Takeaway Takeaway Takeaway Takeaway Takeaway In-store In-store In-store
##  [233] Takeaway In-store In-store Takeaway Takeaway Takeaway Takeaway Takeaway
##  [241] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway In-store
##  [249] Takeaway Takeaway Takeaway In-store Takeaway In-store Takeaway Takeaway
##  [257] Takeaway Takeaway In-store Takeaway Takeaway In-store In-store Takeaway
##  [265] Takeaway Takeaway Takeaway In-store In-store In-store Takeaway Takeaway
##  [273] Takeaway Takeaway Takeaway Takeaway In-store Takeaway Takeaway In-store
##  [281] Takeaway Takeaway Takeaway Takeaway Takeaway In-store Takeaway Takeaway
##  [289] Takeaway Takeaway Takeaway Takeaway In-store In-store In-store Takeaway
##  [297] In-store Takeaway Takeaway In-store Takeaway Takeaway Takeaway In-store
##  [305] Takeaway Takeaway In-store Takeaway In-store Takeaway Takeaway In-store
##  [313] Takeaway In-store In-store Takeaway In-store Takeaway In-store Takeaway
##  [321] Takeaway Takeaway In-store Takeaway Takeaway Takeaway Takeaway Takeaway
##  [329] Takeaway Takeaway Takeaway In-store Takeaway Takeaway Takeaway In-store
##  [337] Takeaway In-store Takeaway Takeaway Takeaway In-store Takeaway In-store
##  [345] Takeaway Takeaway Takeaway In-store Takeaway Takeaway Takeaway Takeaway
##  [353] Takeaway Takeaway In-store In-store Takeaway Takeaway Takeaway In-store
##  [361] Takeaway Takeaway Takeaway Takeaway In-store Takeaway In-store Takeaway
##  [369] Takeaway Takeaway Takeaway Takeaway In-store Takeaway Takeaway Takeaway
##  [377] In-store Takeaway In-store Takeaway Takeaway Takeaway In-store In-store
##  [385] In-store Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [393] Takeaway Takeaway In-store Takeaway Takeaway Takeaway Takeaway Takeaway
##  [401] In-store In-store In-store In-store Takeaway In-store Takeaway In-store
##  [409] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway In-store In-store
##  [417] Takeaway In-store Takeaway Takeaway In-store Takeaway Takeaway Takeaway
##  [425] In-store In-store Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [433] In-store Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [441] In-store Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [449] Takeaway Takeaway Takeaway In-store Takeaway In-store Takeaway Takeaway
##  [457] Takeaway Takeaway In-store In-store Takeaway Takeaway Takeaway Takeaway
##  [465] In-store Takeaway Takeaway In-store In-store Takeaway Takeaway Takeaway
##  [473] Takeaway Takeaway Takeaway In-store In-store Takeaway Takeaway Takeaway
##  [481] Takeaway In-store Takeaway In-store Takeaway Takeaway Takeaway Takeaway
##  [489] Takeaway Takeaway Takeaway In-store Takeaway Takeaway Takeaway Takeaway
##  [497] Takeaway In-store Takeaway Takeaway Takeaway Takeaway In-store Takeaway
##  [505] Takeaway Takeaway Takeaway In-store In-store Takeaway Takeaway Takeaway
##  [513] Takeaway Takeaway Takeaway In-store Takeaway Takeaway Takeaway In-store
##  [521] Takeaway In-store In-store In-store Takeaway In-store Takeaway Takeaway
##  [529] Takeaway In-store Takeaway In-store Takeaway In-store Takeaway In-store
##  [537] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway In-store Takeaway
##  [545] Takeaway Takeaway Takeaway Takeaway Takeaway In-store Takeaway Takeaway
##  [553] In-store In-store In-store Takeaway In-store Takeaway Takeaway In-store
##  [561] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [569] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway In-store Takeaway
##  [577] Takeaway Takeaway Takeaway In-store Takeaway In-store In-store Takeaway
##  [585] Takeaway Takeaway In-store Takeaway In-store In-store Takeaway Takeaway
##  [593] Takeaway Takeaway In-store Takeaway In-store Takeaway In-store Takeaway
##  [601] In-store Takeaway Takeaway Takeaway In-store In-store Takeaway Takeaway
##  [609] Takeaway Takeaway In-store In-store Takeaway Takeaway Takeaway Takeaway
##  [617] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [625] Takeaway Takeaway Takeaway In-store In-store In-store In-store Takeaway
##  [633] Takeaway Takeaway In-store In-store In-store Takeaway Takeaway Takeaway
##  [641] In-store In-store Takeaway Takeaway Takeaway Takeaway In-store In-store
##  [649] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [657] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway In-store Takeaway
##  [665] Takeaway Takeaway Takeaway In-store Takeaway In-store Takeaway Takeaway
##  [673] Takeaway Takeaway In-store Takeaway Takeaway In-store Takeaway Takeaway
##  [681] Takeaway Takeaway Takeaway In-store Takeaway Takeaway Takeaway Takeaway
##  [689] Takeaway Takeaway In-store In-store In-store In-store Takeaway In-store
##  [697] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway In-store Takeaway
##  [705] In-store Takeaway Takeaway Takeaway In-store In-store Takeaway Takeaway
##  [713] Takeaway Takeaway In-store Takeaway In-store In-store Takeaway Takeaway
##  [721] In-store Takeaway In-store In-store Takeaway In-store Takeaway Takeaway
##  [729] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [737] Takeaway In-store In-store Takeaway Takeaway Takeaway Takeaway Takeaway
##  [745] Takeaway In-store Takeaway In-store Takeaway Takeaway In-store In-store
##  [753] Takeaway In-store Takeaway Takeaway Takeaway In-store Takeaway In-store
##  [761] Takeaway In-store In-store Takeaway In-store Takeaway Takeaway In-store
##  [769] Takeaway In-store Takeaway Takeaway Takeaway Takeaway Takeaway In-store
##  [777] Takeaway Takeaway Takeaway In-store In-store In-store Takeaway In-store
##  [785] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [793] In-store Takeaway Takeaway Takeaway Takeaway Takeaway In-store Takeaway
##  [801] Takeaway In-store In-store In-store Takeaway In-store Takeaway Takeaway
##  [809] Takeaway In-store Takeaway Takeaway Takeaway Takeaway Takeaway In-store
##  [817] In-store Takeaway Takeaway Takeaway Takeaway In-store In-store Takeaway
##  [825] Takeaway Takeaway Takeaway In-store In-store Takeaway Takeaway Takeaway
##  [833] Takeaway Takeaway In-store Takeaway Takeaway In-store Takeaway In-store
##  [841] In-store Takeaway Takeaway Takeaway In-store In-store Takeaway Takeaway
##  [849] In-store Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [857] In-store In-store Takeaway In-store Takeaway Takeaway Takeaway Takeaway
##  [865] In-store In-store Takeaway Takeaway In-store In-store Takeaway Takeaway
##  [873] Takeaway Takeaway Takeaway In-store Takeaway Takeaway Takeaway Takeaway
##  [881] In-store Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [889] Takeaway In-store In-store Takeaway Takeaway Takeaway Takeaway In-store
##  [897] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [905] Takeaway In-store Takeaway Takeaway In-store Takeaway In-store Takeaway
##  [913] Takeaway Takeaway Takeaway In-store Takeaway Takeaway In-store In-store
##  [921] In-store Takeaway Takeaway In-store In-store In-store Takeaway Takeaway
##  [929] Takeaway Takeaway Takeaway In-store Takeaway Takeaway Takeaway Takeaway
##  [937] In-store Takeaway Takeaway Takeaway In-store Takeaway Takeaway Takeaway
##  [945] Takeaway In-store Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [953] Takeaway Takeaway In-store Takeaway Takeaway Takeaway In-store In-store
##  [961] Takeaway Takeaway Takeaway In-store Takeaway In-store Takeaway In-store
##  [969] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway
##  [977] Takeaway Takeaway Takeaway Takeaway Takeaway Takeaway In-store Takeaway
##  [985] In-store Takeaway Takeaway Takeaway In-store In-store Takeaway In-store
##  [993] In-store Takeaway Takeaway Takeaway Takeaway In-store Takeaway Takeaway
## Levels: In-store Takeaway
# Melihat levels
levels(Location_factor)
## [1] "In-store" "Takeaway"
# Mengubah factor menjadi kode angka
Location_code <- as.numeric(Location_factor)

# Membuat data frame hasil encoding
data_encoded <- data.frame(
  Location = tabel2$Location,
  code = Location_code
)

# Melihat hasil
head(data_encoded)
##   Location code
## 1 In-store    1
## 2 Takeaway    2
## 3 Takeaway    2
## 4 Takeaway    2
## 5 Takeaway    2
## 6 In-store    1
View(data_encoded)

Pada transformasi ini, data Location yang kosong dan bernilai UNKNOWN sudah tidak ada setelah dilakukan cleaning data sehingga hanya ada data yang valid yang bisa digunakan. Data tersebut kemudian diubah menjadi factor. Kemudian level kategori ditentukan, lalu kategori Location diubah menjadi kode numerik menggunakan as.numeric().

One Hot Encoding

One Hot Encoding Item

# One-hot encoding untuk Item
Item_onehot <- model.matrix(~ Item - 1, data = tabel2)

# Melihat hasil
head(Item_onehot)
##   ItemCake ItemCoffee ItemCookie ItemJuice ItemSalad ItemSandwich ItemSmoothie
## 1        0          1          0         0         0            0            0
## 2        0          0          0         0         0            1            0
## 3        0          1          0         0         0            0            0
## 4        0          0          0         0         1            0            0
## 5        0          0          0         0         0            1            0
## 6        0          0          0         0         0            0            1
##   ItemTea
## 1       0
## 2       0
## 3       0
## 4       0
## 5       0
## 6       0
# Mengubah menjadi data frame
data_onehot <- as.data.frame(Item_onehot)

head(data_onehot)
##   ItemCake ItemCoffee ItemCookie ItemJuice ItemSalad ItemSandwich ItemSmoothie
## 1        0          1          0         0         0            0            0
## 2        0          0          0         0         0            1            0
## 3        0          1          0         0         0            0            0
## 4        0          0          0         0         1            0            0
## 5        0          0          0         0         0            1            0
## 6        0          0          0         0         0            0            1
##   ItemTea
## 1       0
## 2       0
## 3       0
## 4       0
## 5       0
## 6       0
View(data_onehot)

model.matrix() digunakan untuk mengubah kategori Item menjadi beberapa variabel sesuai dengan jumlah itemnya. -1 digunakan agar intercept tidak dibuat sehingga masing-masing kategori menjadi kolom tersendiri.

One Hot Encoding Location

# One-hot encoding untuk Item
Location_onehot <- model.matrix(~ Location - 1, data = tabel2)

# Melihat hasil
head(Location_onehot)
##   LocationIn-store LocationTakeaway
## 1                1                0
## 2                0                1
## 3                0                1
## 4                0                1
## 5                0                1
## 6                1                0
# Mengubah menjadi data frame
data_onehot1 <- as.data.frame(Location_onehot)

head(data_onehot1)
##   LocationIn-store LocationTakeaway
## 1                1                0
## 2                0                1
## 3                0                1
## 4                0                1
## 5                0                1
## 6                1                0
View(data_onehot1)

model.matrix() digunakan untuk mengubah kategori Location menjadi beberapa variabel sesuai dengan jumlah Location. -1 digunakan agar intercept tidak dibuat sehingga masing-masing kategori menjadi kolom tersendiri.

Hasil one-hot encoding berupa nilai 0 dan 1. Nilai 1 menunjukkan bahwa suatu observasi termasuk ke dalam kategori tertentu, sedangkan nilai 0 menunjukkan bahwa observasi tidak termasuk kategori tersebut.

Transformasi Data Kategorik II

Pada transformasi ini digunakan data hasil cleaning dan dilakukan pemeriksaan struktur data, perubahan tipe data menjadi factor, one-hot encoding menggunakan package fastDummies, serta pembentukan matriks dummy menggunakan model.matrix(). Transformasi ini dilakukan untuk one hot encoding pada dua kategorik yang sudah dipilih yaitu, variabel Item dan Location. Pada variabel Quantity walaupun tidak dilakukan transformasi juga namun tetap dilakukan perubahan menjadi factor.

#Membaca dokumen ke R
setwd("D:\\Documents")
data <- read.csv("Cleaning Data 1.csv", header = TRUE, sep = ";")
head(data)
##   Transaction.ID     Item Quantity Price.Per.Unit Total.Spent Payment.Method
## 1    TXN_2176024   Coffee        5            2.0        10.0 Digital Wallet
## 2    TXN_6327139 Sandwich        4            4.0        16.0    Credit Card
## 3    TXN_5488764   Coffee        4            2.0         8.0 Digital Wallet
## 4    TXN_9530003    Salad        1            5.0         5.0 Digital Wallet
## 5    TXN_3753993 Sandwich        5            4.0        20.0    Credit Card
## 6    TXN_2251128 Smoothie        3            4.0        12.0    Credit Card
##   Location  X
## 1 In-store NA
## 2 Takeaway NA
## 3 Takeaway NA
## 4 Takeaway NA
## 5 Takeaway NA
## 6 In-store NA
#Menghapus variabel yang tidak digunakan 
data$X <- NULL
data$Payment.Method <- NULL
data$Total.Spent <- NULL
data$Price.Per.Unit <- NULL
data$Transaction.ID <- NULL
head(data)
##       Item Quantity Location
## 1   Coffee        5 In-store
## 2 Sandwich        4 Takeaway
## 3   Coffee        4 Takeaway
## 4    Salad        1 Takeaway
## 5 Sandwich        5 Takeaway
## 6 Smoothie        3 In-store
View(data)

#Melihat struktur data sebelum encoding
names(data)
## [1] "Item"     "Quantity" "Location"
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" ...
dim(data)
## [1] 1000    3
#Melihat jumlah per variabel
table(data$Item, useNA = "ifany")
## 
##     Cake   Coffee   Cookie    Juice    Salad Sandwich Smoothie      Tea 
##      138      118      110      114      126      123      136      135
table(data$Location, useNA = "ifany")
## 
## In-store Takeaway 
##      300      700
table(data$Quantity, useNA = "ifany")
## 
##   1   2   3   4   5 
## 195 203 179 204 219
#Menjadikan variabel menjadi factor
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 ...
#Melihat level
levels(data$Item)
## [1] "Cake"     "Coffee"   "Cookie"   "Juice"    "Salad"    "Sandwich" "Smoothie"
## [8] "Tea"
levels(data$Location)
## [1] "In-store" "Takeaway"
levels(data$Quantity)
## [1] "1" "2" "3" "4" "5"
#jalankan packages
library(fastDummies)
## Warning: package 'fastDummies' was built under R version 4.6.1
#One hot encoding 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)
##   Quantity Item_Cake Item_Coffee Item_Cookie Item_Juice Item_Salad
## 1        5         0           1           0          0          0
## 2        4         0           0           0          0          0
## 3        4         0           1           0          0          0
## 4        1         0           0           0          0          1
## 5        5         0           0           0          0          0
## 6        3         0           0           0          0          0
##   Item_Sandwich Item_Smoothie Item_Tea Location_In-store Location_Takeaway
## 1             0             0        0                 1                 0
## 2             1             0        0                 0                 1
## 3             0             0        0                 0                 1
## 4             0             0        0                 0                 1
## 5             1             0        0                 0                 1
## 6             0             1        0                 1                 0
#One hot encoding Location menggunakan matriks
location_dummy <- model.matrix(
  ~ Location - 1,
  data = data
)
head(location_dummy)
##   LocationIn-store LocationTakeaway
## 1                1                0
## 2                0                1
## 3                0                1
## 4                0                1
## 5                0                1
## 6                1                0
#One hot encoding menggunakan matriks
item_dummy <- model.matrix(
  ~ Item - 1,
  data = data
)
head(item_dummy)
##   ItemCake ItemCoffee ItemCookie ItemJuice ItemSalad ItemSandwich ItemSmoothie
## 1        0          1          0         0         0            0            0
## 2        0          0          0         0         0            1            0
## 3        0          1          0         0         0            0            0
## 4        0          0          0         0         1            0            0
## 5        0          0          0         0         0            1            0
## 6        0          0          0         0         0            0            1
##   ItemTea
## 1       0
## 2       0
## 3       0
## 4       0
## 5       0
## 6       0
#Perbandingan data sebelum dan sesudah encoding
dim(data)
## [1] 1000    3
dim(data_onehot)
## [1] 1000   11
head(data_onehot)
##   Quantity Item_Cake Item_Coffee Item_Cookie Item_Juice Item_Salad
## 1        5         0           1           0          0          0
## 2        4         0           0           0          0          0
## 3        4         0           1           0          0          0
## 4        1         0           0           0          0          1
## 5        5         0           0           0          0          0
## 6        3         0           0           0          0          0
##   Item_Sandwich Item_Smoothie Item_Tea Location_In-store Location_Takeaway
## 1             0             0        0                 1                 0
## 2             1             0        0                 0                 1
## 3             0             0        0                 0                 1
## 4             0             0        0                 0                 1
## 5             1             0        0                 0                 1
## 6             0             1        0                 1                 0
View(data_onehot)
head(data)
##       Item Quantity Location
## 1   Coffee        5 In-store
## 2 Sandwich        4 Takeaway
## 3   Coffee        4 Takeaway
## 4    Salad        1 Takeaway
## 5 Sandwich        5 Takeaway
## 6 Smoothie        3 In-store
View(data)

#Melihat data kosong sebelum dan sesudah encoding
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

Pada transformasi ini dilakukannya proses one-hot encoding pada variabel Item dan Location untuk mengubah data kategorik menjadi bentuk numerik berupa nilai 0 dan 1. Hasil encoding dapat dilihat menggunakan dummy_cols() maupun model.matrix(). Perbandingan dimensi data sebelum dan sesudah encoding digunakan untuk melihat perubahan jumlah variabel, sedangkan colSums(is.na()) digunakan untuk memastikan keberadaan data kosong sebelum dan sesudah proses encoding.

Kesimpulan

Berdasarkan seluruh transformasi yang telah dilakuakn dan seluruh hasil yang telah didapatkan, data transaksi kafe yang awalanya terdiri dari 10.000 data kemudian dilakukan pengambilan secara acak sebanyak hingga terambil 1.000 data sampel. Data sampel tersebut masih mengandung berbagai macam permasalahan seperti data kosong, ERROR, dan UNKNOWN, sehingga perlu dilakukan proses cleaning data sebelum pengolahan lebih lanjut. Kemudian, variabel kategorik seperti Item dan Location diolah menggunakan beberapa metode. Pada Kategorik I dilakukan proses factor dan label encoding, yaitu mengubah kategori menjadi kode numerik. Selain itu, dilakukan juga one-hot encoding. Pada Kategorik II dilakukan pengolahan lebih lanjut menggunakan factor, fastDummies, dan model.matrix(). Melalui one-hot encoding, setiap kategori diubah menjadi variabel indikator dengan nilai 0 dan 1. Hasil akhirnya menunjukkan bahwa data kategorik dapat diubah ke dalam bentuk numerik sehingga lebih mudah digunakan dalam proses pengolahan dan analisis statistik menggunakan komputer. Proses encoding tersebut juga merupakan tahap persiapan data agar dapat digunakan untuk analisis selanjutnya.