df_customer <- read.csv("df_customer.csv")
head(df_customer)
## X ID_Pelanggan Jenis_Kelamin Tempat_Tinggal Penghasilan Total_Belanja
## 1 1 ID00031 Laki-laki Desa 2227350 2563031
## 2 2 ID00079 Perempuan Kota 9047608 8369550
## 3 3 ID00051 Perempuan Kota 9735540 8053033
## 4 4 ID00014 Laki-laki Kota 13510126 9799876
## 5 5 ID00067 Perempuan Desa 7773498 6982081
## 6 6 ID00042 Laki-laki Desa 6666740 4782002
str(df_customer)
## 'data.frame': 300 obs. of 6 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ ID_Pelanggan : chr "ID00031" "ID00079" "ID00051" "ID00014" ...
## $ Jenis_Kelamin : chr "Laki-laki" "Perempuan" "Perempuan" "Laki-laki" ...
## $ Tempat_Tinggal: chr "Desa" "Kota" "Kota" "Kota" ...
## $ Penghasilan : int 2227350 9047608 9735540 13510126 7773498 6666740 5658721 7637656 6776730 10412102 ...
## $ Total_Belanja : int 2563031 8369550 8053033 9799876 6982081 4782002 4286283 4779797 6315967 5106141 ...
Perintah: str(df_customer)
Penjelasan: Menampilkan tipe data setiap kolom, jumlah baris, dan jumlah variabel. Informasi ini digunakan untuk memastikan seluruh variabel telah teridentifikasi dengan format yang tepat (seperti character atau numeric) sebelum dilakukan analisis lanjutan.
summary(df_customer)
## X ID_Pelanggan Jenis_Kelamin Tempat_Tinggal
## Min. : 1.00 Length :300 Length :300 Length :300
## 1st Qu.: 75.75 N.unique : 94 N.unique : 2 N.unique : 2
## Median :150.50 N.blank : 0 N.blank : 0 N.blank : 0
## Mean :150.50 Min.nchar: 7 Min.nchar: 9 Min.nchar: 4
## 3rd Qu.:225.25 Max.nchar: 7 Max.nchar: 9 Max.nchar: 4
## Max. :300.00
## Penghasilan Total_Belanja
## Min. : 901314 Min. : 2534171
## 1st Qu.: 6426148 1st Qu.: 5360644
## Median : 8630042 Median : 6552757
## Mean : 8656732 Mean : 6679163
## 3rd Qu.:10921107 3rd Qu.: 7895702
## Max. :16145151 Max. :11626302
Perintah: summary(df_customer)
Penjelasan: Menyajikan statistik deskriptif dasar untuk setiap variabel, seperti nilai minimum, maksimum, rata-rata (mean), dan nilai tengah (median). Hasil ini berfungsi untuk memahami sebaran data awal serta mendeteksi keberadaan nilai yang hilang (missing values) atau pencilan (outlier).
nrow(df_customer)
## [1] 300
Perintah nrow(df_customer) mencatat total 300 baris data.
Penjelasan: Setiap baris mewakili satu aktivitas pembelian. Angka ini mengonfirmasi total rekam jejak transaksi yang terjadi dan tersimpan dalam sistem.
# Fungsi unique() mengekstrak nilai unik dari kolom ID pelanggan
unique(df_customer$ID_Pelanggan)
## [1] "ID00031" "ID00079" "ID00051" "ID00014" "ID00067" "ID00042" "ID00050"
## [8] "ID00043" "ID00025" "ID00090" "ID00091" "ID00069" "ID00057" "ID00092"
## [15] "ID00009" "ID00093" "ID00099" "ID00072" "ID00026" "ID00007" "ID00083"
## [22] "ID00036" "ID00078" "ID00081" "ID00076" "ID00015" "ID00032" "ID00041"
## [29] "ID00074" "ID00023" "ID00027" "ID00060" "ID00053" "ID00096" "ID00038"
## [36] "ID00089" "ID00034" "ID00063" "ID00013" "ID00082" "ID00097" "ID00021"
## [43] "ID00047" "ID00095" "ID00016" "ID00094" "ID00006" "ID00086" "ID00039"
## [50] "ID00004" "ID00052" "ID00022" "ID00087" "ID00035" "ID00040" "ID00030"
## [57] "ID00012" "ID00064" "ID00071" "ID00085" "ID00037" "ID00008" "ID00098"
## [64] "ID00084" "ID00046" "ID00017" "ID00062" "ID00054" "ID00024" "ID00005"
## [71] "ID00070" "ID00055" "ID00075" "ID00048" "ID00077" "ID00056" "ID00068"
## [78] "ID00001" "ID00088" "ID00020" "ID00049" "ID00059" "ID00011" "ID00066"
## [85] "ID00044" "ID00045" "ID00033" "ID00010" "ID00058" "ID00061" "ID00029"
## [92] "ID00073" "ID00018" "ID00002"
# length() menghitung jumlahnya
length(unique(df_customer$ID_Pelanggan))
## [1] 94
Kombinasi length() dan unique() menghasilkan 94 pelanggan.
Penjelasan: Meskipun terdapat 300 transaksi, jumlah individu berbeda yang melakukan pembelian adalah 94 orang. Artinya, sebagian besar pelanggan melakukan transaksi berulang (repeat purchase).
sort(table(df_customer$ID_Pelanggan), decreasing = TRUE)[1:3]
##
## ID00007 ID00025 ID00089
## 9 7 7
Fungsi table() dan sort() mengidentifikasi ID00007 (9 kali), ID00025 (7 kali), dan ID00089 (7 kali).
Penjelasan: Ketiga ID ini merupakan pembeli paling aktif. Mengingat frekuensi transaksinya yang tinggi, kelompok ini tergolong ke dalam segmen konsumen paling loyal yang patut diberi apresiasi atau program retensi khusus.
aggregate(Penghasilan ~ Jenis_Kelamin, data = df_customer, mean)
## Jenis_Kelamin Penghasilan
## 1 Laki-laki 8880902
## 2 Perempuan 8505199
Penerapan aggregate() menunjukkan rata-rata penghasilan Laki-laki sebesar Rp8.880.902 dan Perempuan sebesar Rp8.505.199.
Penjelasan: Tingkat daya beli atau pendapatan antara pelanggan pria dan wanita relatif seimbang, meski kelompok pria sedikit lebih tinggi. Informasi ini membantu mengukur kapasitas finansial dasar dari kedua kelompok gender.
aggregate(Total_Belanja ~ Jenis_Kelamin, data = df_customer, mean)
## Jenis_Kelamin Total_Belanja
## 1 Laki-laki 6034728
## 2 Perempuan 7114786
Hasil perhitungan aggregate() mencatat rata-rata pengeluaran Laki-laki sebesar Rp6.034.728, sedangkan Perempuan mencapai Rp7.114.786.
Penjelasan: Kendati pelanggan pria memiliki rerata penghasilan sedikit lebih tinggi, pelanggan wanita mencatatkan nilai belanja per transaksi yang lebih besar. Hal ini menandakan potensi willingness to spend pelanggan perempuan yang lebih kuat.
aggregate(Penghasilan ~ Tempat_Tinggal, data = df_customer, mean)
## Tempat_Tinggal Penghasilan
## 1 Desa 6249122
## 2 Kota 9878685
Hasil aggregate() memperlihatkan rerata penghasilan di Desa sebesar Rp6.249.122 dan di Kota sebesar Rp9.878.685.
Penjelasan: Data mengonfirmasi kesenjangan tingkat pendapatan antara wilayah perkotaan dan pedesaan. Pelanggan kota memiliki kondisi finansial yang lebih tebal, yang bisa memengaruhi penetapan lini produk sesuai daya beli area.
aggregate(Total_Belanja ~ Tempat_Tinggal, data = df_customer, mean)
## Tempat_Tinggal Total_Belanja
## 1 Desa 5022231
## 2 Kota 7520118
Rata-rata belanja wilayah Desa tercatat sebesar Rp5.022.231, sementara wilayah Kota mencapai Rp7.520.118.
Penjelasan: Konsumen di area kota mengalokasikan anggaran belanja yang signifikan lebih tinggi dibanding konsumen desa. Temuan ini menjadi landasan penting dalam memprioritaskan alokasi anggaran pemasaran di daerah perkotaan.
df_customer[order(-df_customer$Total_Belanja), c("ID_Pelanggan", "Total_Belanja")] |> head(5)
## ID_Pelanggan Total_Belanja
## 76 ID00034 11626302
## 175 ID00011 11527638
## 228 ID00057 11031197
## 287 ID00093 10984825
## 33 ID00007 10846012
Menggunakan order() dan head(5), diperoleh lima pelanggan dengan pengeluaran tertinggi: ID00034, ID00011, ID00057, ID00093, dan ID00007 (berkisar antara Rp10,8 juta hingga Rp11,6 juta).
Penjelasan: Kelompok pelanggan ini memberikan kontribusi pendapatan terbesar bagi bisnis dalam satu transaksi. Mereka merupakan prioritas utama untuk program VIP reward atau penawaran produk bernilai tinggi (upselling).
table(df_customer$Jenis_Kelamin)
##
## Laki-laki Perempuan
## 121 179
Output table() menunjukkan 121 transaksi dilakukan oleh Laki-laki dan 179 transaksi oleh Perempuan.
Penjelasan: Mayoritas aktivitas transaksi di platform didominasi oleh konsumen perempuan (sekitar 59,6%). Data ini menunjukkan ke mana fokus komunikasi pemasaran dan promosi harian sebaiknya diarahkan.
#Rendah (< 5 juta)
#Menengah (5–10 juta)
#Tinggi (> 10 juta)
df_customer$Kategori_Penghasilan <- cut(df_customer$Penghasilan,
breaks = c(-Inf, 5000000, 10000000, Inf),
labels = c("Rendah", "Menengah", "Tinggi"))
table(df_customer$Kategori_Penghasilan)
##
## Rendah Menengah Tinggi
## 27 175 98
Pengolahan fungsi cut() membagi variabel menjadi tiga tingkatan: Rendah (27 transaksi), Menengah (175 transaksi), dan Tinggi (98 transaksi).
Penjelasan: Sebagian besar transaksi berasal dari kelompok masyarakat berpendapatan menengah (5–10 juta). Hasil kuisisi segmen ini membantu bisnis merancang variasi harga (pricing strategy) yang pas, seperti menonjolkan produk value-for-money untuk kelas menengah dan produk eksklusif untuk kelas atas.
# Buat data frame frekuensi
freq <- as.data.frame(table(df_customer$Jenis_Kelamin))
# Tampilkan hasil
freq
## Var1 Freq
## 1 Laki-laki 121
## 2 Perempuan 179
# Nomor 1
# Filter transaksi dengan Total Belanja > 5.000.000
df_filtered <- subset(df_customer, Total_Belanja > 5000000)
# Hitung frekuensi pembelian per pelanggan dan ambil yang paling tinggi
sort(table(df_filtered$ID_Pelanggan), decreasing = TRUE)[1]
## ID00007
## 7
# Nomor 2
# Filter pelanggan Perempuan dari Kota
df_kota_p <- subset(df_customer, Jenis_Kelamin == "Perempuan" & Tempat_Tinggal == "Kota")
# Hitung jumlah transaksi per ID Pelanggan
freq_pelanggan <- table(df_kota_p$ID_Pelanggan)
# Hitung berapa pelanggan unik yang memiliki total belanja > 5 kali
sum(freq_pelanggan > 5)
## [1] 0
# Nomor 3
# Filter transaksi dengan Penghasilan > 5.000.000
df_inc_filtered <- subset(df_customer, Penghasilan > 5000000)
# Cari ID Pelanggan yang paling sering muncul
sort(table(df_inc_filtered$ID_Pelanggan), decreasing = TRUE)[1]
## ID00007
## 9
# Nomor 4
# Filter pelanggan dari Desa dengan Total Belanja > 5.000.000
df_desa_belanja <- subset(df_customer, Tempat_Tinggal == "Desa" & Total_Belanja > 5000000)
# Tampilkan jenis kelamin yang memenuhi kriteria
unique(df_desa_belanja$Jenis_Kelamin)
## [1] "Perempuan" "Laki-laki"
# Nomor 5
# Filter pelanggan dari Desa dengan Total Belanja > 5.000.000
df_desa_belanja <- subset(df_customer, Tempat_Tinggal == "Desa" & Total_Belanja > 5000000)
# Tampilkan ID Pelanggan beserta Penghasilannya
unique(df_desa_belanja[, c("ID_Pelanggan", "Penghasilan")])
## ID_Pelanggan Penghasilan
## 5 ID00067 7773498
## 9 ID00014 6776730
## 43 ID00027 8108645
## 46 ID00089 9032981
## 47 ID00034 5616450
## 53 ID00013 4481204
## 56 ID00091 6128487
## 58 ID00038 5947963
## 61 ID00041 9231091
## 62 ID00047 5940612
## 65 ID00095 8032910
## 73 ID00031 7822419
## 82 ID00022 9331982
## 97 ID00096 7082568
## 106 ID00074 9657061
## 119 ID00094 7651846
## 134 ID00016 5575699
## 138 ID00055 8635642
## 139 ID00075 5809025
## 145 ID00090 6005712
## 148 ID00098 4849165
## 149 ID00048 4626369
## 161 ID00088 5455465
## 166 ID00067 6467267
## 171 ID00049 3157783
## 176 ID00055 6093467
## 177 ID00008 6193172
## 197 ID00072 9024791
## 202 ID00058 9310352
## 209 ID00026 8141032
## 219 ID00052 6499451
## 220 ID00026 10832415
## 224 ID00090 11664452
## 229 ID00073 6455085
## 231 ID00014 6571179
## 232 ID00006 9498495
## 233 ID00091 5671820
## 248 ID00094 3726214
## 249 ID00031 6533837
## 250 ID00093 6856664
## 254 ID00057 7212261
## 257 ID00089 6928182
## 259 ID00066 3373098
## 265 ID00008 6940985
## 280 ID00063 6915574
## 289 ID00097 7028460
## 293 ID00013 9810087