Introducción

Este manual ejecutable representa el consolidado de la práctica de R de la asignatura de Análisis Masivo de Datos. Está diseñado para guiar a los estudiantes paso a paso en la realización de un análisis exploratorio de datos utilizando R. Trabajaremos con datos reales de la empresa Adventure Works, suministrados para la actividad 1 de la asignatura. Adventure Works vende bicicletas en el centro de Madrid. El objetivo es aplicar técnicas de análisis exploratorio para extraer información valiosa del conjunto de datos y demostrar las habilidades adquiridas durante el curso.”

Nota: Este es un documento RMarkdown ejecutable. Puedes ejecutar cada bloque de código haciendo clic en el botón “Run” (triángulo verde) en la esquina superior derecha de cada bloque, o presionando Ctrl+Shift+Enter cuando el cursor esté dentro del bloque.

1. Preparación del Entorno

1.1 Instalación de Paquetes

Antes de comenzar con el análisis, es necesario instalar los paquetes requeridos. En R, los paquetes son colecciones de funciones, datos y código que extienden las capacidades básicas de R.

# ------------------------------------------------------
# INSTALAR PAQUETES (solo la primera vez en tu RStudio)
# ------------------------------------------------------
install.packages("readxl")
install.packages("ggplot2")
install.packages("dplyr")
install.packages("corrplot")
install.packages("tinytex")
install.packages("scales")

Importante: La instalación de paquetes solo se realiza una vez en tu RStudio. Una vez instalados, no es necesario volver a ejecutar estos comandos. Por eso, este bloque está configurado para no ejecutarse automáticamente (eval=FALSE).

1.2 Carga de Librerías

Una vez instalados los paquetes, es necesario cargarlos en la sesión o el proyecto actual de R para poder utilizar sus funciones.

# ------------------------------------------------------
# CARGAR LIBRERÍAS (siempre al iniciar un script)
# ------------------------------------------------------
library(readxl)
library(ggplot2)
library(dplyr)
library(corrplot)

Nota: A diferencia de install.packages(), library() debe ejecutarse cada vez que inicias una nueva sesión de R.

2. Carga de Datos

Para comenzar el análisis, necesitamos cargar los datos desde el archivo Excel.

# Cargar el archivo de datos; puedes realizarlo con esta instruccion ubicardo la ruta donde se encuentra el archivo en tu computador. o en la parte superior derecha de la pantalla  R haciendo clic en Import DataSet
datos <- readxl::read_excel("/Users/leidypatriciarodriguezbernal/Desktop/proyectos R/datos_reg(1).xlsx")

# Mostrar las primeras filas del conjunto de datos
head(datos)
## # A tibble: 6 × 12
##   Codigo BikeBuyer AvgMonthSpend Gender Age_Bin  YearlyIncome Occupation    
##    <dbl>     <dbl> <chr>         <chr>  <chr>           <dbl> <chr>         
## 1      1         1 50.97         M      26 to 29        81916 Clerical      
## 2      2         1 53.11         M      30 to 50        81076 Clerical      
## 3      3         1 54.08         F      30 to 50        86387 Clerical      
## 4      4         1 56.93         M      30 to 50        61481 Skilled Manual
## 5      5         1 55.41         M      30 to 50        51804 Skilled Manual
## 6      6         1 49.31         F      30 to 50        61944 Skilled Manual
## # ℹ 5 more variables: MaritalStatus <chr>, NumberCarsOwned <dbl>, Age <dbl>,
## #   NumberChildrenAtHome <dbl>, TotalChildren <dbl>

Explicación detallada:

  • readxl::read_excel(): Esta notación indica que estamos usando la función read_excel() del paquete readxl. El uso de :: es una forma explícita de indicar de qué paquete proviene la función.
  • El parámetro es la ruta al archivo Excel. Si estás ejecutando este código en tu computadora, deberás ajustar esta ruta según la ubicación del archivo en tu sistema.
  • datos <-: Asigna el resultado (el conjunto de datos cargado) a un objeto llamado “datos”. Este objeto será un data frame, que es la estructura de datos principal para análisis en R.
  • head(datos): Muestra las primeras 6 filas del conjunto de datos.

Personalización: - Si tu archivo tiene varias hojas, puedes especificar cuál quieres cargar con el parámetro sheet: r datos <- readxl::read_excel("/ruta/al/archivo.xlsx", sheet = "Nombre de la hoja")

3. Exploración Inicial de la Estructura de Datos

3.1 Estructura de los Datos

Para entender la estructura de nuestros datos, utilizamos la función str():

# La función str() significa "structure" (estructura)
# Muestra un resumen compacto de la estructura interna del objeto 'datos'
str(datos)
## tibble [14,685 × 12] (S3: tbl_df/tbl/data.frame)
##  $ Codigo              : num [1:14685] 1 2 3 4 5 6 7 8 9 10 ...
##  $ BikeBuyer           : num [1:14685] 1 1 1 1 1 1 0 1 0 0 ...
##  $ AvgMonthSpend       : chr [1:14685] "50.97" "53.11" "54.08" "56.93" ...
##  $ Gender              : chr [1:14685] "M" "M" "F" "M" ...
##  $ Age_Bin             : chr [1:14685] "26 to 29" "30 to 50" "30 to 50" "30 to 50" ...
##  $ YearlyIncome        : num [1:14685] 81916 81076 86387 61481 51804 ...
##  $ Occupation          : chr [1:14685] "Clerical" "Clerical" "Clerical" "Skilled Manual" ...
##  $ MaritalStatus       : chr [1:14685] "M" "M" "S" "M" ...
##  $ NumberCarsOwned     : num [1:14685] 3 2 3 2 1 2 1 1 1 1 ...
##  $ Age                 : num [1:14685] 29 44 31 39 42 42 45 20 40 18 ...
##  $ NumberChildrenAtHome: num [1:14685] 0 1 0 1 0 2 0 0 0 0 ...
##  $ TotalChildren       : num [1:14685] 1 2 0 2 0 2 0 0 0 0 ...

Explicación detallada:

  • str(): Muestra la estructura interna de un objeto R.
  • Para un data frame, muestra:
    • El tipo de objeto (data.frame)
    • Número de observaciones (filas) y variables (columnas)
    • Nombre de cada variable
    • Tipo de dato de cada variable (numeric, character, factor, etc.)
    • Primeros valores de cada variable como muestra

3.2 Dimensiones del Conjunto de Datos

# Obtener las dimensiones del conjunto de datos (filas y columnas)
dim(datos)
## [1] 14685    12

Explicación: - El primer número indica la cantidad de filas (observaciones) - El segundo número indica la cantidad de columnas (variables)

3.3 Nombres de las Variables

# Ver los nombres de todas las variables
names(datos)
##  [1] "Codigo"               "BikeBuyer"            "AvgMonthSpend"       
##  [4] "Gender"               "Age_Bin"              "YearlyIncome"        
##  [7] "Occupation"           "MaritalStatus"        "NumberCarsOwned"     
## [10] "Age"                  "NumberChildrenAtHome" "TotalChildren"

3.4 Resumen Estadístico

Para obtener un resumen estadístico básico de nuestros datos:

# summary() es una función básica de R que sirve para hacer un resumen estadístico rápido
summary(datos)
##      Codigo        BikeBuyer      AvgMonthSpend         Gender         
##  Min.   :    1   Min.   :0.0000   Length:14685       Length:14685      
##  1st Qu.: 3672   1st Qu.:0.0000   Class :character   Class :character  
##  Median : 7343   Median :1.0000   Mode  :character   Mode  :character  
##  Mean   : 7343   Mean   :0.5517                                        
##  3rd Qu.:11014   3rd Qu.:1.0000                                        
##  Max.   :14685   Max.   :1.0000                                        
##    Age_Bin           YearlyIncome     Occupation        MaritalStatus     
##  Length:14685       Min.   : 25435   Length:14685       Length:14685      
##  Class :character   1st Qu.: 53311   Class :character   Class :character  
##  Mode  :character   Median : 61887   Mode  :character   Mode  :character  
##                     Mean   : 72898                                        
##                     3rd Qu.: 87499                                        
##                     Max.   :139115                                        
##  NumberCarsOwned      Age        NumberChildrenAtHome TotalChildren   
##  Min.   :0.000   Min.   :16.00   Min.   :0.0000       Min.   :0.0000  
##  1st Qu.:1.000   1st Qu.:26.00   1st Qu.:0.0000       1st Qu.:0.0000  
##  Median :1.000   Median :33.00   Median :0.0000       Median :0.0000  
##  Mean   :1.272   Mean   :34.68   Mean   :0.3382       Mean   :0.8469  
##  3rd Qu.:2.000   3rd Qu.:42.00   3rd Qu.:1.0000       3rd Qu.:2.0000  
##  Max.   :5.000   Max.   :85.00   Max.   :3.0000       Max.   :3.0000

Explicación detallada:

  • summary(): Genera estadísticas descriptivas para cada variable en el data frame.
  • Para variables numéricas muestra:
    • Min.: Valor mínimo
    • 1st Qu.: Primer cuartil (25% de los datos están por debajo)
    • Median: Mediana (valor central)
    • Mean: Media (promedio)
    • 3rd Qu.: Tercer cuartil (75% de los datos están por debajo)
    • Max.: Valor máximo
  • Para variables categóricas (character o factor) muestra:
    • Frecuencia de los niveles más comunes

3.5 Verificar Valores Faltantes

# Contar el número total de valores faltantes en el conjunto de datos
sum(is.na(datos))
## [1] 0
# Contar valores faltantes por columna
colSums(is.na(datos))
##               Codigo            BikeBuyer        AvgMonthSpend 
##                    0                    0                    0 
##               Gender              Age_Bin         YearlyIncome 
##                    0                    0                    0 
##           Occupation        MaritalStatus      NumberCarsOwned 
##                    0                    0                    0 
##                  Age NumberChildrenAtHome        TotalChildren 
##                    0                    0                    0

Interpretación: - Si el resultado es 0, no hay valores faltantes en el conjunto de datos - Si hay valores mayores que 0, indica cuántos valores faltantes hay en cada columna

4. Análisis de Variables Categóricas

4.1 Distribución por Género (Gráfico Circular)

Vamos a crear un gráfico circular para visualizar la distribución por género:

ggplot(datos, aes(x = "", fill = Gender)) +
  geom_bar(position = "fill") +
  coord_polar("y") +  # Esto convierte la barra en un gráfico de torta
  labs(title = "Distribución por género (porcentaje)")

Explicación del código:

  • ggplot(): Función principal de ggplot2 para iniciar un gráfico.
  • datos: El data frame que contiene los datos.
  • aes(): Define las “estéticas” del gráfico, es decir, cómo se mapean las variables a elementos visuales.
    • x = "": Coloca todos los datos en una sola categoría en el eje x.
    • fill = Gender: Usa la variable Gender para determinar el color de relleno.
  • geom_bar(): Añade barras al gráfico.
    • position = "fill": Normaliza las alturas para que sumen 1, mostrando proporciones.
  • coord_polar("y"): Transforma las coordenadas cartesianas en polares, convirtiendo el gráfico de barras en un gráfico circular.
  • labs(): Añade etiquetas al gráfico.

Personalización de colores

Para cambiar los colores del gráfico, puedes añadir la función scale_fill_manual():

ggplot(datos, aes(x = "", fill = Gender)) +
  geom_bar(position = "fill") +
  coord_polar("y") +
  labs(title = "Distribución por género (porcentaje)") +
  scale_fill_manual(values = c("M" = "blue", "F" = "pink"))

Opciones de colores:

  • Nombres de colores: “red”, “blue”, “green”, etc.
  • Códigos hexadecimales: “#FF0000” para rojo, “#0000FF” para azul, etc.
  • Funciones de color como rgb(), hsv(), etc.

4.2 Frecuencia por Género con Etiquetas (Gráfico de Barras)

Ahora, creemos un gráfico de barras que muestre la frecuencia por género con etiquetas numéricas:

ggplot(datos, aes(x = Gender, fill = Gender)) +
  geom_bar() +
  geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +
  labs(title = "Frecuencia por género", x = "Género", y = "Cantidad")

Explicación del código:

  • ggplot(datos, aes(x = Gender, fill = Gender)): Inicia el gráfico con Gender en el eje x y también como variable de relleno.
  • geom_bar(): Añade barras al gráfico, por defecto cuenta la frecuencia de cada categoría.
  • geom_text(): Añade texto al gráfico.
    • stat = "count": Calcula el conteo para cada categoría.
    • aes(label = ..count..): Usa el conteo calculado como etiqueta.
    • vjust = -0.5: Ajusta la posición vertical del texto, valores negativos lo mueven hacia arriba.
  • labs(): Añade etiquetas al gráfico.

Personalización avanzada

ggplot(datos, aes(x = Gender, fill = Gender)) +
  geom_bar() +
  geom_text(stat = "count", aes(label = ..count..), vjust = -0.5, size = 5, fontface = "bold") +
  labs(title = "Frecuencia por género", x = "Género", y = "Cantidad") +
  scale_fill_manual(values = c("M" = "skyblue", "F" = "lightpink")) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 16, face = "bold"),
    axis.title = element_text(size = 12),
    axis.text = element_text(size = 10)
  )

Parámetros adicionales:

  • size = 5: Aumenta el tamaño del texto de las etiquetas.
  • fontface = "bold": Hace que el texto de las etiquetas sea negrita.
  • scale_fill_manual(): Personaliza los colores de las barras.
  • theme_minimal(): Aplica un tema minimalista al gráfico.
  • theme(): Permite personalizar aspectos específicos del tema.

4.3 Frecuencia por Ocupación

Veamos la distribución de ocupaciones:

ggplot(datos, aes(x = Occupation, fill = Occupation)) +
  geom_bar() +
  geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +
  labs(title = "Frecuencia por ocupación", x = "Ocupación", y = "Cantidad") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Nota: Rotamos las etiquetas del eje x para mejorar la legibilidad cuando hay muchas categorías.

4.4 Frecuencia de Compradores de Bicicleta

Analicemos la distribución de compradores de bicicleta:

ggplot(datos, aes(x = factor(BikeBuyer))) +
  geom_bar(aes(fill = factor(BikeBuyer))) +
  geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +
  labs(title = "Frecuencia de compradores de bicicleta", 
       x = "Comprador (1 = Sí, 0 = No)", 
       y = "Cantidad") +
  scale_fill_manual(values = c("0" = "red", "1" = "green"),
                    name = "Comprador",
                    labels = c("No", "Sí")) +
  theme_minimal()

Explicación: - Convertimos BikeBuyer a factor para tratarlo como categórico, esto es super importante. - Usamos colores significativos: rojo para no compradores, verde para compradores - Personalizamos la leyenda para que sea más clara

5. Análisis de Correlación

5.1 Matriz de Correlación

Para analizar las relaciones entre variables numéricas, creamos una matriz de correlación:

library(dplyr)
library(corrplot)
# Seleccionar solo las columnas numéricas
datos_numericos <- datos %>% select_if(is.numeric) %>% select(-Codigo)

# Calcular la matriz de correlación
cor_matrix <- cor(datos_numericos, use = "complete.obs")

# Visualizar la matriz de correlación
corrplot(cor_matrix, method = "color", type = "upper", tl.col = "black")

Explicación del código: datos %>% select_if(is.numeric) %>% select(-Codigo): Selecciona solo las columnas numéricas y luego elimina la variable Codigo.

%>%: Es el operador pipe, que encadena operaciones.

select_if(is.numeric): Filtra solo las columnas que son numéricas.

select(-Codigo): Excluye explícitamente la columna Codigo, que aunque es numérica, no aporta a la interpretación analítica porque es un identificador único.

cor(datos_numericos, use = “complete.obs”): Calcula la matriz de correlación usando únicamente observaciones completas (sin valores faltantes).

corrplot(cor_matrix, method = “color”, type = “upper”, tl.col = “black”): Muestra visualmente la matriz de correlación.

method = “color”: Utiliza colores para representar los valores de correlación.

type = “upper”: Muestra solo el triángulo superior de la matriz, evitando duplicados.

tl.col = “black”: Establece el color negro para los nombres de las variables.

5.2 Matriz de Correlación con Valores

corrplot(cor_matrix,
         method = "color",       # Usa color para representar la fuerza
         type = "full",          # Muestra la matriz completa
         tl.col = "black",       # Color de los nombres de las variables
         addCoef.col = "black",  # Muestra los valores dentro de las celdas
         number.cex = 0.7)       # Tamaño del número

Explicación de los parámetros adicionales:

  • method = "color": Método de visualización. Alternativas: “circle”, “square”, “ellipse”, “number”, “shade”, “pie”.
  • type = "full": Tipo de visualización de la matriz. Opciones:
    • "full": Matriz completa
    • "upper": Solo la parte superior
    • "lower": Solo la parte inferior
  • addCoef.col = "black": Añade los coeficientes de correlación en el color especificado.
  • number.cex = 0.7: Tamaño de los números (coeficientes). Valores menores a 1 reducen el tamaño.

5.3 Matriz de Correlación con Círculos

corrplot(cor_matrix,
         method = "circle",      # Usa círculos en lugar de colores
         type = "lower",         # Muestra solo la parte inferior
         tl.col = "darkblue",    # Color azul oscuro para las etiquetas
         tl.srt = 45,            # Rota las etiquetas 45 grados
         col = colorRampPalette(c("red", "white", "blue"))(100), # Paleta personalizada
         addCoef.col = "black",  # Color de los coeficientes
         number.cex = 0.7,       # Tamaño de los números
         diag = FALSE)           # No muestra la diagonal

Explicación de los parámetros adicionales:

  • method = "circle": Usa círculos cuyo tamaño representa la magnitud de la correlación.
  • type = "lower": Muestra solo la parte inferior de la matriz.
  • tl.srt = 45: Rota las etiquetas de texto 45 grados.
  • col = colorRampPalette(c("red", "white", "blue"))(100): Crea una paleta de colores personalizada.
  • diag = FALSE: No muestra la diagonal de la matriz (correlaciones de variables consigo mismas).

6. Análisis de Variables Numéricas

6.1 Histograma de Gasto Mensual

datos$AvgMonthSpend <- as.numeric(as.character(datos$AvgMonthSpend))

ggplot(datos, aes(x = AvgMonthSpend)) +
  geom_histogram(binwidth = 10, fill = "skyblue", color = "black") +
  labs(title = "Distribución del gasto mensual", x = "Gasto mensual", y = "Frecuencia")

Explicación del código:

  • ggplot(datos, aes(x = AvgMonthSpend)): Inicia el gráfico con AvgMonthSpend en el eje x.
  • geom_histogram(): Añade un histograma al gráfico.
    • binwidth = 10: Establece el ancho de cada barra (bin) en 10 unidades.
    • fill = "skyblue": Color de relleno de las barras.
    • color = "black": Color del borde de las barras.
  • labs(): Añade etiquetas al gráfico.

Personalización del histograma

ggplot(datos, aes(x = AvgMonthSpend)) +
  geom_histogram(binwidth = 5, fill = "lightgreen", color = "darkgreen", alpha = 0.7) +
  geom_density(aes(y = 5 * ..count..), color = "red", size = 1) +  # Añade curva de densidad
  labs(title = "Distribución del gasto mensual", 
       subtitle = "Análisis de frecuencias con curva de densidad",
       x = "Gasto mensual ($)", 
       y = "Frecuencia",
       caption = "Fuente: Adventure Works") +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 16, face = "bold"),
    plot.subtitle = element_text(size = 12, color = "darkgrey"),
    axis.title = element_text(size = 12),
    plot.caption = element_text(size = 8, color = "grey50")
  )

Parámetros adicionales:

  • binwidth = 5: Reduce el ancho de las barras para mostrar más detalle.
  • fill = "lightgreen", color = "darkgreen": Cambia los colores.
  • alpha = 0.7: Añade transparencia (0 = transparente, 1 = opaco).
  • geom_density(): Añade una curva de densidad.
    • aes(y = 5 * ..count..): Escala la densidad para que coincida con el histograma.
    • color = "red", size = 1: Color y grosor de la línea.
  • subtitle = "...": Añade un subtítulo.
  • caption = "...": Añade una nota al pie del gráfico.
  • Personalización adicional del tema con theme().

6.2 Diagrama de Caja de Gasto Mensual

ggplot(datos, aes(y = AvgMonthSpend)) +
  geom_boxplot(fill = "lightgreen") +
  labs(title = "Distribución del gasto mensual", y = "Gasto mensual ($)")

Interpretación del diagrama de caja:

Un diagrama de caja muestra: - La mediana (línea central dentro de la caja) - El primer cuartil (Q1, borde inferior de la caja) - El tercer cuartil (Q3, borde superior de la caja) - El rango intercuartílico (IQR = Q3 - Q1, altura de la caja) - Los “bigotes” que se extienden hasta los valores mínimo y máximo dentro de 1.5*IQR - Los valores atípicos (puntos individuales más allá de los bigotes)

Personalización del diagrama de caja

ggplot(datos, aes(y = AvgMonthSpend)) +
  geom_boxplot(fill = "lightgreen", color = "darkgreen", outlier.color = "red", outlier.size = 3) +
  labs(title = "Distribución del gasto mensual", y = "Gasto mensual ($)") +
  theme_minimal()

Parámetros adicionales:

  • color = "darkgreen": Color del borde de la caja.
  • outlier.color = "red": Color de los valores atípicos.
  • outlier.size = 3: Tamaño de los puntos que representan valores atípicos.

6.3 Histograma de Ingreso Anual

ggplot(datos, aes(x = YearlyIncome)) +
  geom_histogram(binwidth = 5000, fill = "lightpink", color = "black") +
  labs(title = "Distribución del ingreso anual", x = "Ingreso anual ($)", y = "Frecuencia")

6.4 Diagrama de Caja de Ingreso Anual

ggplot(datos, aes(y = YearlyIncome)) +
  geom_boxplot(fill = "orange") +
  labs(title = "Distribución del ingreso anual", y = "Ingreso anual ($)")

6.5 Histograma de Edad

ggplot(datos, aes(x = Age)) +
  geom_histogram(binwidth = 2, fill = "lightyellow", color = "black") +
  labs(title = "Distribución de la edad", x = "Edad", y = "Frecuencia")

6.6 Diagrama de Caja de Edad

ggplot(datos, aes(y = Age)) +
  geom_boxplot(fill = "lightyellow", color = "orange") +
  labs(title = "Distribución de la edad", y = "Edad")

7. Análisis por Grupos

7.1 Gasto Mensual por Género

Para comparar el gasto mensual entre géneros:

ggplot(datos, aes(x = Gender, y = AvgMonthSpend, fill = Gender)) +
  geom_boxplot() +
  labs(title = "Gasto mensual por género", x = "Género", y = "Gasto mensual ($)")

Personalización avanzada

ggplot(datos, aes(x = Gender, y = AvgMonthSpend, fill = Gender)) +
  geom_boxplot(outlier.color = "red", outlier.shape = 8, outlier.size = 3) +
  stat_summary(fun = mean, geom = "point", shape = 23, size = 4, color = "black", fill = "white") +
  labs(title = "Comparación del gasto mensual por género", 
       subtitle = "Los diamantes blancos representan las medias",
       x = "Género", 
       y = "Gasto mensual ($)") +
  scale_fill_manual(values = c("M" = "skyblue", "F" = "lightpink")) +
  theme_minimal() +
  theme(legend.position = "none")

Parámetros adicionales:

  • outlier.shape = 8: Cambia la forma de los valores atípicos (8 = asterisco).
  • stat_summary(): Añade un resumen estadístico al gráfico.
    • fun = mean: Calcula la media.
    • geom = "point": Representa el resumen como puntos.
    • shape = 23: Forma de diamante.
    • size = 4: Tamaño del punto.
    • color = "black", fill = "white": Colores del borde y relleno.
  • theme(legend.position = "none"): Elimina la leyenda.

7.2 Gasto Mensual por Estado Civil

ggplot(datos, aes(x = MaritalStatus, y = AvgMonthSpend, fill = MaritalStatus)) +
  geom_boxplot() +
  labs(title = "Gasto mensual por estado civil", x = "Estado civil", y = "Gasto mensual ($)")

7.3 Ingreso Anual por Género

ggplot(datos, aes(x = Gender, y = YearlyIncome, fill = Gender)) +
  geom_boxplot() +
  labs(title = "Ingreso anual por género", x = "Género", y = "Ingreso anual ($)")

7.4 Ingreso Anual por Estado Civil

ggplot(datos, aes(x = MaritalStatus, y = YearlyIncome, fill = MaritalStatus)) +
  geom_boxplot() +
  labs(title = "Ingreso anual por estado civil", x = "Estado civil", y = "Ingreso anual ($)")

7.5 Relación entre Ingreso Anual y Gasto Mensual

library(ggplot2)
library(scales)

datos$AvgMonthSpend <- as.numeric(datos$AvgMonthSpend)

ggplot(datos, aes(x = YearlyIncome, y = AvgMonthSpend, color = factor(BikeBuyer))) +
  geom_point(alpha = 0.6) +
  labs(title = "Relación entre ingreso anual y gasto mensual por comprador",
       x = "Ingreso anual ($)",
       y = "Gasto mensual ($)",
       color = "Comprador") +
  scale_color_manual(values = c("0" = "red", "1" = "green"),
                     labels = c("No", "Sí")) +
  scale_x_continuous(labels = comma) +
  scale_y_continuous(labels = comma) +
  theme_minimal()

Ejercicio 2: Gráficos de barras personalizados

Objetivo: Crear gráficos de barras personalizados para variables categóricas.

  1. Crea un gráfico de barras para la variable “Occupation” (o cualquier otra variable categórica en tu conjunto de datos).
  2. Personaliza el gráfico con:
    • Un título descriptivo
    • Etiquetas de ejes apropiadas
    • Colores personalizados para las barras
    • Etiquetas con el conteo en cada barra
    • Rotación del texto en el eje x si hay muchas categorías
  3. ¿Qué conclusiones puedes extraer del gráfico?
# Tu código aquí
ggplot(datos, aes(x = Occupation, fill = Occupation)) +
  geom_bar() +
  geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +
  labs(title = "Distribución de ocupaciones",
       subtitle = "Análisis de frecuencias por ocupación",
       x = "Ocupación",
       y = "Cantidad de personas") +
  scale_fill_brewer(palette = "Set3") +  # Usa una paleta de colores predefinida
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        legend.position = "none")

Ejercicio 3: Matriz de correlación personalizada

Objetivo: Crear y personalizar una matriz de correlación.

  1. Selecciona solo las variables numéricas del conjunto de datos.
  2. Calcula la matriz de correlación.
  3. Visualiza la matriz con corrplot() usando:
    • Método “circle” en lugar de “color”
    • Solo la parte inferior de la matriz (type = "lower")
    • Valores numéricos dentro de la matriz
    • Una paleta de colores personalizada (por ejemplo, de rojo a azul)
  4. ¿Qué par de variables muestra la correlación más fuerte (positiva o negativa)?
# Tu código aquí
# Seleccionar variables numéricas
datos_num <- datos[, sapply(datos, is.numeric)]

# Calcular matriz de correlación
cor_mat <- cor(datos_num, use = "complete.obs")

# Visualizar con personalización
corrplot(cor_mat, 
         method = "circle",
         type = "lower",
         addCoef.col = "black",
         number.cex = 0.7,
         col = colorRampPalette(c("red", "white", "blue"))(100),
         diag = FALSE,
         tl.col = "black",
         tl.srt = 45)

Ejercicio 4: Análisis de variables numéricas

Objetivo: Analizar la distribución de variables numéricas con histogramas y diagramas de caja.

  1. Elige una variable numérica (por ejemplo, “YearlyIncome” o “Age”).
  2. Crea un histograma con:
    • Un ancho de barra (binwidth) apropiado
    • Colores personalizados
    • Una línea de densidad superpuesta
  3. Crea un diagrama de caja para la misma variable, destacando los valores atípicos.
  4. ¿La distribución parece normal? ¿Hay valores atípicos significativos?
# Tu código aquí
# Histograma con línea de densidad
ggplot(datos, aes(x = YearlyIncome)) +
  geom_histogram(aes(y = ..density..), binwidth = 5000, 
                 fill = "lightblue", color = "darkblue", alpha = 0.7) +
  geom_density(color = "red", size = 1) +
  labs(title = "Distribución del ingreso anual",
       subtitle = "Con curva de densidad",
       x = "Ingreso anual ($)",
       y = "Densidad") +
  theme_minimal()

# Diagrama de caja
ggplot(datos, aes(y = YearlyIncome)) +
  geom_boxplot(fill = "lightgreen", outlier.color = "red", outlier.size = 3) +
  labs(title = "Diagrama de caja del ingreso anual",
       y = "Ingreso anual ($)") +
  theme_minimal()

Ejercicio 5: Comparación entre grupos

Objetivo: Comparar una variable numérica entre diferentes grupos.

  1. Elige una variable numérica y una variable categórica (por ejemplo, “YearlyIncome” por “Gender” o “MaritalStatus”).
  2. Crea un diagrama de caja que compare la variable numérica entre los diferentes grupos.
  3. Añade puntos que representen las medias de cada grupo.
  4. Personaliza los colores y el tema del gráfico.
  5. ¿Hay diferencias notables entre los grupos? ¿Qué grupo tiene la media más alta?
# Tu código aquí
ggplot(datos, aes(x = MaritalStatus, y = YearlyIncome, fill = MaritalStatus)) +
  geom_boxplot(outlier.color = "red", outlier.shape = 8, outlier.size = 2) +
  stat_summary(fun = mean, geom = "point", shape = 23, 
               size = 4, color = "black", fill = "white") +
  labs(title = "Comparación del ingreso anual por estado civil",
       subtitle = "Los diamantes representan las medias",
       x = "Estado civil",
       y = "Ingreso anual ($)") +
  scale_fill_brewer(palette = "Pastel1") +
  theme_minimal() +
  theme(legend.position = "none")

9. Solución de Problemas Comunes

Error: objeto ‘ggplot’ no encontrado

Problema: Al intentar crear un gráfico con ggplot, aparece el error “objeto ‘ggplot’ no encontrado”.

Solución: Este error ocurre cuando no has cargado la librería ggplot2. Asegúrate de ejecutar library(ggplot2) antes de usar funciones de este paquete.

library(ggplot2)  # Ejecuta esto primero
ggplot(datos, aes(x = Gender)) + geom_bar()

Error: no se puede abrir el archivo

Problema: Al intentar cargar el archivo Excel, aparece un error indicando que no se puede abrir el archivo.

Solución: Verifica que la ruta al archivo sea correcta. R utiliza barras diagonales (/) en lugar de barras invertidas () para las rutas, incluso en Windows. También puedes usar la función file.choose() para seleccionar el archivo interactivamente.

# Opción 1: Especificar la ruta correcta
datos <- readxl::read_excel("C:/Users/nombre/Documents/datos_reg.xlsx")

# Opción 2: Seleccionar el archivo interactivamente
datos <- readxl::read_excel(file.choose())

Error: no se puede calcular la correlación con datos no numéricos

Problema: Al intentar calcular la matriz de correlación, aparece un error indicando que no se puede calcular con datos no numéricos.

Solución: La función cor() solo funciona con variables numéricas. Asegúrate de seleccionar solo las columnas numéricas del data frame.

# Seleccionar solo columnas numéricas
datos_numericos <- datos[sapply(datos, is.numeric)]
cor_matrix <- cor(datos_numericos, use = "complete.obs")

Error: valores faltantes (NA) en aes()

Problema: Al crear un gráfico, aparece un error sobre valores NA en aes().

Solución: Este error ocurre cuando hay valores NA en las variables que estás usando para el gráfico. Puedes eliminar las filas con NA o filtrarlas específicamente.

# Opción 1: Eliminar filas con NA en la variable específica
datos_filtrados <- datos[!is.na(datos$AvgMonthSpend), ]

# Opción 2: Usar na.rm = TRUE en funciones de resumen
ggplot(datos, aes(x = Gender, y = AvgMonthSpend)) +
  stat_summary(fun = mean, geom = "bar", na.rm = TRUE)

Error: no se puede convertir a numérico

Problema: Al intentar convertir una variable a numérica con as.numeric(), los valores se convierten incorrectamente o aparecen como NA.

Solución: Si la variable contiene caracteres no numéricos (como “$” o “,”), debes limpiarla primero con gsub().

# Eliminar caracteres no numéricos y convertir a número
datos$AvgMonthSpend <- as.numeric(gsub("[^0-9.]", "", datos$AvgMonthSpend))

10. Resumen de Personalización de Gráficos

10.1 Colores

Opciones de personalización de colores:

  • Cambiar colores de relleno: fill = "color" o scale_fill_manual(values = c("categoría1" = "color1", "categoría2" = "color2"))
  • Cambiar colores de líneas/bordes: color = "color"
  • Transparencia: alpha = valor (entre 0 y 1)
  • Paletas predefinidas: scale_fill_brewer(palette = "Set1") o scale_color_brewer(palette = "Set1")

10.2 Tamaños

Opciones de personalización de tamaños:

  • Tamaño de puntos: size = valor
  • Tamaño de texto: size = valor o theme(element = element_text(size = valor))
  • Ancho de barras en histogramas: binwidth = valor

10.3 Texto y Etiquetas

Opciones de personalización de texto:

  • Título: labs(title = "texto")
  • Subtítulo: labs(subtitle = "texto")
  • Etiquetas de ejes: labs(x = "texto", y = "texto")
  • Nota al pie: labs(caption = "texto")
  • Estilo de texto: theme(element = element_text(size = valor, face = "bold"/"italic", color = "color"))

10.4 Diagramas de Correlación

Opciones de personalización de matrices de correlación:

  • Mostrar parte superior: type = "upper"
  • Mostrar parte inferior: type = "lower"
  • Mostrar matriz completa: type = "full"
  • Mostrar valores dentro: addCoef.col = "color"
  • Tamaño de números: number.cex = valor
  • Cambiar método de visualización: method = "color"/"circle"/"square"/"ellipse"/"number"/"shade"/"pie"
  • Cambiar paleta de colores: col = colorRampPalette(c("color1", "color2", "color3"))(número_de_colores)

Conclusión

Este documento ha cubierto los aspectos fundamentales del análisis exploratorio de datos con R, enfocándose en:

  1. Preparación del entorno y carga de datos
  2. Exploración de la estructura de datos
  3. Análisis de variables categóricas con gráficos de barras y circulares
  4. Análisis de correlación entre variables numéricas
  5. Análisis de distribución de variables numéricas con histogramas y diagramas de caja
  6. Comparación de variables numéricas entre grupos

Para continuar profundizando en el análisis, se recomienda:

  • Explorar relaciones multivariadas
  • Realizar pruebas estadísticas para confirmar hipótesis
  • Crear modelos predictivos basados en los hallazgos del análisis exploratorio