Análisis exploratorio de Wine Quality

#Leer BD
BD <- read.csv("C:/Users/artur/OneDrive/Escritorio/Data/winequality-red.csv")
#Nombres
names(BD)
##  [1] "fixed.acidity"        "volatile.acidity"     "citric.acid"         
##  [4] "residual.sugar"       "chlorides"            "free.sulfur.dioxide" 
##  [7] "total.sulfur.dioxide" "density"              "pH"                  
## [10] "sulphates"            "alcohol"              "quality"
#Cambio nombres para mejor legibilidad
names(BD) <- c("Acidez Fija", "Acidez Volatil", "Acido Citrico", 
               "Azucar Residual", "Cloruros", "Azufre Libre", 
               "Azufre Total", "Densidad", "pH", 
               "Sulfatos", "Alcohol", "Calidad")
#Resumen
summary(BD)
##   Acidez Fija    Acidez Volatil   Acido Citrico   Azucar Residual 
##  Min.   : 4.60   Min.   :0.1200   Min.   :0.000   Min.   : 0.900  
##  1st Qu.: 7.10   1st Qu.:0.3900   1st Qu.:0.090   1st Qu.: 1.900  
##  Median : 7.90   Median :0.5200   Median :0.260   Median : 2.200  
##  Mean   : 8.32   Mean   :0.5278   Mean   :0.271   Mean   : 2.539  
##  3rd Qu.: 9.20   3rd Qu.:0.6400   3rd Qu.:0.420   3rd Qu.: 2.600  
##  Max.   :15.90   Max.   :1.5800   Max.   :1.000   Max.   :15.500  
##     Cloruros        Azufre Libre    Azufre Total       Densidad     
##  Min.   :0.01200   Min.   : 1.00   Min.   :  6.00   Min.   :0.9901  
##  1st Qu.:0.07000   1st Qu.: 7.00   1st Qu.: 22.00   1st Qu.:0.9956  
##  Median :0.07900   Median :14.00   Median : 38.00   Median :0.9968  
##  Mean   :0.08747   Mean   :15.87   Mean   : 46.47   Mean   :0.9967  
##  3rd Qu.:0.09000   3rd Qu.:21.00   3rd Qu.: 62.00   3rd Qu.:0.9978  
##  Max.   :0.61100   Max.   :72.00   Max.   :289.00   Max.   :1.0037  
##        pH           Sulfatos         Alcohol         Calidad     
##  Min.   :2.740   Min.   :0.3300   Min.   : 8.40   Min.   :3.000  
##  1st Qu.:3.210   1st Qu.:0.5500   1st Qu.: 9.50   1st Qu.:5.000  
##  Median :3.310   Median :0.6200   Median :10.20   Median :6.000  
##  Mean   :3.311   Mean   :0.6581   Mean   :10.42   Mean   :5.636  
##  3rd Qu.:3.400   3rd Qu.:0.7300   3rd Qu.:11.10   3rd Qu.:6.000  
##  Max.   :4.010   Max.   :2.0000   Max.   :14.90   Max.   :8.000
#Estructura
str(BD)
## 'data.frame':    1599 obs. of  12 variables:
##  $ Acidez Fija    : num  7.4 7.8 7.8 11.2 7.4 7.4 7.9 7.3 7.8 7.5 ...
##  $ Acidez Volatil : num  0.7 0.88 0.76 0.28 0.7 0.66 0.6 0.65 0.58 0.5 ...
##  $ Acido Citrico  : num  0 0 0.04 0.56 0 0 0.06 0 0.02 0.36 ...
##  $ Azucar Residual: num  1.9 2.6 2.3 1.9 1.9 1.8 1.6 1.2 2 6.1 ...
##  $ Cloruros       : num  0.076 0.098 0.092 0.075 0.076 0.075 0.069 0.065 0.073 0.071 ...
##  $ Azufre Libre   : num  11 25 15 17 11 13 15 15 9 17 ...
##  $ Azufre Total   : num  34 67 54 60 34 40 59 21 18 102 ...
##  $ Densidad       : num  0.998 0.997 0.997 0.998 0.998 ...
##  $ pH             : num  3.51 3.2 3.26 3.16 3.51 3.51 3.3 3.39 3.36 3.35 ...
##  $ Sulfatos       : num  0.56 0.68 0.65 0.58 0.56 0.56 0.46 0.47 0.57 0.8 ...
##  $ Alcohol        : num  9.4 9.8 9.8 9.8 9.4 9.4 9.4 10 9.5 10.5 ...
##  $ Calidad        : int  5 5 5 6 5 5 5 7 7 5 ...

Analisis visual del comportamiento de cada atributo

BDN <- NULL
BDC <- NULL
BDO <- NULL
boxplots <- function(datos) {columnas <- dim(BD)[2] 
par(mfrow = c(3, 4), mar = c(3, 3, 3, 1))
for (i in 1:columnas) {

  texto = paste("Análisis del atributo ", colnames(BD)[i])
  boxplot(BD[ , i],
          main = texto,
          col = "palegreen1",
          horizontal = FALSE)
}
par(mfrow = c(1, 1))}
boxplots(BD)

histo_pie <- function(datos) {
columnas <<- dim(BD)[2]
par(mfrow = c(3,4))

for (i in 1:columnas) {
if(is.numeric(BD[ ,i])== TRUE)
{
  texto = paste("Analisis del atributo ",colnames(BD)[i])
  hist(BD[ ,i],
       main = texto,
       col = i,
       xlab = colnames(BD)[i])
  BDN <<- c(BDN,i)
}else {
  texto = paste("Analisis del atributo ",colnames(BD)[i])
  pie(table(BD[ ,i]),
      main = texto)
  BDC <<- c(BDC,i)
}
}
}
histo_pie(BD)

Analisis_completo <- function(datos) {
columnas <<- dim(BD)[2]
par(mfrow = c(3,4))
for(i in 1:columnas){
if(colnames(BD)[i]=="Calidad"){

texto <<- paste("Analisis del atributo", colnames(BD)[i])
barplot(table(BD[,i]),
        main = texto,
        col = "mediumpurple2",
        xlab = "Nivel de calidad",
        ylab = "Frecuencia")
BDO <<- c(BDO,i)
}else if(is.numeric(BD[,i])==TRUE){
texto <- paste("Analisis del atributo", colnames(BD)[i])
hist(BD[,i],
     main = texto,
     col = i,
     xlab = "Rango de valores",
     ylab = "Frecuencia")
boxplot(BD[,i],
        main = texto,
        col = i)
BDN <<- c(BDN,i)
}else{
texto <<- paste("Analisis del atributo", colnames(BD)[i])

pie(table(BD[,i]),
    main = texto)

BDC <<- c(BDC,i)
}

}
}
Analisis_completo(BD)

Variables cualitativas

colnames(BD)[BDC]
## character(0)

Variables ordinales

colnames(BD)[BDO]
## [1] "Calidad"

Variables numéricas continuas

colnames(BD)[BDN]
##  [1] "Acidez Fija"     "Acidez Volatil"  "Acido Citrico"   "Azucar Residual"
##  [5] "Cloruros"        "Azufre Libre"    "Azufre Total"    "Densidad"       
##  [9] "pH"              "Sulfatos"        "Alcohol"         "Calidad"        
## [13] "Acidez Fija"     "Acidez Volatil"  "Acido Citrico"   "Azucar Residual"
## [17] "Cloruros"        "Azufre Libre"    "Azufre Total"    "Densidad"       
## [21] "pH"              "Sulfatos"        "Alcohol"