library(readxl)
gym_members_exercise <- read_excel("/Users/leonoracegarra/Desktop/gym_members_exercise.xlsx")
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.5
## ✔ ggplot2 3.5.1 ✔ stringr 1.5.1
## ✔ purrr 1.0.2 ✔ tibble 3.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(kableExtra)
##
## Attaching package: 'kableExtra'
##
## The following object is masked from 'package:dplyr':
##
## group_rows
library(scales)
##
## Attaching package: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
sapply(gym_members_exercise, function(x) sum(is.na(x)))
## Age Gender
## 0 0
## Weight (kg) Height (m)
## 0 0
## Max_BPM Avg_BPM
## 0 0
## Resting_BPM Session_Duration (hours)
## 0 0
## Calories_Burned Workout_Type
## 0 0
## Fat_Percentage Water_Intake (liters)
## 0 0
## Workout_Frequency (days/week) Experience_Level
## 0 0
## BMI
## 0
gym_members_exercise <- gym_members_exercise %>%
distinct()
gym_members_exercise <- gym_members_exercise %>%
rename(
edad = Age,
genero = Gender,
peso = `Weight (kg)`,
altura = `Height (m)`,
max_BPM = Max_BPM,
prom_BPM = Avg_BPM,
reposo_BPM = Resting_BPM,
duracion_sesion = `Session_Duration (hours)`,
calorias_quemadas = Calories_Burned,
tipo_ejercicio = Workout_Type,
porcentaje_grasa = Fat_Percentage,
ingesta_agua = `Water_Intake (liters)`,
frecuencia_entrenamiento = `Workout_Frequency (days/week)`,
nivel_experiencia = Experience_Level,
IMC = BMI,
)
pregunta1 <- gym_members_exercise %>%
group_by(genero) %>%
summarise(
media_max_BPM = mean(max_BPM, na.rm = TRUE),
DesviacionEstandar_max_BPM = sd(max_BPM, na.rm = TRUE)
)
print(pregunta1)
## # A tibble: 2 × 3
## genero media_max_BPM DesviacionEstandar_max_BPM
## <chr> <dbl> <dbl>
## 1 Female 180. 11.4
## 2 Male 180. 11.7
pregunta2 <- gym_members_exercise %>%
group_by(nivel_experiencia) %>%
summarise(
promedio_grasa = mean(porcentaje_grasa, na.rm = TRUE)
)
print(pregunta2)
## # A tibble: 3 × 2
## nivel_experiencia promedio_grasa
## <dbl> <dbl>
## 1 1 27.6
## 2 2 27.3
## 3 3 14.8
library(ggplot2)
grafico2 <- ggplot(pregunta2, aes(x = as.factor(nivel_experiencia), y = promedio_grasa)) +
geom_bar(stat = "identity", fill = "skyblue", color = "navyblue")
labs(title = "Promedio de Porcentaje de Grasa Corporal por Nivel de Experiencia",
x = "Nivel de Experiencia", y = "Promedio de Porcentaje de Grasa Corporal") + theme_minimal()
## NULL
print(grafico2)
pregunta3.1 <- gym_members_exercise %>%
filter(IMC > 25) %>%
summarise(num_participantes = n())
print(pregunta3.1)
## # A tibble: 1 × 1
## num_participantes
## <int>
## 1 435
pregunta3.2 <- gym_members_exercise %>%
group_by(tipo_ejercicio) %>%
summarise(
promedio_calorias_quemadas = mean(calorias_quemadas, na.rm = TRUE)
)
print(pregunta3.2)
## # A tibble: 4 × 2
## tipo_ejercicio promedio_calorias_quemadas
## <chr> <dbl>
## 1 Cardio 885.
## 2 HIIT 926.
## 3 Strength 911.
## 4 Yoga 903.
grafico3 <- ggplot(pregunta3.2, aes(x = tipo_ejercicio, y = promedio_calorias_quemadas)) +
geom_bar(stat = "identity", fill = "pink", color = "red") +
labs(title = "Promedio de Calorías Quemadas por Tipo de Entrenamiento",
x = "Tipo de Entrenamiento",
y = "Promedio de Calorías Quemadas") +
theme_minimal()
print(grafico3)
gym_members_exercise <- gym_members_exercise %>%
mutate(categoria_edad = cut(edad, breaks = seq(0, 100, by = 10), right = FALSE))
pregunta4 <- gym_members_exercise %>%
group_by(categoria_edad, genero) %>%
summarise(num_participantes = n())
## `summarise()` has grouped output by 'categoria_edad'. You can override using
## the `.groups` argument.
print(pregunta4)
## # A tibble: 10 × 3
## # Groups: categoria_edad [5]
## categoria_edad genero num_participantes
## <fct> <chr> <int>
## 1 [10,20) Female 31
## 2 [10,20) Male 22
## 3 [20,30) Female 102
## 4 [20,30) Male 121
## 5 [30,40) Female 102
## 6 [30,40) Male 107
## 7 [40,50) Female 111
## 8 [40,50) Male 134
## 9 [50,60) Female 116
## 10 [50,60) Male 127
grafico4 <- ggplot(pregunta4, aes(x = categoria_edad, y = num_participantes, color = genero)) +
geom_point(size = 4) +
labs(title = "Número Total de Participantes por Grupo de Edad y Género",
x = "Grupo de Edad",
y = "Número de Participantes") +
theme_minimal()
print(grafico4)
La mayoría de las personas comienzan a ir al gimnasio después de los 20 años.
El rango de edad donde hay más hombres es entre los 40 y los 50, mientras que el de mujeres es entre 50 y 60.
Hay más hombres que mujeres en el gimnasio: 511 hombres y 462 mujeres.
frecuencia_tipo <- gym_members_exercise %>%
group_by(tipo_ejercicio) %>%
summarise(Frecuencia = sum(frecuencia_entrenamiento, na.rm = TRUE)) %>%
arrange(desc(Frecuencia))
pregunta5 <- head(frecuencia_tipo, 3)
print(pregunta5)
## # A tibble: 3 × 2
## tipo_ejercicio Frecuencia
## <chr> <dbl>
## 1 Strength 866
## 2 Cardio 825
## 3 Yoga 801
grafico5 <- ggplot(gym_members_exercise, aes(x = tipo_ejercicio, y = duracion_sesion, fill = tipo_ejercicio)) +
geom_boxplot() +
labs(title = "Distribución de la Duración de la Sesión para los Tres Tipos de Entrenamiento Más Populares",
x = "Tipo de Entrenamiento",
y = "Duración de la Sesión (horas)") +
theme_minimal() +
theme(legend.position = "none")
print(grafico5)
pregunta6 <- gym_members_exercise %>%
group_by(nivel_experiencia) %>%
summarise(
media_reposo_BPM = mean(reposo_BPM, na.rm = TRUE),
mediana_reposo_BPM = median(reposo_BPM, na.rm = TRUE)
)
print(pregunta6)
## # A tibble: 3 × 3
## nivel_experiencia media_reposo_BPM mediana_reposo_BPM
## <dbl> <dbl> <dbl>
## 1 1 62.3 63
## 2 2 62.1 62
## 3 3 62.4 62
pregunta7 <- gym_members_exercise %>%
group_by(tipo_ejercicio) %>%
summarise(
media_edad = mean(edad, na.rm = TRUE),
proporcion_hombres = sum(genero == "Male", na.rm = TRUE) / n(),
proporcion_mujeres = sum(genero == "Female", na.rm = TRUE) / n(),
media_duracion_sesion = mean(duracion_sesion, na.rm = TRUE),
media_IMC = mean(IMC, na.rm = TRUE),
media_reposo_BPM = mean(reposo_BPM, na.rm = TRUE),
media_calorías_quemadas = mean(calorias_quemadas, na.rm = TRUE)
)
print(pregunta7)
## # A tibble: 4 × 8
## tipo_ejercicio media_edad proporcion_hombres proporcion_mujeres
## <chr> <dbl> <dbl> <dbl>
## 1 Cardio 37.7 0.506 0.494
## 2 HIIT 38.9 0.516 0.484
## 3 Strength 38.9 0.523 0.477
## 4 Yoga 39.2 0.556 0.444
## # ℹ 4 more variables: media_duracion_sesion <dbl>, media_IMC <dbl>,
## # media_reposo_BPM <dbl>, media_calorías_quemadas <dbl>
La edad media por entrenamiento mas joven es el cardio, con un promedio de 37.67 años, y el entrenamiento realizado por personas de mayor edad es el yoga con 39.23 de promedio de edad.
Los hombres tienen más participación en los 4 tipos de entrenamiento.
El entrenamiento más duradero es el HIT, mientras que el más corto es el cardio.
El IMC más alto se ve en el cardio, seguido del HIIT, y posteriormente el yoga y el entrenamiento de fuerza.
El entrenamiento que más calorías quema es el HIIT.
datos_filtrados <- gym_members_exercise %>%
filter(duracion_sesion > 1.5, prom_BPM > 130)
print(datos_filtrados)
## # A tibble: 148 × 16
## edad genero peso altura max_BPM prom_BPM reposo_BPM duracion_sesion
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 56 Male 88.3 1.71 180 157 60 1.69
## 2 56 Female 58 1.68 168 156 74 1.59
## 3 45 Male 84.9 1.86 186 136 66 1.64
## 4 38 Male 81.4 1.71 187 148 58 1.52
## 5 53 Male 84.2 1.76 165 137 69 1.67
## 6 46 Female 61 1.71 181 153 61 1.67
## 7 27 Male 87.5 1.63 183 135 74 1.75
## 8 31 Female 64.4 1.7 160 144 70 1.97
## 9 32 Male 85.9 1.6 176 145 60 1.99
## 10 31 Female 61.1 1.76 189 150 67 1.81
## # ℹ 138 more rows
## # ℹ 8 more variables: calorias_quemadas <dbl>, tipo_ejercicio <chr>,
## # porcentaje_grasa <dbl>, ingesta_agua <dbl>, frecuencia_entrenamiento <dbl>,
## # nivel_experiencia <dbl>, IMC <dbl>, categoria_edad <fct>
promedio_imc <- datos_filtrados %>%
summarise(promedio_IMC = mean(IMC, na.rm = TRUE))
print(promedio_imc)
## # A tibble: 1 × 1
## promedio_IMC
## <dbl>
## 1 24.6
correlacion <- cor(gym_members_exercise$frecuencia_entrenamiento, gym_members_exercise$ingesta_agua, use = "complete.obs")
print(correlacion)
## [1] 0.2385626
grafico9 <- ggplot(gym_members_exercise, aes(x = frecuencia_entrenamiento, y = ingesta_agua)) +
geom_smooth(method = "lm", color = "salmon", se = FALSE) +
labs(title = "Relación entre la Frecuencia de Entrenamiento y la Ingesta Diaria de Agua",
x = "Frecuencia de Entrenamiento (días/semana)",
y = "Ingesta Diaria de Agua (litros)") +
theme_minimal()
print(grafico9)
## `geom_smooth()` using formula = 'y ~ x'
gym_members_exercise <- gym_members_exercise %>%
mutate(categoria_edad = cut(edad, breaks = seq(0, 100, by = 10), right = FALSE))
pregunta10 <- gym_members_exercise %>%
group_by(categoria_edad, genero) %>%
summarise(
media_IMC = mean(IMC, na.rm = TRUE),
media_calorias_quemadas = mean(calorias_quemadas, na.rm = TRUE)
)
## `summarise()` has grouped output by 'categoria_edad'. You can override using
## the `.groups` argument.
print(pregunta10)
## # A tibble: 10 × 4
## # Groups: categoria_edad [5]
## categoria_edad genero media_IMC media_calorias_quemadas
## <fct> <chr> <dbl> <dbl>
## 1 [10,20) Female 23.2 909.
## 2 [10,20) Male 26.9 1047.
## 3 [20,30) Female 22.7 891.
## 4 [20,30) Male 27.8 994.
## 5 [30,40) Female 22.7 880.
## 6 [30,40) Male 27.5 986.
## 7 [40,50) Female 21.9 856.
## 8 [40,50) Male 25.0 942.
## 9 [50,60) Female 23.3 815.
## 10 [50,60) Male 27.4 847.
grafico_imc <- ggplot(pregunta10, aes(x = categoria_edad, y = media_IMC, fill = genero)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Media del IMC por Grupo de Edad y Género",
x = "Grupo de Edad",
y = "IMC") +
theme_minimal()
print(grafico_imc)
grafico_calorias <- ggplot(pregunta10, aes(x = categoria_edad, y = media_calorias_quemadas, fill = genero)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Media de Calorías Quemadas por Grupo de Edad y Género",
x = "Grupo de Edad",
y = "Calorías Quemadas") +
theme_minimal()
print(grafico_calorias)