# Cargar las librerías necesarias
library(readxl)
library(tidyverse)
library(janitor)
library(plotly)
# Cargar el archivo, limpiar nombres y convertir horas de sueño a números
datos_sueño <- read_excel("Sleep_health_and_lifestyle_dataset.xlsx") %>%
clean_names() %>%
mutate(sleep_duration = as.numeric(sleep_duration)) # Esta es la nueva línea de solución
# Mostrar las primeras 5 filas para verificar la carga
head(datos_sueño, 5)## Rows: 374
## Columns: 13
## $ person_id <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,…
## $ gender <chr> "Male", "Male", "Male", "Male", "Male", "Male"…
## $ age <dbl> 27, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29…
## $ occupation <chr> "Software Engineer", "Doctor", "Doctor", "Sale…
## $ sleep_duration <dbl> 6.1, 6.2, 6.2, 5.9, 5.9, 5.9, 6.3, 7.8, 7.8, 7…
## $ quality_of_sleep <dbl> 6, 6, 6, 4, 4, 4, 6, 7, 7, 7, 6, 7, 6, 6, 6, 6…
## $ physical_activity_level <dbl> 42, 60, 60, 30, 30, 30, 40, 75, 75, 75, 30, 75…
## $ stress_level <dbl> 6, 8, 8, 8, 8, 8, 7, 6, 6, 6, 8, 6, 8, 8, 8, 8…
## $ bmi_category <chr> "Overweight", "Normal", "Normal", "Obese", "Ob…
## $ blood_pressure <chr> "126/83", "125/80", "125/80", "140/90", "140/9…
## $ heart_rate <dbl> 77, 75, 75, 85, 85, 85, 82, 70, 70, 70, 70, 70…
## $ daily_steps <dbl> 4200, 10000, 10000, 3000, 3000, 3000, 3500, 80…
## $ sleep_disorder <dbl> 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0…
grafico_1 <- ggplot(datos_sueño, aes(x = reorder(occupation, sleep_duration), y = sleep_duration, fill = occupation)) +
geom_boxplot() +
coord_flip() +
theme_minimal() +
labs(title = "Distribución de la Duración del Sueño por Ocupación",
x = "Ocupación",
y = "Duración del Sueño (Horas)") +
theme(legend.position = "none")
# Convertir a gráfico interactivo
ggplotly(grafico_1)grafico_2 <- ggplot(datos_sueño, aes(x = as.factor(stress_level), y = quality_of_sleep, color = as.factor(stress_level))) +
geom_jitter(width = 0.2, alpha = 0.7, size = 2) +
theme_minimal() +
labs(title = "Impacto del Estrés en la Calidad del Sueño",
x = "Nivel de Estrés (Escala)",
y = "Calidad del Sueño",
color = "Nivel de Estrés")
ggplotly(grafico_2)# Pre-procesar los datos para contar los casos
conteo_trastornos <- datos_sueño %>%
mutate(sleep_disorder = ifelse(sleep_disorder == 1, "Con Trastorno", "Sin Trastorno")) %>%
count(bmi_category, sleep_disorder)
grafico_3 <- ggplot(conteo_trastornos, aes(x = bmi_category, y = n, fill = sleep_disorder)) +
geom_bar(stat = "identity", position = "dodge") +
theme_minimal() +
labs(title = "Trastornos del Sueño según Categoría de IMC",
x = "Categoría de IMC",
y = "Número de Personas",
fill = "Estado Clínico") +
scale_fill_manual(values = c("Con Trastorno" = "#E07A5F", "Sin Trastorno" = "#81B29A"))
ggplotly(grafico_3)