Import data dari file CSV
df_customer <- read.csv("~/PSDAT/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
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 ...
str() digunakan untuk menampilkan struktur internal dari sebuah
objek atau himpunan data secara ringkas.
Summary
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
summary() digunakan untuk menampilkan ringkasan statistik atau
rangkuman informasi secara cepat dari sebuah objek data.
Pelanggan unik dalam dataset
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"
unique() digunakan untuk mengeliminasi elemen duplikat dari sebuah
objek, seperti vektor, data frame, atau matriks, sehingga hanya
menyisakan nilai-nilai yang unik (tidak ada yang kembar).
Pelanggan yang paling sering berbelanja
sort(table(df_customer$ID_Pelanggan), decreasing = TRUE)[1:3]
##
## ID00007 ID00025 ID00089
## 9 7 7
table() digunakan untuk melakukan tabulasi silang dan menghitung
frekuensi (jumlah kemunculan) dari data atau variabel kategorikal.
sort() digunakan untuk mengurutkan hasil frekuensi tersebut dari
yang paling tinggi (decreasing).
Aggregate
aggregate() digunakan untuk membagi dataset menjadi beberapa subset
(kelompok) dan menghitung statistik ringkasan untuk setiap kelompok
tersebut
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
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
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
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 total belanja pelanggan berdasarkan tempat tinggal dan
jenis kelamin
aggregate(Total_Belanja ~ Tempat_Tinggal+Jenis_Kelamin, data = df_customer, mean)
## Tempat_Tinggal Jenis_Kelamin Total_Belanja
## 1 Desa Laki-laki 4466336
## 2 Kota Laki-laki 6868556
## 3 Desa Perempuan 5417953
## 4 Kota Perempuan 7949063
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
order() digunakan untuk mengurutkan data lima pelanggan dengan nilai
belanja tertinggi (top spender).
Distribusi jumlah transaksi berdasarkan jenis kelamin
table(df_customer$Jenis_Kelamin)
##
## Laki-laki Perempuan
## 121 179
Buat 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
Fungsi cut() mengubah variabel kontinu menjadi tiga kategori
penghasilan untuk mempermudah segmentasi target pasar. Misalnya, promosi
hemat bagi kelompok berpenghasilan rendah dan produk premium untuk
kelompok berpenghasilan tinggi.
Tugas
1. Siapa pelanggan yang paling sering membeli dengan total belanja
lebih dari 5000000
library(dplyr)
##
## 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
Q1 <- df_customer %>%
filter(Total_Belanja > 5000000) %>%
count(ID_Pelanggan, sort = TRUE) %>%
slice_head(n=5)
Q1
## ID_Pelanggan n
## 1 ID00007 7
## 2 ID00025 7
## 3 ID00026 6
## 4 ID00089 6
## 5 ID00053 5
2. Ada berapa banyak perempuan di kota yang berbelanja lebih dari
5x
Q2 <- df_customer %>%
filter(ID_Pelanggan > 5, Tempat_Tinggal == "Kota") %>%
count(Jenis_Kelamin = "Perempuan", sort = TRUE)
Q2
## Jenis_Kelamin n
## 1 Perempuan 199
3. Siapa pelanggan yang paling sering membeli dengan penghasilan
lebih dari 5000000
Q3 <- df_customer %>%
filter(Penghasilan > 5000000) %>%
count(ID_Pelanggan, sort = TRUE) %>%
slice_head(n=5)
Q3
## ID_Pelanggan n
## 1 ID00007 9
## 2 ID00025 7
## 3 ID00093 7
## 4 ID00026 6
## 5 ID00089 6
4. Berjenis kelamin apa pelanggan yang tinggal di desa namun
memiliki total belanja yang lebih dari 5000000?
Q4 <- df_customer %>%
filter(Total_Belanja > 5000000, Tempat_Tinggal == "Desa") %>%
count(ID_Pelanggan, Jenis_Kelamin, Total_Belanja, sort = TRUE)
Q4
## ID_Pelanggan Jenis_Kelamin Total_Belanja n
## 1 ID00006 Laki-laki 6134541 1
## 2 ID00008 Perempuan 5052071 1
## 3 ID00008 Perempuan 6100858 1
## 4 ID00013 Laki-laki 5581775 1
## 5 ID00013 Perempuan 5438461 1
## 6 ID00014 Perempuan 6229499 1
## 7 ID00014 Perempuan 6315967 1
## 8 ID00016 Perempuan 5436492 1
## 9 ID00022 Laki-laki 5602663 1
## 10 ID00026 Laki-laki 6663821 1
## 11 ID00026 Laki-laki 7895296 1
## 12 ID00027 Perempuan 6901502 1
## 13 ID00031 Perempuan 5581673 1
## 14 ID00031 Perempuan 6686485 1
## 15 ID00034 Perempuan 7064321 1
## 16 ID00038 Laki-laki 5094570 1
## 17 ID00041 Perempuan 8371463 1
## 18 ID00047 Perempuan 6172545 1
## 19 ID00048 Perempuan 5333229 1
## 20 ID00049 Perempuan 5695306 1
## 21 ID00052 Perempuan 6548809 1
## 22 ID00055 Perempuan 6262374 1
## 23 ID00055 Perempuan 6646206 1
## 24 ID00057 Perempuan 5530567 1
## 25 ID00058 Perempuan 6514985 1
## 26 ID00063 Laki-laki 6201985 1
## 27 ID00066 Perempuan 5157567 1
## 28 ID00067 Perempuan 6344949 1
## 29 ID00067 Perempuan 6982081 1
## 30 ID00072 Perempuan 6500860 1
## 31 ID00073 Perempuan 5490472 1
## 32 ID00074 Laki-laki 7154243 1
## 33 ID00075 Laki-laki 5002921 1
## 34 ID00088 Perempuan 5826813 1
## 35 ID00089 Laki-laki 5776859 1
## 36 ID00089 Perempuan 5259961 1
## 37 ID00090 Perempuan 5987338 1
## 38 ID00090 Perempuan 9796996 1
## 39 ID00091 Perempuan 5990469 1
## 40 ID00091 Perempuan 6935452 1
## 41 ID00093 Perempuan 7140298 1
## 42 ID00094 Perempuan 5043885 1
## 43 ID00094 Perempuan 5983600 1
## 44 ID00095 Perempuan 6259431 1
## 45 ID00096 Perempuan 5369782 1
## 46 ID00097 Perempuan 5214133 1
## 47 ID00098 Perempuan 5535035 1
5. Berpenghasilan berapa pelanggan yang tinggal di desa namun
memiliki total belanja lebih dari 5000000?
Q5 <- df_customer %>%
filter(Total_Belanja > 5000000, Tempat_Tinggal == "Desa") %>%
count(ID_Pelanggan, Penghasilan, Total_Belanja, sort = TRUE) %>%
arrange(desc(Penghasilan))
Q5
## ID_Pelanggan Penghasilan Total_Belanja n
## 1 ID00090 11664452 9796996 1
## 2 ID00026 10832415 7895296 1
## 3 ID00013 9810087 5581775 1
## 4 ID00074 9657061 7154243 1
## 5 ID00006 9498495 6134541 1
## 6 ID00022 9331982 5602663 1
## 7 ID00058 9310352 6514985 1
## 8 ID00041 9231091 8371463 1
## 9 ID00089 9032981 5776859 1
## 10 ID00072 9024791 6500860 1
## 11 ID00055 8635642 6262374 1
## 12 ID00026 8141032 6663821 1
## 13 ID00027 8108645 6901502 1
## 14 ID00095 8032910 6259431 1
## 15 ID00031 7822419 5581673 1
## 16 ID00067 7773498 6982081 1
## 17 ID00094 7651846 5983600 1
## 18 ID00057 7212261 5530567 1
## 19 ID00096 7082568 5369782 1
## 20 ID00097 7028460 5214133 1
## 21 ID00008 6940985 5052071 1
## 22 ID00089 6928182 5259961 1
## 23 ID00063 6915574 6201985 1
## 24 ID00093 6856664 7140298 1
## 25 ID00014 6776730 6315967 1
## 26 ID00014 6571179 6229499 1
## 27 ID00031 6533837 6686485 1
## 28 ID00052 6499451 6548809 1
## 29 ID00067 6467267 6344949 1
## 30 ID00073 6455085 5490472 1
## 31 ID00008 6193172 6100858 1
## 32 ID00091 6128487 5990469 1
## 33 ID00055 6093467 6646206 1
## 34 ID00090 6005712 5987338 1
## 35 ID00038 5947963 5094570 1
## 36 ID00047 5940612 6172545 1
## 37 ID00075 5809025 5002921 1
## 38 ID00091 5671820 6935452 1
## 39 ID00034 5616450 7064321 1
## 40 ID00016 5575699 5436492 1
## 41 ID00088 5455465 5826813 1
## 42 ID00098 4849165 5535035 1
## 43 ID00048 4626369 5333229 1
## 44 ID00013 4481204 5438461 1
## 45 ID00094 3726214 5043885 1
## 46 ID00066 3373098 5157567 1
## 47 ID00049 3157783 5695306 1