1 Pendahuluan
Pada analisis ini, digunakan sebuah dataset pelanggan yang berisi informasi terkait karakteristik demografi, perilaku kunjungan, hingga aktivitas pembelian konsumen. Dataset tersebut mencakup beberapa variabel numerik dan kategorik yang akan dianalisis untuk memahami pola dan kecenderungan perilaku pelanggan.
Variabel numerik yang menjadi fokus analisis meliputi:
Age — usia pelanggan
TotalPurchase — total nilai pembelian yang dilakukan
NumberOfVisits — frekuensi kunjungan pelanggan
FeedbackScore — penilaian kepuasan pelanggan terhadap layanan atau produk
Selain itu, terdapat informasi kategorikal yang juga dianalisis untuk melihat proporsi dan distribusi kelompok pelanggan, yaitu:
Gender — jenis kelamin pelanggan (F/M)
ProductCategory — kategori produk yang paling sering dibeli
Melalui analisis statistik deskriptif dan visualisasi data seperti histogram, density plot, bar chart, dan pie chart, studi ini bertujuan memberikan gambaran menyeluruh mengenai profil pelanggan serta membantu mengidentifikasi pola penting dalam perilaku konsumsi mereka. Pendekatan ini diharapkan dapat menjadi dasar pemahaman sebelum dilakukan analisis lanjutan terkait segmentasi pelanggan atau strategi pemasaran berbasis data.
1.1 Persiapan data
# Load paket dengan urutan dan suppress peringatan agar tidak muncul (aesthetic needs)
suppressMessages(library(dplyr)) # Load package dplyr untuk manipulasi data, sembunyikan pesan loading
suppressMessages(library(ggplot2)) # Load package ggplot2 untuk visualisasi grafik, sembunyikan pesan loading
suppressMessages(library(DT)) # Load package DT untuk membuat tabel interaktif, sembunyikan pesan loading
suppressMessages(library(gridExtra)) # Load package gridExtra untuk mengatur layout grafik, sembunyikan pesan loading
suppressMessages(library(DescTools)) # Load package DescTools untuk fungsi statistik tambahan, sembunyikan pesan loading
## Warning: package 'DescTools' was built under R version 4.5.2
suppressMessages(library(knitr)) # Load package knitr untuk format output tabel dan laporan, sembunyikan pesan loading
# Load data
dataset <- read.csv("https://raw.githubusercontent.com/YanDraa/Dataweek6Statistika/main/4_Central_Tendency_Introduction_to_Statistics.csv")
# Membaca file CSV langsung dari link GitHub ke dalam variabel dataset
# Bersihkan kolom tidak perlu yaitu kolom x karena tidak menarik untuk di tampilkan pada data
if ("X" %in% colnames(dataset)) dataset <- dataset %>% select(-X)
# Mengecek apakah ada kolom bernama "X", jika ada maka hapus kolom tersebut
# Bersihkan kolom tidak perlu yaitu kolom CustomerID karena Tidak menarik untuk ditampilkan di data
if ("CustomerID" %in% colnames(dataset)) dataset <- dataset %>% select(-CustomerID)
# Mengecek apakah ada kolom bernama "CustomerID", jika ada maka hapus kolom tersebut
# Tabel utama: Preview data (10 baris pertama)
DT::datatable(
dataset, # Data yang akan ditampilkan dalam tabel
caption = "Tabel Utama: Data Lengkap Pelanggan", # Judul tabel
rownames = T, # Tampilkan nomor baris pada tabel
options = list(pageLength = 10) # Atur tampilan tabel: 10 baris per halaman
)
2 Visualisasi distribusi Gender
gender_counts <- dataset %>% # Ambil dataset lalu
count(Gender) # Hitung jumlah data berdasarkan kategori Gender dan simpan sebagai gender_counts
ggplot(gender_counts, aes(x = Gender, y = n, fill = Gender)) + # Buat plot bar: X = Gender, Y = Jumlah, warna sesuai gender
geom_col(width = 0.6) + # Gunakan bar chart dengan lebar bar 0.6
geom_text(aes(label = n), # Tambahkan teks jumlah pelanggan di atas setiap bar
vjust = -0.5, size = 5) + # Posisi teks sedikit di atas bar, ukuran font 5
labs(
title = "Distribusi Gender Pelanggan", # Judul chart
x = "Gender", # Label sumbu X
y = "Jumlah Pelanggan" # Label sumbu Y
) +
theme_minimal() + # Gunakan tema minimalis
theme(legend.position = "none") # Hilangkan legenda karena warna sudah mewakili label Gender
2.1 Penjelasan
Barplot atau diagram batang merupakan teknik visualisasi yang digunakan untuk membandingkan frekuensi atau jumlah observasi antar kategori. Setiap batang mewakili satu kategori, dan tinggi batang menggambarkan besaran nilai kategori tersebut. Grafik ini sangat efektif untuk melihat perbandingan antar kelompok secara cepat dan jelas.
2.2 Interpretasi
Terlihat bahwa jumlah pelanggan laki-laki sedikit lebih tinggi dibandingkan pelanggan perempuan. Ini berarti segmentasi pelanggan ritel dalam data ini cenderung lebih banyak berasal dari kelompok laki-laki, meskipun perbedaannya tidak terlalu signifikan. Kondisi ini memberi gambaran bahwa strategi pemasaran masih relevan untuk kedua gender.
3 Visualisasi Proporsi ProductCategory
product_summary <- dataset %>% # Gunakan dataset lalu pipeline (%>%)
count(ProductCategory) %>% # Hitung jumlah data berdasarkan kategori produk
mutate(percentage = n / sum(n) * 100, # Hitung persentase tiap kategori (n dibagi total n dikali 100)
label = paste0(ProductCategory, # Buat label untuk ditampilkan pada pie chart
"\n", # Tambahkan line break agar kategori dan persen berada di baris berbeda
round(percentage, 2), "%")) # Tampilkan persentase 2 desimal dan tambahkan simbol %
ggplot(product_summary, aes(x = "", y = percentage, fill = ProductCategory)) + # Buat ggplot: x kosong, y = persentase untuk pie chart
geom_col(width = 1) + # Buat bar chart melingkar (dasar pie chart), width=1 agar penuh
geom_text(aes(label = label), # Tambahkan teks label ke chart
position = position_stack(vjust = 0.5), # Tempatkan teks di tengah setiap bagian pie
color = "white", # Warna teks putih
size = 4, # Ukuran teks agak besar
fontface = "bold") + # Teks tebal
coord_polar(theta = "y") + # Ubah chart bar menjadi pie chart dengan transformasi polar
labs(title = "Proporsi ProductCategory") + # Judul grafik
theme_void() + # Hapus semua elemen background (theme kosong)
theme(legend.position = "none") # Sembunyikan legenda karena sudah ada label langsung di dalam pie chart
3.1 Penjelasan
Pie chart adalah visualisasi berbentuk lingkaran yang dibagi menjadi beberapa segmen untuk menunjukkan proporsi masing-masing kategori dalam satu kesatuan data. Setiap segmen mewakili persentase kontribusi kategori terhadap total keseluruhan. Grafik ini cocok digunakan untuk menunjukkan komposisi atau distribusi persentase antar kategori dalam satu variabel.
3.2 Interpretasi
Kategori tertentu terlihat menjadi pilihan utama dibanding kategori lain. Ini mengindikasikan bahwa minat belanja pelanggan lebih terfokus pada produk tersebut, sehingga perusahaan dapat mempertimbangkan peningkatan stok, promosi, maupun program loyalitas pada kategori yang paling diminati.
4 Visualisasi Perbandingan Lokasi Toko (StoreLocation)
ggplot(dataset, aes(x = StoreLocation, y = TotalPurchase, fill = StoreLocation)) +
# Buat objek ggplot menggunakan dataset; sumbu X = lokasi toko, Y = total pembelian,
# fill = warna berbeda untuk tiap lokasi toko
geom_boxplot() +
# Gunakan boxplot untuk menampilkan distribusi TotalPurchase pada tiap StoreLocation
# (menunjukkan median, quartiles, dan outlier)
labs(
title = "Perbandingan Total Pembelian per Lokasi Toko", # Judul grafik
x = "Lokasi Toko", # Label sumbu X
y = "Total Pembelian" # Label sumbu Y
) +
theme(legend.position = "none")
4.1 Penjelasan
Boxplot merupakan visualisasi statistik yang menampilkan sebaran data numerik melalui lima nilai utama: minimum, kuartil pertama, median, kuartil ketiga, dan maksimum. Selain itu, boxplot juga membantu mengidentifikasi variabilitas data serta keberadaan outlier. Grafik ini sangat berguna untuk membandingkan distribusi data antar kelompok dalam variabel kategorikal.
4.2 Interpretasi
Perbedaan distribusi belanja pada beberapa lokasi menunjukkan bahwa tiap cabang memiliki performa pelanggan yang berbeda. Lokasi dengan median pembelian lebih tinggi dapat dianggap memiliki daya beli pelanggan lebih kuat, sehingga dapat menjadi fokus pengembangan program penjualan atau peningkatan layanan.
5 Visualisasi Distribusi Frekuensi Kunjungan (NumberOfVisits)
visits <- dataset$NumberOfVisits # Ambil kolom NumberOfVisits dari dataset dan simpan sebagai visits
mean_vis <- mean(visits, na.rm=TRUE) # Hitung nilai rata-rata (mean), abaikan nilai NA
median_vis <- median(visits, na.rm=TRUE) # Hitung nilai median, abaikan nilai NA
mode_vis <- Mode(visits) # Hitung nilai modus menggunakan fungsi Mode dari DescTools
ggplot(dataset, aes(NumberOfVisits)) + # Inisialisasi plot dengan NumberOfVisits sebagai variabel X
geom_histogram(aes(y = after_stat(density)), # Buat histogram dan gunakan density sebagai skala Y agar bisa overlay dengan kurva density
binwidth = 1, # Lebar tiap bar histogram = 1
fill = "gray80", # Warna bar abu-abu terang
color = "white", # Garis pemisah antar bar warna putih
linewidth = 1) + # Ketebalan garis antar bar = 1 (lebih jelas)
geom_density(linewidth = 1.2) + # Tambahkan kurva density di atas histogram untuk menunjukkan bentuk distribusi data
geom_vline(xintercept = mean_vis, # Tambahkan garis vertikal pada posisi mean
color="blue", # Warna garis mean biru
linetype="dashed", # Tipe garis mean putus-putus
linewidth=1) + # Ketebalan garis = 1
geom_vline(xintercept = median_vis, # Tambahkan garis vertikal pada posisi median
color="red", # Warna garis median merah
linetype="dotted", # Tipe garis median titik-titik
linewidth=1) + # Ketebalan garis = 1
geom_vline(xintercept = mode_vis, # Tambahkan garis vertikal pada posisi modus
color="green", # Warna garis modus hijau
linewidth=1) + # Ketebalan garis = 1 (line solid default)
annotate("text", # Tambahkan anotasi teks untuk mean
x = mean_vis, # Posisi teks mengikuti nilai mean
y = Inf, # Letakkan di atas grafik
label = paste0("Mean=", round(mean_vis,2)), # Teks label mean
vjust = 2, # Sedikit turun dari batas atas
color="blue") + # Warna label mean biru
annotate("text", # Tambahkan anotasi teks untuk median
x = median_vis, # Posisi teks mengikuti nilai median
y = Inf, # Letakkan di atas grafik
label = paste0("Median=", round(median_vis,2)), # Teks label median
vjust = 3.5, # Lebih turun dari label mean untuk mencegah overlap
color="red") + # Warna label median merah
labs(title="Histogram NumberOfVisits dengan Kurva Density + Mean, Median, Mode",
# Judul grafik
x="Number of Visits", # Label sumbu X
y="Density") + # Label sumbu Y (karena histogram menggunakan density)
theme_minimal()
5.1 Penjelasan
Histogram adalah grafik distribusi frekuensi untuk data numerik yang dibagi ke dalam interval (bins). Tinggi batang menunjukkan banyaknya observasi pada setiap interval. Histogram digunakan untuk melihat pola distribusi data, seperti apakah data cenderung berbentuk simetris, miring (skewed), atau memiliki banyak puncak (multimodal).
Perhitungan Mean :
Rumus mean menjumlahkan semua nilai NumberOfVisit, kemudian
membaginya dengan jumlah data. Mean menunjukkan rata-rata kunjungan
pelanggan dalam dataset.Dan disini kita dapat melihat nilai mean adalah
5.165.
Perhitungan Median :
(Karena 𝑛 = 200 genap — gunakan rata-rata dari posisi ke-100 dan ke-101)
Median adalah nilai tengah setelah semua data NumberOfVisit
diurutkan. Median menggambarkan nilai kunjungan yang paling mewakili
jika terdapat nilai ekstrem.Dan disini kita dapat melihat nilai median
adalah 5.
Perhitungan Mode(modus) :
Mode adalah nilai NumberOfVisit yang paling sering muncul dalam data.
Mode membantu melihat pola kebiasaan kunjungan terbanyak.Dan disini kita
dapat melihat nilai mode (modus) adalah 5 dengan frequensi
41.
5.2 Interpretasi
Sebagian besar pelanggan melakukan kunjungan dalam kisaran tertentu (puncak histogram). Nilai mean dan median yang relatif dekat menunjukkan distribusi yang cukup seimbang. Mode muncul pada rentang kunjungan yang paling tinggi frekuensinya, mengindikasikan mayoritas pelanggan datang sekitar jumlah kunjungan tersebut. Ini memberikan insight bahwa sebagian pelanggan memiliki rutinitas belanja yang teratur.
6 Kesimpulan Analisis
Berdasarkan hasil analisis visualisasi terhadap variabel
Gender, ProductCategory,
TotalPurchase, StoreLocation, dan
NumberOfVisits, diperoleh beberapa insight penting mengenai
karakteristik pelanggan dan pola pembelian.
- Karakteristik Pelanggan dan Frekuensi Kunjungan
Distribusi pelanggan berdasarkan variabel Gender
menunjukkan komposisi yang relatif seimbang, meskipun pelanggan
laki-laki sedikit lebih banyak. Hal ini mengindikasikan bahwa strategi
pemasaran dan program loyalitas harus tetap bersifat inklusif, karena
tidak terdapat dominasi signifikan pada salah satu kelompok gender.
Untuk variabel NumberOfVisits, diperoleh bahwa nilai
Mean ≈ 5.165, Median = 5, dan Mode = 5. Nilai-nilai pusat yang saling
berdekatan ini mencerminkan distribusi yang cenderung simetris, dengan
mayoritas pelanggan melakukan sekitar lima kali kunjungan.
Perhitungan statistik dasar ini menggunakan konsep:
Mean (Rata-rata): jumlah seluruh nilai dibagi banyaknya data
Dimana:
: Mean (Rata-rata)
: Setiap nilai data
: Jumlah Observasi
- Median: nilai tengah setelah data diurutkan
Perhitungan Median (jika data ganjil) :
Perhitungan Median (jika data genap) :
Mode (modus): nilai yang paling sering muncul dalam dataset
Keselarasan ketiga nilai tersebut menunjukkan bahwa pola kunjungan pelanggan relatif stabil dan tidak terdapat penyimpangan ekstrem pada frekuensi kunjungan.
- Preferensi Produk dan Pola Pembelian
Pada variabel ProductCategory, terlihat dominasi yang
jelas pada satu kategori produk tertentu, yang mengindikasikan
preferensi pelanggan yang kuat terhadap kelompok produk tersebut.
Perusahaan dapat memanfaatkan temuan ini untuk mengoptimalkan alokasi
stok, kampanye promosi, serta pengembangan variasi produk pada kategori
yang paling diminati. Sebaliknya, kategori dengan permintaan lebih
rendah perlu dianalisis lebih lanjut untuk mengidentifikasi potensi
pengembangan atau strategi pemasaran khusus.
Sementara itu, boxplot pada variabel TotalPurchase
terhadap StoreLocation menunjukkan adanya variasi nilai
pembelian antar lokasi toko. Variasi ini menandakan bahwa performa
penjualan dapat berbeda secara signifikan berdasarkan lokasi
operasional. Oleh karena itu, strategi manajemen stok, promosi, dan
sumber daya operasional dapat disesuaikan secara spesifik untuk setiap
lokasi guna mengoptimalkan pendapatan.