Shopping Trends adalah sebuah dataset yang menyajikan informasi detail terkait tren belanja pelanggan di sebuah perusahaan ritel. Dataset ini mencakup berbagai aspek, mulai dari detail demografis pelanggan, kategori produk yang dibeli, hingga metode pembayaran yang digunakan.
Dalam era digital saat ini, memahami perilaku belanja pelanggan adalah kunci keberhasilan bagi banyak perusahaan ritel. Dengan dataset ini, kita dapat memahami lebih dalam tentang preferensi pelanggan, tren belanja musiman, hingga faktor-faktor yang mungkin mempengaruhi keputusan pembelian mereka.
Salah satu aspek menarik yang dapat kita gali dari dataset ini adalah metode pembayaran. Dengan semakin beragamnya pilihan metode pembayaran yang tersedia bagi pelanggan, apakah ada korelasi antara metode pembayaran dengan histori pembelian pelanggan sebelumnya?
Dalam analisis ini, kita akan fokus pada dua pertanyaan utama: 1. Kategori produk apa yang paling banyak dibeli? 2. Pada musim apa pembelian paling banyak dilakukan? 3. Berapa rata-rata jumlah pembelian oleh pelanggan dalam setahun?
Mari kita mulai eksplorasi kita menggunakan R dan temukan jawabannya!
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Mari kita inspeksi data kita menggunakan head().
## Customer.ID Age Gender Item.Purchased Category Purchase.Amount..USD.
## 1 1 55 Male Blouse Clothing 53
## 2 2 19 Male Sweater Clothing 64
## 3 3 50 Male Jeans Clothing 73
## 4 4 21 Male Sandals Footwear 90
## 5 5 45 Male Blouse Clothing 49
## 6 6 46 Male Sneakers Footwear 20
## Location Size Color Season Review.Rating Subscription.Status
## 1 Kentucky L Gray Winter 3.1 Yes
## 2 Maine L Maroon Winter 3.1 Yes
## 3 Massachusetts S Maroon Spring 3.1 Yes
## 4 Rhode Island M Maroon Spring 3.5 Yes
## 5 Oregon M Turquoise Spring 2.7 Yes
## 6 Wyoming M White Summer 2.9 Yes
## Shipping.Type Discount.Applied Promo.Code.Used Previous.Purchases
## 1 Express Yes Yes 14
## 2 Express Yes Yes 2
## 3 Free Shipping Yes Yes 23
## 4 Next Day Air Yes Yes 49
## 5 Free Shipping Yes Yes 31
## 6 Standard Yes Yes 14
## Payment.Method Frequency.of.Purchases
## 1 Venmo Fortnightly
## 2 Cash Fortnightly
## 3 Credit Card Weekly
## 4 PayPal Weekly
## 5 PayPal Annually
## 6 Venmo Weekly
Setelah menjalankan kode di atas, Anda akan melihat output dari 6 baris pertama dari dataset Anda. Anda dapat melanjutkan dengan deskripsi kolom seperti pada contoh Anda, tetapi Anda perlu menyesuaikannya berdasarkan kolom yang ada dalam dataset “shopping_trends_updated.csv”.
Berdasarkan inspeksi awal data, dataset belanja kita terdiri dari kolom-kolom berikut:
Pertama-tama, kita akan memeriksa data yang duplikat. Hal ini dapat dilakukan dengan fungsi duplicated(). Untuk melihat jumlah baris yang duplikat, kita dapat membalut fungsi duplicated() dengan fungsi sum().
## [1] 0
Jika kita mendapatkan hasil [1] 0, berarti tidak ada baris yang identik. Namun, untuk memastikan, mari kita periksa apakah ada Customer ID yang duplikat.
## [1] 0
Mari kita periksa nilai yang hilang dalam dataset kita.
## Customer.ID Age Gender
## 0 0 0
## Item.Purchased Category Purchase.Amount..USD.
## 0 0 0
## Location Size Color
## 0 0 0
## Season Review.Rating Subscription.Status
## 0 0 0
## Shipping.Type Discount.Applied Promo.Code.Used
## 0 0 0
## Previous.Purchases Payment.Method Frequency.of.Purchases
## 0 0 0
Jika terdapat kolom dengan banyak missing values, kita dapat memutuskan untuk menghapus kolom tersebut atau mengimputasi missing values.
Kita perlu memastikan bahwa tipe data dari setiap kolom sesuai dengan informasi yang mereka wakili.
## 'data.frame': 3900 obs. of 18 variables:
## $ Customer.ID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Age : int 55 19 50 21 45 46 63 27 26 57 ...
## $ Gender : chr "Male" "Male" "Male" "Male" ...
## $ Item.Purchased : chr "Blouse" "Sweater" "Jeans" "Sandals" ...
## $ Category : chr "Clothing" "Clothing" "Clothing" "Footwear" ...
## $ Purchase.Amount..USD. : int 53 64 73 90 49 20 85 34 97 31 ...
## $ Location : chr "Kentucky" "Maine" "Massachusetts" "Rhode Island" ...
## $ Size : chr "L" "L" "S" "M" ...
## $ Color : chr "Gray" "Maroon" "Maroon" "Maroon" ...
## $ Season : chr "Winter" "Winter" "Spring" "Spring" ...
## $ Review.Rating : num 3.1 3.1 3.1 3.5 2.7 2.9 3.2 3.2 2.6 4.8 ...
## $ Subscription.Status : chr "Yes" "Yes" "Yes" "Yes" ...
## $ Shipping.Type : chr "Express" "Express" "Free Shipping" "Next Day Air" ...
## $ Discount.Applied : chr "Yes" "Yes" "Yes" "Yes" ...
## $ Promo.Code.Used : chr "Yes" "Yes" "Yes" "Yes" ...
## $ Previous.Purchases : int 14 2 23 49 31 14 49 19 8 4 ...
## $ Payment.Method : chr "Venmo" "Cash" "Credit Card" "PayPal" ...
## $ Frequency.of.Purchases: chr "Fortnightly" "Fortnightly" "Weekly" "Weekly" ...
Setelah memeriksa tipe data dari setiap kolom, kita dapat mengubah tipe data yang tidak sesuai menggunakan fungsi seperti as.factor() atau as.numeric().
Berdasarkan deskripsi awal dataset, kita akan melakukan beberapa perubahan tipe data:
Mari kita lakukan perubahan:
df <- df %>%
mutate(
Gender = as.factor(Gender),
`Subscription.Status` = as.factor(`Subscription.Status`),
`Discount.Applied` = as.factor(`Discount.Applied`),
`Promo.Code.Used` = as.factor(`Promo.Code.Used`),
`Payment.Method` = as.factor(`Payment.Method`),
`Frequency.of.Purchases` = as.factor(`Frequency.of.Purchases`)
)Setelah melakukan perubahan, mari kita periksa tipe data untuk memastikan bahwa semua perubahan telah berhasil dilakukan:
## 'data.frame': 3900 obs. of 18 variables:
## $ Customer.ID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Age : int 55 19 50 21 45 46 63 27 26 57 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 2 2 2 2 2 2 2 2 2 2 ...
## $ Item.Purchased : chr "Blouse" "Sweater" "Jeans" "Sandals" ...
## $ Category : chr "Clothing" "Clothing" "Clothing" "Footwear" ...
## $ Purchase.Amount..USD. : int 53 64 73 90 49 20 85 34 97 31 ...
## $ Location : chr "Kentucky" "Maine" "Massachusetts" "Rhode Island" ...
## $ Size : chr "L" "L" "S" "M" ...
## $ Color : chr "Gray" "Maroon" "Maroon" "Maroon" ...
## $ Season : chr "Winter" "Winter" "Spring" "Spring" ...
## $ Review.Rating : num 3.1 3.1 3.1 3.5 2.7 2.9 3.2 3.2 2.6 4.8 ...
## $ Subscription.Status : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...
## $ Shipping.Type : chr "Express" "Express" "Free Shipping" "Next Day Air" ...
## $ Discount.Applied : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...
## $ Promo.Code.Used : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...
## $ Previous.Purchases : int 14 2 23 49 31 14 49 19 8 4 ...
## $ Payment.Method : Factor w/ 6 levels "Bank Transfer",..: 6 2 3 5 5 6 2 3 6 2 ...
## $ Frequency.of.Purchases: Factor w/ 7 levels "Annually","Bi-Weekly",..: 4 4 7 7 1 7 6 7 1 6 ...
Dalam bagian EDA ini, kita akan mencoba menjawab pertanyaan-pertanyaan bisnis yang telah diajukan.
## Customer.ID Age Gender Item.Purchased Category Purchase.Amount..USD.
## 1 1 55 Male Blouse Clothing 53
## 2 2 19 Male Sweater Clothing 64
## 3 3 50 Male Jeans Clothing 73
## 4 4 21 Male Sandals Footwear 90
## 5 5 45 Male Blouse Clothing 49
## 6 6 46 Male Sneakers Footwear 20
## Location Size Color Season Review.Rating Subscription.Status
## 1 Kentucky L Gray Winter 3.1 Yes
## 2 Maine L Maroon Winter 3.1 Yes
## 3 Massachusetts S Maroon Spring 3.1 Yes
## 4 Rhode Island M Maroon Spring 3.5 Yes
## 5 Oregon M Turquoise Spring 2.7 Yes
## 6 Wyoming M White Summer 2.9 Yes
## Shipping.Type Discount.Applied Promo.Code.Used Previous.Purchases
## 1 Express Yes Yes 14
## 2 Express Yes Yes 2
## 3 Free Shipping Yes Yes 23
## 4 Next Day Air Yes Yes 49
## 5 Free Shipping Yes Yes 31
## 6 Standard Yes Yes 14
## Payment.Method Frequency.of.Purchases
## 1 Venmo Fortnightly
## 2 Cash Fortnightly
## 3 Credit Card Weekly
## 4 PayPal Weekly
## 5 PayPal Annually
## 6 Venmo Weekly
Mari kita lihat kategori produk yang paling banyak dibeli oleh pelanggan.
ggplot(df, aes(x = Category)) +
geom_bar() +
labs(title = "Distribusi Kategori Produk yang Dibeli",
x = "Kategori Produk",
y = "Jumlah Pembelian") +
theme_minimal() +
coord_flip()Dari visualisasi di atas, kita dapat mengetahui kategori produk yang paling diminati oleh pelanggan.
Selanjutnya, kita akan melihat pada musim apa pembelian paling banyak dilakukan.
ggplot(df, aes(x = Season)) +
geom_bar() +
labs(title = "Distribusi Pembelian Berdasarkan Musim",
x = "Musim",
y = "Jumlah Pembelian") +
theme_minimal()Dengan visualisasi tersebut, kita dapat mengetahui musim mana yang paling banyak dihubungkan dengan aktivitas pembelian.
Untuk mengetahui rata-rata jumlah pembelian oleh pelanggan dalam setahun, kita dapat menggunakan statistik deskriptif.
## Annually Bi-Weekly Every 3 Months Fortnightly Monthly
## 572 547 584 542 553
## Quarterly Weekly
## 563 539
Ini memberi kita gambaran tentang seberapa sering pelanggan melakukan pembelian dalam setahun. Sebagai contoh, 572 pelanggan berbelanja setiap tahun, sementara 539 pelanggan berbelanja setiap minggu.
Explanatory visualization merupakan tahap membuat visualisasi untuk mempresentasikan data kita. Oleh karena itu, pada tahap ini kita akan membuat visualisasi dengan tampilan yang informatif menarik.
Mari kita buat visualisasi yang menunjukkan distribusi pembelian berdasarkan musim dengan masing-masing kategori produk.
Pertama-tama, mari kita buat dataframe dari tabel frekuensi yang telah kita buat sebelumnya.
purchase_freq <- as.data.frame(table(df$Season, df$Category))
colnames(purchase_freq) <- c("Season", "Category", "Freq")Selanjutnya, kita akan memasukkan dataframe ini ke dalam kode visualisasi kita.
# Heatmap of Purchases by Season and Category
plot_combined <- ggplot(data = purchase_freq, aes(x = Season, y = Category, fill = Freq)) +
geom_tile() +
geom_text(aes(label = Freq), color = "black", size = 4) +
scale_fill_gradient(low = "white", high = "#3498db") +
labs(x = "Musim",
y = "Kategori Produk",
title = "Distribusi Pembelian",
subtitle = "Berdasarkan Kategori Produk dan Produk",
fill = "Jumlah Pembelian") +
theme_light(base_size = 14) +
theme(legend.title = element_text(face = "bold"),
legend.text = element_text(face = "italic"),
plot.title = element_text(face = "bold", size = 16),
plot.subtitle = element_text(size = 14),
axis.title.x = element_text(face = "bold"),
axis.title.y = element_text(face = "bold"))
print(plot_combined)Salah satu pertanyaan yang ingin kita jawab adalah: “Pada musim apa pembelian paling banyak dilakukan?” dan “Kategori produk apa yang paling banyak dibeli?”. Dengan menggabungkan kedua pertanyaan ini, kita dapat mencari tahu distribusi pembelian berdasarkan musim dengan masing-masing kategori produk.
Dari visualisasi heatmap di atas, kita dapat dengan jelas melihat distribusi pembelian berdasarkan musim dan kategori produk. Setiap sel pada heatmap menunjukkan jumlah pembelian untuk kombinasi kategori produk dan musim tertentu.
Beberapa poin penting yang dapat kita ambil dari visualisasi ini adalah:
Secara keseluruhan, heatmap adalah alat visualisasi yang efektif untuk menampilkan dua dimensi data (dalam hal ini, musim dan kategori produk) terhadap variabel ketiga (jumlah pembelian). Dengan warna yang berbeda untuk menunjukkan intensitas, kita dapat dengan cepat menafsirkan dan memahami distribusi data.
Untuk perusahaan ritel, informasi ini sangat berharga. Misalnya, jika mereka melihat bahwa pembelian produk kategori tertentu meningkat pada musim tertentu, mereka dapat meningkatkan stok produk tersebut sebelum musim dimulai. Selain itu, mereka juga dapat menawarkan diskon atau promosi khusus untuk kategori produk yang kurang populer untuk meningkatkan penjualannya.