Import data dari file CSV

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

1. Struktur data

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.

2. Summary data

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).

3. Jumlah total transaksi dalam data

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.

4. Jumlah pelanggan unik dalam dataset

# 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).

5. Pelanggan yang paling sering berbelanja

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.

6. Rata-rata penghasilan pelanggan berdasarkan jenis kelamin

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.

7. Rata-rata total belanja pelanggan berdasarkan jenis kelamin

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.

8. Rata-rata penghasilan pelanggan berdasarkan tempat tinggal (Kota vs Desa)

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.

9. Rata-rata total belanja pelanggan berdasarkan tempat tinggal

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.

10. 5 Pelanggan dengan total belanja tertinggi

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).

11. Distribusi jumlah transaksi berdasarkan jenis kelamin

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.

12. Kategori penghasilan

#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

TUGAS

# 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