Este reporte presenta un análisis exploratorio de datos (EDA) para el conjunto de datos Wine Quality. Se estudia el comportamiento de las variables fisicoquímicas y su relación con la calidad del vino.
wine <- read.csv("winequality-red.csv")
head(wine)
## fixed.acidity volatile.acidity citric.acid residual.sugar chlorides
## 1 7.4 0.70 0.00 1.9 0.076
## 2 7.8 0.88 0.00 2.6 0.098
## 3 7.8 0.76 0.04 2.3 0.092
## 4 11.2 0.28 0.56 1.9 0.075
## 5 7.4 0.70 0.00 1.9 0.076
## 6 7.4 0.66 0.00 1.8 0.075
## free.sulfur.dioxide total.sulfur.dioxide density pH sulphates alcohol
## 1 11 34 0.9978 3.51 0.56 9.4
## 2 25 67 0.9968 3.20 0.68 9.8
## 3 15 54 0.9970 3.26 0.65 9.8
## 4 17 60 0.9980 3.16 0.58 9.8
## 5 11 34 0.9978 3.51 0.56 9.4
## 6 13 40 0.9978 3.51 0.56 9.4
## quality
## 1 5
## 2 5
## 3 5
## 4 6
## 5 5
## 6 5
cat("Número de filas:", nrow(wine), "\n")
## Número de filas: 1599
cat("Número de columnas:", ncol(wine), "\n")
## Número de columnas: 12
str(wine)
## 'data.frame': 1599 obs. of 12 variables:
## $ fixed.acidity : num 7.4 7.8 7.8 11.2 7.4 7.4 7.9 7.3 7.8 7.5 ...
## $ volatile.acidity : num 0.7 0.88 0.76 0.28 0.7 0.66 0.6 0.65 0.58 0.5 ...
## $ citric.acid : num 0 0 0.04 0.56 0 0 0.06 0 0.02 0.36 ...
## $ residual.sugar : num 1.9 2.6 2.3 1.9 1.9 1.8 1.6 1.2 2 6.1 ...
## $ chlorides : num 0.076 0.098 0.092 0.075 0.076 0.075 0.069 0.065 0.073 0.071 ...
## $ free.sulfur.dioxide : num 11 25 15 17 11 13 15 15 9 17 ...
## $ total.sulfur.dioxide: num 34 67 54 60 34 40 59 21 18 102 ...
## $ density : 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 ...
## $ sulphates : 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 ...
## $ quality : int 5 5 5 6 5 5 5 7 7 5 ...
summary(wine)
## fixed.acidity volatile.acidity citric.acid residual.sugar
## 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
## chlorides free.sulfur.dioxide total.sulfur.dioxide density
## 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 sulphates alcohol quality
## 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
colSums(is.na(wine))
## fixed.acidity volatile.acidity citric.acid
## 0 0 0
## residual.sugar chlorides free.sulfur.dioxide
## 0 0 0
## total.sulfur.dioxide density pH
## 0 0 0
## sulphates alcohol quality
## 0 0 0
analizar_variable <- function(data, variable){
print(summary(data[[variable]]))
par(mfrow = c(1,2))
hist(
data[[variable]],
main = paste("Histograma de", variable),
xlab = variable,
col = "skyblue",
border = "white"
)
boxplot(
data[[variable]],
main = paste("Boxplot de", variable),
col = "orange"
)
par(mfrow = c(1,1))
}
for(v in names(wine)){
cat("\n====================================\n")
cat("Variable:", v, "\n")
cat("====================================\n")
analizar_variable(wine, v)
}
##
## ====================================
## Variable: fixed.acidity
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.60 7.10 7.90 8.32 9.20 15.90
##
## ====================================
## Variable: volatile.acidity
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.1200 0.3900 0.5200 0.5278 0.6400 1.5800
##
## ====================================
## Variable: citric.acid
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.090 0.260 0.271 0.420 1.000
##
## ====================================
## Variable: residual.sugar
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.900 1.900 2.200 2.539 2.600 15.500
##
## ====================================
## Variable: chlorides
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.01200 0.07000 0.07900 0.08747 0.09000 0.61100
##
## ====================================
## Variable: free.sulfur.dioxide
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 7.00 14.00 15.87 21.00 72.00
##
## ====================================
## Variable: total.sulfur.dioxide
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 6.00 22.00 38.00 46.47 62.00 289.00
##
## ====================================
## Variable: density
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9901 0.9956 0.9968 0.9967 0.9978 1.0037
##
## ====================================
## Variable: pH
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.740 3.210 3.310 3.311 3.400 4.010
##
## ====================================
## Variable: sulphates
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.3300 0.5500 0.6200 0.6581 0.7300 2.0000
##
## ====================================
## Variable: alcohol
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 8.40 9.50 10.20 10.42 11.10 14.90
##
## ====================================
## Variable: quality
## ====================================
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.000 5.000 6.000 5.636 6.000 8.000
ggplot(wine, aes(x = factor(quality))) +
geom_bar(fill = "steelblue") +
labs(
title = "Distribución de la Calidad del Vino",
x = "Calidad",
y = "Frecuencia"
) +
theme_minimal()
correlaciones <- cor(wine)
corrplot(
correlaciones,
method = "color",
type = "upper",
tl.cex = 0.8
)
cor_quality <- cor(wine)[,"quality"]
cor_quality <- sort(cor_quality)
cor_df <- data.frame(
Variable = names(cor_quality),
Correlacion = cor_quality
)
kable(cor_df)
| Variable | Correlacion | |
|---|---|---|
| volatile.acidity | volatile.acidity | -0.3905578 |
| total.sulfur.dioxide | total.sulfur.dioxide | -0.1851003 |
| density | density | -0.1749192 |
| chlorides | chlorides | -0.1289066 |
| pH | pH | -0.0577314 |
| free.sulfur.dioxide | free.sulfur.dioxide | -0.0506561 |
| residual.sugar | residual.sugar | 0.0137316 |
| fixed.acidity | fixed.acidity | 0.1240516 |
| citric.acid | citric.acid | 0.2263725 |
| sulphates | sulphates | 0.2513971 |
| alcohol | alcohol | 0.4761663 |
| quality | quality | 1.0000000 |
ggplot(
cor_df,
aes(
x = reorder(Variable, Correlacion),
y = Correlacion
)
) +
geom_bar(
stat = "identity",
fill = "darkgreen"
) +
coord_flip() +
labs(
title = "Correlación de Variables con Quality",
x = "Variables",
y = "Correlación"
) +
theme_minimal()
ggpairs(wine)
par(mfrow = c(3,4))
for(v in names(wine)){
boxplot(
wine[[v]],
main = v,
col = "lightblue"
)
}
par(mfrow = c(1,1))
#El conjunto de datos está compuesto por 1.599 observaciones y 12 variables, correspondientes a características fisicoquímicas del vino y una variable de calidad. Esto proporciona una cantidad suficiente de información para realizar análisis exploratorios y posteriores modelos predictivos.
#No se encontraron valores faltantes en ninguna de las variables analizadas, por lo que no fue necesario realizar procesos de imputación o limpieza de datos relacionados con datos ausentes.
#La calidad de los vinos presenta valores entre 3 y 8, con una media de 5.64 y una mediana de 6. Esto indica que la mayoría de los vinos evaluados poseen una calidad media, concentrándose principalmente entre las categorías 5 y 6.
#Las variables presentan diferentes niveles de dispersión. Por ejemplo, la acidez fija (fixed acidity) oscila entre 4.6 y 15.9, mientras que el azúcar residual (residual sugar) alcanza valores de hasta 15.5, lo que evidencia una variabilidad considerable en algunas características químicas.
#A partir de los histogramas y diagramas de caja se observan posibles valores atípicos en variables como residual sugar, chlorides, sulphates, free sulfur dioxide y total sulfur dioxide. Estos valores extremos podrían influir en análisis estadísticos posteriores y deberían considerarse en etapas de modelado.
#Las variables de densidad (density) y pH presentan una menor variabilidad en comparación con otras características, mostrando distribuciones más concentradas alrededor de sus valores centrales.
#El análisis de correlaciones permite identificar relaciones entre las variables fisicoquímicas y la calidad del vino. Algunas variables muestran asociaciones positivas con la calidad, mientras que otras presentan asociaciones negativas, lo que sugiere que la calidad del vino depende de una combinación de múltiples factores químicos.
#El análisis exploratorio permitió comprender la estructura general de los datos, identificar posibles valores extremos y visualizar las relaciones entre variables, proporcionando una base adecuada para futuros análisis predictivos o de clasificación de la calidad del vino.