Langkah-Langkah & Analisis Pengolahan Dataset Customer

I. Pemeriksaan & Persiapan Awal

A. Import data dari file CSV

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
#membaca file csv
df_customer <- read.csv("~/Nayla/R/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

B. Struktur Data

#melihat struktur tipe 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 ...

C. Summary Data

#Menampilkan ringkasan statistik
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

II. Analisis & Pengolahan Data

1. Jumlah total transaksi dalam dataset

#menghitung jumlah baris dalam dataset
nrow(df_customer)
## [1] 300

Menghitung total transaksi dalam dataset ini lalu merepresentasikan satu transaksi yang dilakukan pelanggan. Sehingga menghasilnya total transaksi yang akan terekam.

2. Jumlah pelanggan unik dalam dataset

#mengekstrak pelanggan 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"
#menghitung jumlah pelanggan unik yang berpartisipasi dalam transaksi
length(unique(df_customer$ID_Pelanggan))
## [1] 94

3. Pelanggan yang paling sering berbelanja

#menghitung frekuensi kemunculan setiap ID pelanggan lalu mengurutkan dari yang paling tinggi
sort(table(df_customer$ID_Pelanggan), decreasing = TRUE)[1:3]
## 
## ID00007 ID00025 ID00089 
##       9       7       7

4. Rata-rata penghasilan pelanggan berdasarkan jenis kelamin

#menghitung nilai rata-rata penghasilan
aggregate(Penghasilan ~ Jenis_Kelamin, data = df_customer, mean)
##   Jenis_Kelamin Penghasilan
## 1     Laki-laki     8880902
## 2     Perempuan     8505199

Menghitung nilai rata-rata penghasilan untuk mengetahui adanya perbedaan rata-rata penghasilan antara pelanggan laki-laki dan perempuan, yang dapat berdampak pada strategi pemetaan target pasar kedepannya.

5. Rata-rata total belanja pelanggan berdasarkan jenis kelamin

#menunjukan pola konsumsi pelanggan laki-laki dan perempuan
aggregate(Total_Belanja ~ Jenis_Kelamin, data = df_customer, mean)
##   Jenis_Kelamin Total_Belanja
## 1     Laki-laki       6034728
## 2     Perempuan       7114786

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

#Menghitung rata-rata penghasilan di kota dan desa
aggregate(Penghasilan ~ Tempat_Tinggal, data = df_customer, mean)
##   Tempat_Tinggal Penghasilan
## 1           Desa     6249122
## 2           Kota     9878685

Membandingkan antara rata-rata penghasilan pelanggan di kota dan desa untuk memvalidasi hipotesis tersebut serta menentukan kesesuaian produk dan harga pada masing-masing wilayah.

7. Rata-rata total belanja pelanggan berdasarkan tempat tinggal

#menghitung rata-rata belanja tahunan pelanggan 
aggregate(Total_Belanja ~ Tempat_Tinggal, data = df_customer, mean)
##   Tempat_Tinggal Total_Belanja
## 1           Desa       5022231
## 2           Kota       7520118

Menghitung rata-rata belanja tahunan pelanggan di kota dan desa untuk memetakan potensi pasar yang ditujukan sebagai alokasi sumber daya pemasaran yang lebih strategis.

8. 5 pelanggan dengan total belanja tertinggi

#mengurutkan nilai belanja dari yang terbesar lalu ambil 5 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

Mengurutkan nilai belanja dari yang terbesar lalu diidentifikasi sebagai top pelanggan untuk mempertahankan melalui layanan premium atau personalisasi.

9. Distribusi jumlah transaksi berdasarkan jenis kelamin

#menunjukan jumlah transaksi pelanggan laki-laki dan perempuan
table(df_customer$Jenis_Kelamin)
## 
## Laki-laki Perempuan 
##       121       179

Medistribusikan jumlah transaksi yang dilakukan oleh pelanggan laki-laki perempuan untuk memperlihatkan partisipasi relatif dari masing-masing kelompok.

10. Buat kategori penghasilan

  • rendah (<5 juta)
  • menengah (5-10 juta)
  • tinggi (>10 juta)
#hitung dan buat kategori penghasilan
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

Mengelompokan variabel komtinu menjadi kategori, dengan membagi penghasilan menjadi tiga agar lebih mudah dilakukan.

III. Latihan Mandiri

Latihan 1. Pelanggan yang paling sering membeli dengan total belanja lebih dari 5000000

#menghitung pelanggan yang paling sering belanja total lebih dari 5000000
df_customer %>%
  filter(Total_Belanja > 5000000) %>%
  count(ID_Pelanggan, sort = TRUE)
##    ID_Pelanggan n
## 1       ID00007 7
## 2       ID00025 7
## 3       ID00026 6
## 4       ID00089 6
## 5       ID00053 5
## 6       ID00079 5
## 7       ID00084 5
## 8       ID00090 5
## 9       ID00093 5
## 10      ID00006 4
## 11      ID00009 4
## 12      ID00016 4
## 13      ID00023 4
## 14      ID00024 4
## 15      ID00031 4
## 16      ID00032 4
## 17      ID00036 4
## 18      ID00057 4
## 19      ID00063 4
## 20      ID00067 4
## 21      ID00074 4
## 22      ID00087 4
## 23      ID00091 4
## 24      ID00002 3
## 25      ID00013 3
## 26      ID00014 3
## 27      ID00030 3
## 28      ID00035 3
## 29      ID00037 3
## 30      ID00039 3
## 31      ID00040 3
## 32      ID00042 3
## 33      ID00045 3
## 34      ID00046 3
## 35      ID00052 3
## 36      ID00055 3
## 37      ID00060 3
## 38      ID00069 3
## 39      ID00071 3
## 40      ID00072 3
## 41      ID00082 3
## 42      ID00085 3
## 43      ID00094 3
## 44      ID00004 2
## 45      ID00008 2
## 46      ID00010 2
## 47      ID00017 2
## 48      ID00021 2
## 49      ID00022 2
## 50      ID00033 2
## 51      ID00034 2
## 52      ID00038 2
## 53      ID00041 2
## 54      ID00048 2
## 55      ID00049 2
## 56      ID00050 2
## 57      ID00051 2
## 58      ID00054 2
## 59      ID00058 2
## 60      ID00066 2
## 61      ID00075 2
## 62      ID00076 2
## 63      ID00083 2
## 64      ID00086 2
## 65      ID00092 2
## 66      ID00096 2
## 67      ID00097 2
## 68      ID00001 1
## 69      ID00005 1
## 70      ID00011 1
## 71      ID00012 1
## 72      ID00015 1
## 73      ID00018 1
## 74      ID00027 1
## 75      ID00029 1
## 76      ID00043 1
## 77      ID00044 1
## 78      ID00047 1
## 79      ID00056 1
## 80      ID00059 1
## 81      ID00061 1
## 82      ID00064 1
## 83      ID00070 1
## 84      ID00073 1
## 85      ID00077 1
## 86      ID00078 1
## 87      ID00088 1
## 88      ID00095 1
## 89      ID00098 1
## 90      ID00099 1
  freg <- as.data.frame(table(df_customer$ID_Pelanggan))

Pertama mengambil datanya lalu ke langkah menyaring semua total belanja yang lebih dari 5000000 selanjutnya menghitung id pelanggan yang sudah difilter.

Latihan 2. Banyaknya perempuan di kota yang berbelanja lebih dari 5x

#menghitung pelanggan perempuan di kota yang belanja lebih dari 5x
df_customer %>%
  filter(Jenis_Kelamin == "Perempuan", Tempat_Tinggal == "Kota") %>%
  count(ID_Pelanggan, sort = TRUE) %>%
  filter(n > 5) %>%
  nrow ()
## [1] 0

Latihan 3. Pelanggan yang paling sering membeli dengan penghasilan lebih dari 5000000

#menghitung pelanggan yang paling sering membeli dengan penghasilan lebih dari 5000000
df_customer %>%
  filter(Penghasilan > 5000000) %>%
  count(ID_Pelanggan)
##    ID_Pelanggan n
## 1       ID00001 2
## 2       ID00002 3
## 3       ID00004 2
## 4       ID00005 2
## 5       ID00006 4
## 6       ID00007 9
## 7       ID00008 3
## 8       ID00009 5
## 9       ID00010 2
## 10      ID00011 1
## 11      ID00012 1
## 12      ID00013 2
## 13      ID00014 5
## 14      ID00015 1
## 15      ID00016 4
## 16      ID00017 3
## 17      ID00018 1
## 18      ID00020 2
## 19      ID00021 2
## 20      ID00022 2
## 21      ID00023 5
## 22      ID00024 5
## 23      ID00025 7
## 24      ID00026 6
## 25      ID00027 2
## 26      ID00029 2
## 27      ID00030 3
## 28      ID00031 4
## 29      ID00032 4
## 30      ID00033 1
## 31      ID00034 2
## 32      ID00035 3
## 33      ID00036 4
## 34      ID00037 2
## 35      ID00038 2
## 36      ID00039 3
## 37      ID00040 3
## 38      ID00041 2
## 39      ID00042 4
## 40      ID00043 2
## 41      ID00044 1
## 42      ID00045 3
## 43      ID00046 4
## 44      ID00047 1
## 45      ID00048 2
## 46      ID00049 2
## 47      ID00050 3
## 48      ID00051 2
## 49      ID00052 3
## 50      ID00053 5
## 51      ID00054 4
## 52      ID00055 3
## 53      ID00056 1
## 54      ID00057 4
## 55      ID00058 2
## 56      ID00059 1
## 57      ID00060 3
## 58      ID00061 2
## 59      ID00062 1
## 60      ID00063 5
## 61      ID00064 2
## 62      ID00066 1
## 63      ID00067 4
## 64      ID00068 1
## 65      ID00069 3
## 66      ID00070 2
## 67      ID00071 4
## 68      ID00072 2
## 69      ID00073 1
## 70      ID00074 5
## 71      ID00075 2
## 72      ID00076 3
## 73      ID00077 3
## 74      ID00078 1
## 75      ID00079 5
## 76      ID00081 2
## 77      ID00082 4
## 78      ID00083 3
## 79      ID00084 5
## 80      ID00085 4
## 81      ID00086 3
## 82      ID00087 4
## 83      ID00088 1
## 84      ID00089 6
## 85      ID00090 5
## 86      ID00091 4
## 87      ID00092 2
## 88      ID00093 7
## 89      ID00094 3
## 90      ID00095 1
## 91      ID00096 2
## 92      ID00097 3
## 93      ID00099 1
freg <- as.data.frame(table(df_customer$ID_Pelanggan))

Latihan 4. Berjenis kelamin apa pelanggan yang tinggal di desa namun memiliki total belanja yang lebih dari 5000000

#Berjenis kelamin apa pelanggan di desa dengan total belanja yang lebih dari 5000000
df_customer %>%
  filter(Penghasilan > 5000000, Tempat_Tinggal == "Desa") %>%
  count(Jenis_Kelamin)
##   Jenis_Kelamin  n
## 1     Laki-laki 33
## 2     Perempuan 46

Latihan 5. Berpenghasilan berapa pelanggan yang tinggal di desa namun memiliki total belanja lebih dari 5000000

#Berpenghasilan berapa pelanggan di desa dengan total belanja lebih dari 5000000
df_customer %>%
  filter(Penghasilan > 5000000, Tempat_Tinggal == "Desa") %>%
  count(Penghasilan)
##    Penghasilan n
## 1      5171968 1
## 2      5280050 1
## 3      5455465 1
## 4      5464587 1
## 5      5573386 1
## 6      5575699 1
## 7      5577506 1
## 8      5616450 1
## 9      5629596 1
## 10     5658721 1
## 11     5671820 1
## 12     5675034 1
## 13     5735650 1
## 14     5809025 1
## 15     5822139 1
## 16     5835826 1
## 17     5844654 1
## 18     5844922 1
## 19     5940612 1
## 20     5947963 1
## 21     6005712 1
## 22     6093467 1
## 23     6111530 1
## 24     6112430 1
## 25     6128487 1
## 26     6139532 1
## 27     6193172 1
## 28     6207276 1
## 29     6284917 1
## 30     6293417 1
## 31     6312311 1
## 32     6455085 1
## 33     6461267 1
## 34     6467267 1
## 35     6482092 1
## 36     6499451 1
## 37     6533837 1
## 38     6567758 1
## 39     6571179 1
## 40     6599187 1
## 41     6626458 1
## 42     6662869 1
## 43     6666740 1
## 44     6730038 1
## 45     6776730 1
## 46     6856664 1
## 47     6914715 1
## 48     6915574 1
## 49     6928182 1
## 50     6940985 1
## 51     6954074 1
## 52     7028460 1
## 53     7082568 1
## 54     7124083 1
## 55     7212261 1
## 56     7319584 1
## 57     7351525 1
## 58     7574267 1
## 59     7637656 1
## 60     7643014 1
## 61     7651846 1
## 62     7773498 1
## 63     7822419 1
## 64     8032910 1
## 65     8108645 1
## 66     8141032 1
## 67     8441927 1
## 68     8635642 1
## 69     8830553 1
## 70     9024791 1
## 71     9032981 1
## 72     9231091 1
## 73     9310352 1
## 74     9331982 1
## 75     9498495 1
## 76     9657061 1
## 77     9810087 1
## 78    10832415 1
## 79    11664452 1
freg <- as.data.frame(table(df_customer$Penghasilan))