Se realizó el análisis exploratorio del conjunto de datos utilizado en el caso Winequality-red. Para automatizar el proceso se construyó una función en R que identifica automáticamente el tipo de variable (numérica o categórica) y genera estadísticas descriptivas junto con dos gráficos por variable (histograma y boxplot para numéricas; gráfico de barras y gráfico circular para categóricas).
El análisis se ejecutó sobre todas las variables del dataset, permitiendo identificar su distribución, rangos, valores atípicos y patrones relevantes para la toma de decisiones.
data <- read.csv("winequality-red.csv")
#str(data)
analizar_variable <- function(x,variable) {
print(paste("Clase:", class(x)))
par(mfrow = c(1,2)) # 1 fila, 2 gráficos
if(is.numeric(x)){
print(summary(x))
print(paste("Rango:", round(diff(range(x)),2)))
print(paste("Varianza:", round(var(x),2)))
print(paste("Desviación estándar:", round(sd(x),2)))
hist(x, main = paste("Histograma de", variable), xlab=variable, ylab="Frecuencia")
boxplot(x, main = paste("Boxplot de", variable))
}
else{
print(table(x))
barplot(table(x), main = paste("Frecuencias de", variable))
}
}
aplicar_a_variables <- function(data, funcion){
for (col in names(data)) {
# cat("\n-----------------------------------------------\n")
cat("Variable:", col, "\n")
funcion(data[[col]],col)
}
}
aplicar_a_variables(data, analizar_variable)
## Variable: fixed.acidity
## [1] "Clase: numeric"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.60 7.10 7.90 8.32 9.20 15.90
## [1] "Rango: 11.3"
## [1] "Varianza: 3.03"
## [1] "Desviación estándar: 1.74"
## Variable: volatile.acidity
## [1] "Clase: numeric"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.1200 0.3900 0.5200 0.5278 0.6400 1.5800
## [1] "Rango: 1.46"
## [1] "Varianza: 0.03"
## [1] "Desviación estándar: 0.18"
## Variable: citric.acid
## [1] "Clase: numeric"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.090 0.260 0.271 0.420 1.000
## [1] "Rango: 1"
## [1] "Varianza: 0.04"
## [1] "Desviación estándar: 0.19"
## Variable: residual.sugar
## [1] "Clase: numeric"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.900 1.900 2.200 2.539 2.600 15.500
## [1] "Rango: 14.6"
## [1] "Varianza: 1.99"
## [1] "Desviación estándar: 1.41"
## Variable: chlorides
## [1] "Clase: numeric"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.01200 0.07000 0.07900 0.08747 0.09000 0.61100
## [1] "Rango: 0.6"
## [1] "Varianza: 0"
## [1] "Desviación estándar: 0.05"
## Variable: free.sulfur.dioxide
## [1] "Clase: numeric"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 7.00 14.00 15.87 21.00 72.00
## [1] "Rango: 71"
## [1] "Varianza: 109.41"
## [1] "Desviación estándar: 10.46"
## Variable: total.sulfur.dioxide
## [1] "Clase: numeric"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 6.00 22.00 38.00 46.47 62.00 289.00
## [1] "Rango: 283"
## [1] "Varianza: 1082.1"
## [1] "Desviación estándar: 32.9"
## Variable: density
## [1] "Clase: numeric"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9901 0.9956 0.9968 0.9967 0.9978 1.0037
## [1] "Rango: 0.01"
## [1] "Varianza: 0"
## [1] "Desviación estándar: 0"
## Variable: pH
## [1] "Clase: numeric"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.740 3.210 3.310 3.311 3.400 4.010
## [1] "Rango: 1.27"
## [1] "Varianza: 0.02"
## [1] "Desviación estándar: 0.15"
## Variable: sulphates
## [1] "Clase: numeric"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.3300 0.5500 0.6200 0.6581 0.7300 2.0000
## [1] "Rango: 1.67"
## [1] "Varianza: 0.03"
## [1] "Desviación estándar: 0.17"
## Variable: alcohol
## [1] "Clase: numeric"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 8.40 9.50 10.20 10.42 11.10 14.90
## [1] "Rango: 6.5"
## [1] "Varianza: 1.14"
## [1] "Desviación estándar: 1.07"
## Variable: quality
## [1] "Clase: integer"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.000 5.000 6.000 5.636 6.000 8.000
## [1] "Rango: 5"
## [1] "Varianza: 0.65"
## [1] "Desviación estándar: 0.81"