Data berikut merupakan data dari sebuah bank yang berisi data dari 10.000 customer berikut dengan umur, gaji, status pernikahan, credit card limit, kategori credit card, dll.
Set up chunk di awal untuk mengatur format chunk pada markdown
options(scipen = 9999)
rm(list=ls())
Setup library yang akan digunakan
library(lubridate)
library(ggplot2)
library(dplyr)
library(tidyverse)
#Data Preprocessing ##Input data dan Struktur data Impor data dari dataset credit card customer
bank <- read.csv("BankChurners.csv")
Inspect data
dim(bank)
## [1] 10127 23
head(bank)
anyNA(bank)
## [1] FALSE
str(bank)
## 'data.frame': 10127 obs. of 23 variables:
## $ CLIENTNUM : int 768805383 818770008 713982108 769911858 709106358 713061558 810347208 818906208 710930508 719661558 ...
## $ Attrition_Flag : chr "Existing Customer" "Existing Customer" "Existing Customer" "Existing Customer" ...
## $ Customer_Age : int 45 49 51 40 40 44 51 32 37 48 ...
## $ Gender : chr "M" "F" "M" "F" ...
## $ Dependent_count : int 3 5 3 4 3 2 4 0 3 2 ...
## $ Education_Level : chr "High School" "Graduate" "Graduate" "High School" ...
## $ Marital_Status : chr "Married" "Single" "Married" "Unknown" ...
## $ Income_Category : chr "$60K - $80K" "Less than $40K" "$80K - $120K" "Less than $40K" ...
## $ Card_Category : chr "Blue" "Blue" "Blue" "Blue" ...
## $ Months_on_book : int 39 44 36 34 21 36 46 27 36 36 ...
## $ Total_Relationship_Count : int 5 6 4 3 5 3 6 2 5 6 ...
## $ Months_Inactive_12_mon : int 1 1 1 4 1 1 1 2 2 3 ...
## $ Contacts_Count_12_mon : int 3 2 0 1 0 2 3 2 0 3 ...
## $ Credit_Limit : num 12691 8256 3418 3313 4716 ...
## $ Total_Revolving_Bal : int 777 864 0 2517 0 1247 2264 1396 2517 1677 ...
## $ Avg_Open_To_Buy : num 11914 7392 3418 796 4716 ...
## $ Total_Amt_Chng_Q4_Q1 : num 1.33 1.54 2.59 1.4 2.17 ...
## $ Total_Trans_Amt : int 1144 1291 1887 1171 816 1088 1330 1538 1350 1441 ...
## $ Total_Trans_Ct : int 42 33 20 20 28 24 31 36 24 32 ...
## $ Total_Ct_Chng_Q4_Q1 : num 1.62 3.71 2.33 2.33 2.5 ...
## $ Avg_Utilization_Ratio : num 0.061 0.105 0 0.76 0 0.311 0.066 0.048 0.113 0.144 ...
## $ Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_1: num 0.0000934 0.0000569 0.0000211 0.0001337 0.0000217 ...
## $ Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_2: num 1 1 1 1 1 ...
Dari inspect diatas dapat kita lihat data memiliki 10.127 row, 23 column dan tidak ada missing value. Lalu kita lihat struktur datanya.
Kita tidak akan menggunakan semua kolom, jadi kita akan memilih data yang akan digunakan untuk visualisasi
credit <- bank[,2:9]
Setelah di subset, data yang akan dipakai ada 8 kolom dari sebelumnya 23 kolom
pada kolom ‘Gender’ informasi F dan M kurang bagus untuk visualisasi sehingga perlu dimodifikasi menjadi data yang lebih informatif
credit$Gender <- sapply(X =as.character(credit$Gender),FUN = switch,
"F" = "Female",
"M" = "Male")
Ada beberapa kolom yang bisa diubah menjadi factor/category karena banyak terjadi perulangan. Kita ubah tipe data kolom tersebut menggunakan ‘as.factor()’
credit[,c("Attrition_Flag","Gender","Education_Level",
"Marital_Status","Income_Category","Card_Category")] <-
lapply(credit[,c("Attrition_Flag","Gender","Education_Level",
"Marital_Status","Income_Category","Card_Category")],as.factor)
Kelompokkan Card Category dan hitung keseluruhan pengguna dari masing masing education Level
levelcard <- credit %>%
group_by(Card_Category) %>%
count(Education_Level)
Lalu visualisasikan dengan bar chart
ggplot(levelcard, aes(reorder(Card_Category, n),n ))+
geom_col(aes(fill = Education_Level),position = "dodge")+
labs(title = "Education Level per Card Category",
x = "Card Category" , y = "Total", fill="Education Level")
Dari chart diatas dapat dilihat bahwa pengguna Blue Card mendominasi customer bank, maka kita coba visualisasikan plot persebaran umur untuk pengguna blue card.
Pertama, kita subset data pengguna yang menggunakan blue card
bluec <- credit %>%
filter(Card_Category == "Blue")
Lalu visualisasikan menjadi density plot
ggplot(bluec,aes(x=Customer_Age))+geom_density(aes(fill="Customer Age"),show.legend = FALSE)+
labs(
title = "Persebaran Umur pengguna Blue Card",
x="Customer Age"
)
Dapat dilihat dari chart diatas, pengguna blue card didominasi dari kalangan berusia 40-50 tahun
maritalinc <- credit %>%
group_by(Marital_Status) %>%
count(Income_Category) %>%
arrange(desc(n))
ggplot(maritalinc, aes(reorder(Marital_Status, n),n ))+
geom_col(aes(fill = Income_Category),position = "dodge")+
labs(title = "Income Category count per Marital Status",
x = "Marital Status" , y = "Total", fill="Income Category")
Pada semua kategori marital status, penghasilan kurang dari $40K mendominasi dan dapat dilihat bahwa data pengguna credit bank didominasi oleh pengguna dengan marital status married dengan penghasilan kurang dari $40K