data_customer <- read.csv("data_customer.csv")
str(data_customer)
## 'data.frame':    52 obs. of  5 variables:
##  $ 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 799876 6982081 4782002 4286283 4779797 6315967 5106141 ...
model1 <- lm(Total_Belanja ~ Penghasilan, data = data_customer)
summary(model1)
## 
## Call:
## lm(formula = Total_Belanja ~ Penghasilan, data = data_customer)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -8082776 -1026709   193801   952258  3116596 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.759e+06  1.041e+06   2.650 0.011225 *  
## Penghasilan 4.533e-01  1.183e-01   3.833 0.000408 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1915000 on 43 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared:  0.2546, Adjusted R-squared:  0.2373 
## F-statistic: 14.69 on 1 and 43 DF,  p-value: 0.000408
data_customer <- read.csv("data_customer.csv", header = TRUE)
head(data_customer) 
##   ID_Pelanggan Jenis_Kelamin Tempat_Tinggal Penghasilan Total_Belanja
## 1      ID00031     Laki-laki           Desa     2227350       2563031
## 2      ID00079     Perempuan           Kota     9047608       8369550
## 3      ID00051     Perempuan           Kota     9735540       8053033
## 4      ID00014     Laki-laki           Kota    13510126        799876
## 5      ID00067     Perempuan           Desa     7773498       6982081
## 6      ID00042     Laki-laki           Desa     6666740       4782002
str(data_customer)
## 'data.frame':    52 obs. of  5 variables:
##  $ 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 799876 6982081 4782002 4286283 4779797 6315967 5106141 ...
colSums(is.na(data_customer))
##   ID_Pelanggan  Jenis_Kelamin Tempat_Tinggal    Penghasilan  Total_Belanja 
##              0              0              0              2              6
data_no_na <- na.omit(data_customer)
# Pastikan numeric
data_customer$Penghasilan <- as.numeric(as.character(data_customer$Penghasilan))
data_customer$Total_Belanja <- as.numeric(as.character(data_customer$Total_Belanja))

# Isi NA dengan mean
data_customer$Penghasilan[is.na(data_customer$Penghasilan)] <- 
  mean(data_customer$Penghasilan, na.rm = TRUE)

data_customer$Total_Belanja[is.na(data_customer$Total_Belanja)] <- 
  mean(data_customer$Total_Belanja, na.rm = TRUE)
duplicated(data_customer)
##  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [49] FALSE FALSE FALSE FALSE
data_unique <- data_customer[!duplicated(data_customer), ]
boxplot(data_customer$Penghasilan)

Q1 <- quantile(data_customer$Penghasilan, 0.25, na.rm = TRUE)
Q3 <- quantile(data_customer$Penghasilan, 0.75, na.rm = TRUE)
IQR_value <- IQR(data_customer$Penghasilan, na.rm = TRUE)

data_no_outlier <- subset(
  data_customer,
  Penghasilan > (Q1 - 1.5 * IQR_value) &
  Penghasilan < (Q3 + 1.5 * IQR_value)
)
Q1 <- quantile(data_customer$Penghasilan, 0.25, na.rm = TRUE)
Q3 <- quantile(data_customer$Penghasilan, 0.75, na.rm = TRUE)
IQR <- Q3 - Q1

data_no_outlier <- subset(
  data_customer,
  Penghasilan > (Q1 - 1.5*IQR) &
  Penghasilan < (Q3 + 1.5*IQR)
)
data_customer$Penghasilan <- as.numeric(as.character(data_customer$Penghasilan))
data_customer$Penghasilan <- as.numeric(data_customer$Penghasilan)
data_customer$Penghasilan <- gsub("[^0-9]", "", data_customer$Penghasilan)
data_customer$Penghasilan <- as.numeric(data_customer$Penghasilan)
# Pastikan numeric
data_customer$Penghasilan <- as.numeric(as.character(data_customer$Penghasilan))

# Hitung IQR
Q1 <- quantile(data_customer$Penghasilan, 0.25, na.rm = TRUE)
Q3 <- quantile(data_customer$Penghasilan, 0.75, na.rm = TRUE)
IQR_value <- IQR(data_customer$Penghasilan, na.rm = TRUE)

# Filter outlier
data_no_outlier <- subset(
  data_customer,
  Penghasilan > (Q1 - 1.5 * IQR_value) &
  Penghasilan < (Q3 + 1.5 * IQR_value)
)
unique(data_customer$Jenis_Kelamin)
## [1] "Laki-laki" "Perempuan"
data_customer$Jenis_Kelamin <- tolower(data_customer$Jenis_Kelamin)
unique(data_customer$Tempat_Tinggal)
## [1] "Desa" "Kota"
data_customer$Tempat_Tinggal <- tolower(data_customer$Tempat_Tinggal)
summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

data_customer$Jenis_Kelamin <- as.factor(data_customer$Jenis_Kelamin)
data_customer$Tempat_Tinggal <- as.factor(data_customer$Tempat_Tinggal)

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

model2 <- lm(Total_Belanja ~ Penghasilan + Jenis_Kelamin + Tempat_Tinggal, 
             data = data_customer)

summary(model2)
## 
## Call:
## lm(formula = Total_Belanja ~ Penghasilan + Jenis_Kelamin + Tempat_Tinggal, 
##     data = data_customer)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -5266323 -1256501    49306   876382  3417423 
## 
## Coefficients:
##                          Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             3.959e+06  5.081e+05   7.791 4.56e-10 ***
## Penghasilan            -6.090e-04  1.429e-03  -0.426 0.671785    
## Jenis_Kelaminperempuan  1.762e+06  4.906e+05   3.592 0.000771 ***
## Tempat_Tinggalkota      2.116e+06  4.912e+05   4.307 8.14e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1612000 on 48 degrees of freedom
## Multiple R-squared:  0.4218, Adjusted R-squared:  0.3857 
## F-statistic: 11.67 on 3 and 48 DF,  p-value: 7.299e-06
model2 <- lm(Total_Belanja ~ Penghasilan + Jenis_Kelamin + Tempat_Tinggal, 
             data = data_customer)

summary(model2)
## 
## Call:
## lm(formula = Total_Belanja ~ Penghasilan + Jenis_Kelamin + Tempat_Tinggal, 
##     data = data_customer)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -5266323 -1256501    49306   876382  3417423 
## 
## Coefficients:
##                          Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             3.959e+06  5.081e+05   7.791 4.56e-10 ***
## Penghasilan            -6.090e-04  1.429e-03  -0.426 0.671785    
## Jenis_Kelaminperempuan  1.762e+06  4.906e+05   3.592 0.000771 ***
## Tempat_Tinggalkota      2.116e+06  4.912e+05   4.307 8.14e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1612000 on 48 degrees of freedom
## Multiple R-squared:  0.4218, Adjusted R-squared:  0.3857 
## F-statistic: 11.67 on 3 and 48 DF,  p-value: 7.299e-06
colSums(is.na(data_customer))
##   ID_Pelanggan  Jenis_Kelamin Tempat_Tinggal    Penghasilan  Total_Belanja 
##              0              0              0              0              0
sum(is.na(data_customer))
## [1] 0
data_no_na <- na.omit(data_customer)
data_customer$Penghasilan[is.na(data_customer$Penghasilan)] <- 
  mean(data_customer$Penghasilan, na.rm = TRUE)
# Cek apakah ada duplikat
sum(duplicated(data_customer))
## [1] 0
# Melihat data yang duplikat
data_customer[duplicated(data_customer), ]
## [1] ID_Pelanggan   Jenis_Kelamin  Tempat_Tinggal Penghasilan    Total_Belanja 
## <0 rows> (or 0-length row.names)
data_no_duplicate <- data_customer[!duplicated(data_customer), ]
Q1 <- quantile(data_customer$Penghasilan, 0.25, na.rm = TRUE)
Q3 <- quantile(data_customer$Penghasilan, 0.75, na.rm = TRUE)
IQR_value <- IQR(data_customer$Penghasilan, na.rm = TRUE)

lower_bound <- Q1 - 1.5 * IQR_value
upper_bound <- Q3 + 1.5 * IQR_value

# Menampilkan outlier
outlier <- subset(data_customer,
                  Penghasilan < lower_bound |
                  Penghasilan > upper_bound)

outlier
##    ID_Pelanggan Jenis_Kelamin Tempat_Tinggal Penghasilan Total_Belanja
## 31      ID00015     laki-laki           kota   866222554       6550218
## 41      ID00007     laki-laki           kota   866222554       4498392
data_no_outlier <- subset(data_customer,
                          Penghasilan >= lower_bound &
                          Penghasilan <= upper_bound)
# Ubah jadi huruf kecil semua
data_customer$Jenis_Kelamin <- tolower(data_customer$Jenis_Kelamin)

# Hapus spasi
data_customer$Jenis_Kelamin <- trimws(data_customer$Jenis_Kelamin)

# Standarisasi
data_customer$Jenis_Kelamin[data_customer$Jenis_Kelamin %in% c("l", "laki", "laki-laki")] <- "laki-laki"
data_customer$Jenis_Kelamin[data_customer$Jenis_Kelamin %in% c("p", "perempuan")] <- "perempuan"
plot(data_customer$Penghasilan, data_customer$Total_Belanja,
     main = "Penghasilan vs Total Belanja",
     xlab = "Penghasilan",
     ylab = "Total Belanja",
     pch = 19,
     col = "blue")

abline(model1, col = "red", lwd = 2)

mean(data_customer$Penghasilan, na.rm = TRUE)
## [1] 41645315
median(data_customer$Penghasilan, na.rm = TRUE)
## [1] 9040295
modus <- function(x) {
  uniqx <- unique(x)
  uniqx[which.max(tabulate(match(x, uniqx)))]
}

modus(data_customer$Penghasilan)
## [1] 866222554
mean(data_customer$Total_Belanja, na.rm = TRUE)
## [1] 6550218
median(data_customer$Total_Belanja, na.rm = TRUE)
## [1] 6550218
modus(data_customer$Total_Belanja)
## [1] 6550218
hist(data_customer$Penghasilan,
     main = "Histogram Penghasilan Customer",
     xlab = "Penghasilan",
     col = "skyblue")

plot(data_customer$Penghasilan,
     main = "Plot Penghasilan Customer",
     ylab = "Penghasilan",
     col = "blue",
     pch = 19)

boxplot(data_customer$Penghasilan,
        main = "Boxplot Penghasilan Customer",
        col = "orange")

hist(data_customer$Total_Belanja,
     main = "Histogram Total Belanja",
     xlab = "Total Belanja",
     col = "lightgreen")

boxplot(data_customer$Total_Belanja,
        main = "Boxplot Total Belanja",
        col = "pink")