1. Pendahuluan & Memahami Analisis Data Eksploratif (EDA)

A. Apa itu Analisis Data Eksploratif (EDA)?

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:

  • Memahami Struktur Data: Mengenal bentuk dimensi data, tipe data, serta isi dasar dari dataset yang sedang diteliti.
  • Mendeteksi Anomali & Nilai Ekstrem: Menemukan adanya outlier (data pencilan), inkonsistensi nilai, atau kesalahan input data (error).
  • Memeriksa Kualitas Data: Memastikan apakah data bersih dari nilai kosong (missing values) sehingga layak untuk dilanjutkan ke tahap pemodelan statistik atau pengujian hipotesis.

B. Metadata & Karakteristik Dataset

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:

  • Sumber Data: Diambil dari platform Kaggle (dipublikasikan oleh Ahmad Mohamed, 2023).
  • Unit Observasi: Transaksi penjualan harian yang tercatat di lingkungan kafe.
  • Format Asal Data: Comma-Separated Values (CSV).
  • Variabel Utama: Secara umum, dataset mentah ini berfokus pada 3 variabel utama, yaitu:
    1. Item: Jenis produk makanan atau minuman yang dibeli oleh pelanggan kafe.
    2. Quantity: Jumlah atau kuantitas produk yang terjual dalam setiap transaksi.
    3. 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.


2. Pengantar & Tahapan Preprocessing Data (Data Wrangling)

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

3. Identifikasi & Cleaning Data (Pembenahan Data)

Sebelum melakukan analisis lebih jauh, kita perlu mengidentifikasi letak kerusakan data pada masing-masing variabel (Item, Quantity, dan Location), lalu membersihkannya.

A. Identifikasi Nilai Bermasalah

Mari kita cek jumlah nilai yang hilang (missing values) serta variasi data pada setiap kolom:

# Mengecek jumlah missing value (NA) di setiap kolom
colSums(is.na(df_raw))
##   Transaction.ID             Item         Quantity   Price.Per.Unit 
##                0                0                0                0 
##      Total.Spent   Payment.Method         Location Transaction.Date 
##                0                0                0                0
# Mengecek variasi kategori pada kolom Item dan Location
table(df_raw$Item)
## 
##              Cake   Coffee   Cookie    ERROR    Juice    Salad Sandwich 
##       28      129      108      101       29      105      111      112 
## Smoothie      Tea  UNKNOWN 
##      129      122       26
table(df_raw$Location)
## 
##             ERROR In-store Takeaway  UNKNOWN 
##      322       37      300      306       35

B. Proses Data Cleaning

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
# Melihat ringkasan statistik setelah data bersih
summary(df_clean)
##  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  
##                                                                             
##                                                                             
## 

4. Transformasi Data Kategorik & Encoding

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

B. One-Hot Encoding

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

5. Kesimpulan

Berdasarkan hasil Analisis Data Eksploratif (Exploratory Data Analysis / EDA) yang telah dilakukan terhadap dataset transaksi penjualan kafe (Cafe Sales), dapat disimpulkan bahwa:

  1. Karakteristik Data Mentah (Dirty Data): Dataset awal terbukti memiliki berbagai anomali kualitas data, seperti adanya nilai string tidak valid berupa teks "ERROR" dan "UNKNOWN" pada beberapa variabel kategorik utama seperti kolom Item dan Location.
  2. Efektivitas Pembersihan Data (Data Cleaning): Melalui penerapan fungsi penyaringan menggunakan 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.
  3. Keberhasilan Transformasi Data (Encoding): Variabel kategorik yang awalnya berbentuk teks berhasil ditransformasikan ke dalam format numerik melalui metode Label Encoding (mengonversi kategori menjadi angka berurutan) dan One-Hot Encoding (memecah kategori menjadi variabel biner dummy bernilai 0 dan 1), sehingga dataset kini sudah sepenuhnya siap digunakan untuk tahap pemodelan statistik lebih lanjut.

Sumber / Referensi

  • Mohamed, Ahmad. (2023). Cafe Sales (Dirty Data). Dataset diunduh dari platform Kaggle.
  • Kuhn, M., & Johnson, K. (2019). Feature Engineering and Selection: A Practical Approach for Predictive Models. CRC Press.
  • Wickham, H., & Grolemund, G. (2016). R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. O’Reilly Media.