Analisis Data Eksploratif atau Exploratory Data Analysis (EDA) adalah sebuah pendekatan atau filosofi penting dalam ilmu statistika dan sains data untuk menganalisis kumpulan data guna merangkum karakteristik utamanya, sering kali didukung dengan teknik visualisasi data yang intuitif.
Tujuan utama dari Analisis Data Eksploratif meliputi:
Dalam laporan analisis ini, dataset yang digunakan adalah studi kasus dari data transaksi penjualan sebuah kafe yang dikenal sebagai Cafe Sales (Dirty Data). Dataset ini diambil dari platform Kaggle yang diterbitkan oleh seorang kontributor data bernama Ahmad Mohamed pada tahun 2023.
Berikut adalah ringkasan metadata dari dataset tersebut:
Item: Jenis produk makanan atau minuman yang dibeli
oleh pelanggan kafe.Quantity: Jumlah atau kuantitas produk yang terjual
dalam setiap transaksi.Location: Tempat atau metode transaksi berlangsung
(misalnya In-store atau Takeaway).Dataset ini sengaja dipilih karena merepresentasikan dirty data (data kotor), di dalamnya terdapat banyak tantangan seperti data kosong, teks error, dan kategori yang tidak dikenal (unknown), sehingga sangat ideal dijadikan media pembelajaran praktik pembersihan data (data cleaning) dan preprocessing.
Pada tahap ini, kita melakukan data wrangling awal yaitu memuat data mentah (raw data) ke dalam lingkungan RStudio, lalu memeriksa struktur dasar serta ringkasan dari data tersebut.
# Memanggil library yang dibutuhkan
library(tidyverse)
library(knitr)
# Memuat dataset mentah
df_raw <- read.csv2("cafe_sales.csv", stringsAsFactors = FALSE)
# Menampilkan 6 baris pertama data mentah
head(df_raw)## Transaction.ID Item Quantity Price.Per.Unit Total.Spent Payment.Method
## 1 TXN_2176024 Coffee 5 ERROR 10.0 Digital Wallet
## 2 TXN_6327139 ERROR 4 4.0 16.0
## 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 Transaction.Date
## 1 In-store 03/02/2023
## 2 Takeaway ERROR
## 3 Takeaway 30/06/2023
## 4 24/08/2023
## 5 01/04/2023
## 6 In-store 07/06/2023
Sebelum melakukan analisis lebih jauh, kita perlu mengidentifikasi letak kerusakan data pada masing-masing variabel (Item, Quantity, dan Location), lalu membersihkannya.
Mari kita cek jumlah nilai yang hilang (missing values) serta variasi data pada setiap kolom:
## Transaction.ID Item Quantity Price.Per.Unit
## 0 0 0 0
## Total.Spent Payment.Method Location Transaction.Date
## 0 0 0 0
##
## Cake Coffee Cookie ERROR Juice Salad Sandwich
## 28 129 108 101 29 105 111 112
## Smoothie Tea UNKNOWN
## 129 122 26
##
## ERROR In-store Takeaway UNKNOWN
## 322 37 300 306 35
Berdasarkan hasil identifikasi, kita mengubah nilai string seperti “ERROR”, “UNKNOWN”, atau sel kosong menjadi NA. Selain itu, kita pastikan kolom Quantity bertipe numerik. Baris yang bermasalah kemudian dibersihkan:
# Membersihkan data dari ERROR dan UNKNOWN
df_clean <- df_raw %>%
mutate(
Item = ifelse(Item %in% c("ERROR", "UNKNOWN", ""), NA, Item),
Location = ifelse(Location %in% c("ERROR", "UNKNOWN", ""), NA, Location),
Quantity = as.numeric(Quantity)
)## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `Quantity = as.numeric(Quantity)`.
## Caused by warning:
## ! NAs introduced by coercion
# Menghilangkan baris yang memiliki nilai NA
df_clean <- na.omit(df_clean)
# Memeriksa kembali dimensi data setelah dibersihkan
dim(df_clean)## [1] 536 8
## Transaction.ID Item Quantity Price.Per.Unit
## Length:536 Length:536 Min. :1.000 Length:536
## Class :character Class :character 1st Qu.:2.000 Class :character
## Mode :character Mode :character Median :3.000 Mode :character
## Mean :3.116
## 3rd Qu.:4.000
## Max. :5.000
## Total.Spent Payment.Method Location Transaction.Date
## Length:536 Length:536 Length:536 Length:536
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
Setelah data dibersihkan, langkah selanjutnya adalah melakukan transformasi data (encoding). Berdasarkan materi analisis data eksploratif, terdapat dua teknik utama: Label Encoding dan One-Hot Encoding. ## A. Label Encoding Label Encoding mengubah variabel kategorik menjadi bentuk angka berurutan.
df_encoded <- df_clean %>%
mutate(
Location_Label = as.numeric(factor(Location)),
Item_Label = as.numeric(factor(Item))
)
head(df_encoded)## Transaction.ID Item Quantity Price.Per.Unit Total.Spent Payment.Method
## 1 TXN_2176024 Coffee 5 ERROR 10.0 Digital Wallet
## 3 TXN_5488764 Coffee 4 2.0 8.0 Digital Wallet
## 6 TXN_2251128 Smoothie 3 4.0 12.0 Credit Card
## 9 TXN_1643122 Juice 3 3.0 9.0
## 14 TXN_6696619 Cake 3 3.0 9.0
## 15 TXN_2153838 Tea 4 1.5 ERROR Digital Wallet
## Location Transaction.Date Location_Label Item_Label
## 1 In-store 03/02/2023 1 2
## 3 Takeaway 30/06/2023 2 2
## 6 In-store 07/06/2023 1 7
## 9 In-store 15/05/2023 1 4
## 14 Takeaway 19/03/2023 2 1
## 15 In-store 19/12/2023 1 8
One-Hot Encoding mengubah variabel kategorik menjadi kolom biner (dummy variables bernilai 0 dan 1).
df_onehot <- df_encoded %>%
mutate(
Loc_In_Store = ifelse(Location == "In-store", 1, 0),
Loc_Takeaway = ifelse(Location == "Takeaway", 1, 0)
)
head(df_onehot %>% select(Item, Location, Loc_In_Store, Loc_Takeaway))## Item Location Loc_In_Store Loc_Takeaway
## 1 Coffee In-store 1 0
## 3 Coffee Takeaway 0 1
## 6 Smoothie In-store 1 0
## 9 Juice In-store 1 0
## 14 Cake Takeaway 0 1
## 15 Tea In-store 1 0
Berdasarkan hasil Analisis Data Eksploratif (Exploratory Data Analysis / EDA) yang telah dilakukan terhadap dataset transaksi penjualan kafe (Cafe Sales), dapat disimpulkan bahwa:
"ERROR" dan
"UNKNOWN" pada beberapa variabel kategorik utama seperti
kolom Item dan Location.ifelse serta pembuangan baris kosong dengan
na.omit(), seluruh anomali dan nilai yang hilang berhasil
dibersihkan secara sistematis, menghasilkan dataset bersih (clean
data) yang valid.