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

Hasil table() menunjukkan jumlah transaksi pelanggan berdasarkan gender, memperlihatkan tingkat partisipasi relatif dari kelompok perempuan dan laki-laki.

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