Nhap du lieu

dirty.data <- read.csv("C:/Users/LENOVO/Desktop/BTL XSTK/Dirty_data/water_potability.csv")
View(dirty.data)

Doc du lieu

str(dirty.data)
## 'data.frame':    3276 obs. of  10 variables:
##  $ ph             : num  NA 3.72 8.1 8.32 9.09 ...
##  $ Hardness       : num  205 129 224 214 181 ...
##  $ Solids         : num  20791 18630 19910 22018 17979 ...
##  $ Chloramines    : num  7.3 6.64 9.28 8.06 6.55 ...
##  $ Sulfate        : num  369 NA NA 357 310 ...
##  $ Conductivity   : num  564 593 419 363 398 ...
##  $ Organic_carbon : num  10.4 15.2 16.9 18.4 11.6 ...
##  $ Trihalomethanes: num  87 56.3 66.4 100.3 32 ...
##  $ Turbidity      : num  2.96 4.5 3.06 4.63 4.08 ...
##  $ Potability     : int  0 0 0 0 0 0 0 0 0 0 ...

Dat lai ten bien

colnames(dirty.data) <- c("ph","har","TDS","chl","sul","EC","TOC","THMs","NTU","P")

Doc va kiem tra coi bien da duoc doi ten chua

str(dirty.data)
## 'data.frame':    3276 obs. of  10 variables:
##  $ ph  : num  NA 3.72 8.1 8.32 9.09 ...
##  $ har : num  205 129 224 214 181 ...
##  $ TDS : num  20791 18630 19910 22018 17979 ...
##  $ chl : num  7.3 6.64 9.28 8.06 6.55 ...
##  $ sul : num  369 NA NA 357 310 ...
##  $ EC  : num  564 593 419 363 398 ...
##  $ TOC : num  10.4 15.2 16.9 18.4 11.6 ...
##  $ THMs: num  87 56.3 66.4 100.3 32 ...
##  $ NTU : num  2.96 4.5 3.06 4.63 4.08 ...
##  $ P   : int  0 0 0 0 0 0 0 0 0 0 ...

Kiem tra so luong NA tung cot

apply(is.na(dirty.data),2,sum)
##   ph  har  TDS  chl  sul   EC  TOC THMs  NTU    P 
##  491    0    0    0  781    0    0  162    0    0

Xu ly du lieu khuyet

listMissingColumns <- colnames(dirty.data)[apply(dirty.data, 2, anyNA)]
medianMissing <- apply(dirty.data[,colnames(dirty.data) %in% listMissingColumns],
                2, median, na.rm = TRUE)
medianMissing
##         ph        sul       THMs 
##   7.036752 333.073546  66.622485

Xu ly NA bang median

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
clean.data <- dirty.data %>% mutate(    
              ph = ifelse(is.na(ph), medianMissing[1], ph),
              sul = ifelse(is.na(sul), medianMissing[2], sul),
              THMs = ifelse(is.na(THMs), medianMissing[3], THMs))

Kiem tra lai xem da xu ly dc NA chua

apply(is.na(clean.data),2,sum)
##   ph  har  TDS  chl  sul   EC  TOC THMs  NTU    P 
##    0    0    0    0    0    0    0    0    0    0

In clean.data

View(clean.data)

Dat bien phan loai va tom tat du lieu

clean.data$P <- as.factor(clean.data$P)
summary(clean.data)
##        ph              har              TDS               chl        
##  Min.   : 0.000   Min.   : 47.43   Min.   :  320.9   Min.   : 0.352  
##  1st Qu.: 6.278   1st Qu.:176.85   1st Qu.:15666.7   1st Qu.: 6.127  
##  Median : 7.037   Median :196.97   Median :20927.8   Median : 7.130  
##  Mean   : 7.074   Mean   :196.37   Mean   :22014.1   Mean   : 7.122  
##  3rd Qu.: 7.870   3rd Qu.:216.67   3rd Qu.:27332.8   3rd Qu.: 8.115  
##  Max.   :14.000   Max.   :323.12   Max.   :61227.2   Max.   :13.127  
##       sul              EC             TOC             THMs        
##  Min.   :129.0   Min.   :181.5   Min.   : 2.20   Min.   :  0.738  
##  1st Qu.:317.1   1st Qu.:365.7   1st Qu.:12.07   1st Qu.: 56.648  
##  Median :333.1   Median :421.9   Median :14.22   Median : 66.622  
##  Mean   :333.6   Mean   :426.2   Mean   :14.28   Mean   : 66.407  
##  3rd Qu.:350.4   3rd Qu.:481.8   3rd Qu.:16.56   3rd Qu.: 76.667  
##  Max.   :481.0   Max.   :753.3   Max.   :28.30   Max.   :124.000  
##       NTU        P       
##  Min.   :1.450   0:1998  
##  1st Qu.:3.440   1:1278  
##  Median :3.955           
##  Mean   :3.967           
##  3rd Qu.:4.500           
##  Max.   :6.739

Ve do thi thong ke Potability

bar.P <- barplot(table(clean.data$P),main = "Thống kê khả năng uống được",xlab = "Khả năng", ylab = "Số mẫu", col = c(1,2), ylim = c(0,2500))

Ve do thi boxplot giua cac bien lien tuc va P

boxplot(clean.data$ph ~ clean.data$P, main = "Boxplot khả năng uống được theo pH", xlab = "Khả năng", ylab = "Độ pH", col = c(3,4))

boxplot(clean.data$har ~ clean.data$P, main = "Boxplot khả năng uống được theo độ cứng", xlab = "Khả năng", ylab = "mg/L", col = c(3,4))

boxplot(clean.data$TDS ~ clean.data$P, main = "Boxplot khả năng uống được theo TDS", xlab = "Khả năng", ylab = "ppm", col = c(3,4))

boxplot(clean.data$chl ~ clean.data$P, main = "Boxplot khả năng uống được theo Chloramines", xlab = "Khả năng", ylab = "ppm", col = c(3,4))

boxplot(clean.data$sul ~ clean.data$P, main = "Boxplot khả năng uống được theo Sulfate", xlab = "Khả năng", ylab = "mg/L", col = c(3,4))

boxplot(clean.data$EC ~ clean.data$P, main = "Boxplot khả năng uống được theo độ dẫn điện", xlab = "Khả năng", ylab = "micro S/cm", col = c(3,4))

boxplot(clean.data$TOC ~ clean.data$P, main = "Boxplot khả năng uống được theo TOC", xlab = "Khả năng", ylab = "ppm", col = c(3,4))

boxplot(clean.data$THMs ~ clean.data$P, main = "Boxplot khả năng uống được theo THMs", xlab = "Khả năng", ylab = "micro g/L", col = c(3,4))

boxplot(clean.data$NTU ~ clean.data$P, main = "Boxplot khả năng uống được theo Độ đục", xlab = "Khả năng", ylab = "NTU", col = c(3,4))

Ve Histogram phan phoi cac bien

hist(clean.data$ph, main = "Histogram của pH", xlab = "Độ pH", ylab = "Tần số", labels = T, col = 5, xlim = c(min(clean.data$ph),max(clean.data$ph)), ylim = c(0,1300))

hist(clean.data$har, main = "Histogram của độ cứng", xlab = "mg/L", ylab = "Tần số", labels = T, col = 5, xlim = c(min(clean.data$har),max(clean.data$har)), ylim = c(0,900))

hist(clean.data$TDS, main = "Histogram của Solids (TDS)", xlab = "ppm", ylab = "Tần số", labels = T, col = 5, ylim = c(0,800))

hist(clean.data$chl, main = "Histogram của Chloramines", xlab = "ppm", ylab = "Tần số", labels = T, col = 5, xlim = c(min(clean.data$chl),max(clean.data$chl)),ylim = c(0,900))

hist(clean.data$sul, main = "Histogram của Sulfate", xlab = "mg/L", ylab = "Tần số", labels = T, col = 5,xlim = c(min(clean.data$sul),max(clean.data$sul)), ylim = c(0,1400))

hist(clean.data$EC, main = "Histogram của Tính dẫn điện", xlab = "micro S/cm", ylab = "Tần số", labels = T, col = 5,xlim = c(min(clean.data$EC),max(clean.data$EC)), ylim = c(0,800))

hist(clean.data$TOC, main = "Histogram của TOC", xlab = "ppm", ylab = "Tần số", labels = T, col = 5,xlim = c(min(clean.data$TOC),max(clean.data$TOC)), ylim = c(0,800))

hist(clean.data$THMs, main = "Histogram của THMs", xlab = "micro g/L", ylab = "Tần số", labels = T, col = 5,xlim = c(min(clean.data$THMs),max(clean.data$THMs)), ylim = c(0,1000))

hist(clean.data$NTU, main = "Histogram của Độ đục", xlab = "NTU", ylab = "Tần số", labels = T, col = 5,xlim = c(min(clean.data$NTU),max(clean.data$NTU)), ylim = c(0,900))