Bellabeat es una aplicación que ayuda a mujeres a gestionar su salud y bienestar, se realizo un estudio donde a partir de datos recolectados se podía obtener información de la utilización diaria de la app por parte de los usuarios, analizando datos de actividad física mensual, comportamiento del sueño y frecuencia cardiaca.
Con el objetivo de conocer mejor a los usuarios y sus comportamiento nos planteamos las siguientes preguntas:
Análisis de Uso y Compromiso de la Aplicación ¿Cuáles son las tendencias de uso de las funciones de la aplicación de Bellabeat, específicamente en las categorías de actividad diaria, monitoreo del sueño y medición de frecuencia cardíaca? ¿Cuántas personas se encuentran utilizando las diferentes funciones de Bellabeat?
Análisis de la Actividad Física y Pasos ¿Cuál es el rango promedio de tiempo que los usuarios dedican a sus entrenamientos? ¿Cuál es el promedio de actividad diaria de la muestra estudiada a lo largo del mes? ¿Cuáles son los valores máximos y mínimos de la actividad mensual? ¿Cuál es el promedio de pasos diarios de la muestra? ¿Cuáles son los valores máximos y mínimos de pasos registrados a lo largo del mes de estudio? A nivel individual, ¿cuáles son los registros máximos y mínimos de pasos por usuario? ¿Se puede identificar algún patrón de comportamiento semanal en las actividades físicas de los usuarios?
Análisis del Sueño y la Frecuencia Cardíaca ¿Cuáles son los valores máximos, mínimos y promedio de la actividad del sueño para el grupo en general? ¿Cuáles son los valores máximos y mínimos de la frecuencia cardíaca de los usuarios?
Análisis de Correlación y Comportamiento ¿Existe una correlación entre la actividad física y la calidad o duración del sueño? (Esto podría revelar si un mayor nivel de actividad física contribuye a un mejor descanso). ¿Cómo varían los niveles de actividad física y las horas de sueño a lo largo de la semana, comparando los días laborables con los fines de semana? ¿Se observa una relación entre la frecuencia cardíaca promedio y los niveles de actividad diaria de los usuarios? ¿Cómo es el comportamiento de la frecuencia cardíaca promedio en un día de mucha actividad física y un día de baja actividad física?
Estrategias y Recomendaciones A partir del análisis de la actividad física, el sueño y la frecuencia cardíaca, ¿cómo se pueden aplicar los hallazgos para mejorar las funciones de la aplicación y crear estrategias dirigidas a los clientes de Bellabeat?
Recomendaciones para el Producto ¿Qué tipo de recomendaciones o notificaciones personalizadas podría ofrecer Bellabeat a los usuarios basándose en sus datos de sueño, pasos y actividad cardíaca para fomentar un estilo de vida más saludable? (Por ejemplo, sugerir una hora de ir a dormir si la calidad del sueño es baja, o animar a un paseo si la actividad diaria es baja).
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── 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(readr)
library(ggpmisc)
## Cargando paquete requerido: ggpp
## Registered S3 methods overwritten by 'ggpp':
## method from
## heightDetails.titleGrob ggplot2
## widthDetails.titleGrob ggplot2
##
## Adjuntando el paquete: 'ggpp'
##
## The following object is masked from 'package:ggplot2':
##
## annotate
library(calendR)
## ~~ Package calendR
## Visit https://r-coder.com/ for R tutorials ~~
library(lubridate)
library(ggplot2)
ruta_csv_fitbase<- "C:\\Users\\chech\\OneDrive\\Documentos\\Data Analytics Google\\Proyecto final Google Data A\\mturkfitbit_export_4.12.16-5.12.16\\Fitabase Data 4.12.16-5.12.16\\Archivos a utilizar\\dailyActivity_merged.csv"
df_actividad_diaria <- read.csv(ruta_csv_fitbase)
str(df_actividad_diaria)
## 'data.frame': 940 obs. of 15 variables:
## $ Id : num 1.5e+09 1.5e+09 1.5e+09 1.5e+09 1.5e+09 ...
## $ ActivityDate : chr "4/12/2016" "4/13/2016" "4/14/2016" "4/15/2016" ...
## $ TotalSteps : int 13162 10735 10460 9762 12669 9705 13019 15506 10544 9819 ...
## $ TotalDistance : num 8.5 6.97 6.74 6.28 8.16 ...
## $ TrackerDistance : num 8.5 6.97 6.74 6.28 8.16 ...
## $ LoggedActivitiesDistance: num 0 0 0 0 0 0 0 0 0 0 ...
## $ VeryActiveDistance : num 1.88 1.57 2.44 2.14 2.71 ...
## $ ModeratelyActiveDistance: num 0.55 0.69 0.4 1.26 0.41 ...
## $ LightActiveDistance : num 6.06 4.71 3.91 2.83 5.04 ...
## $ SedentaryActiveDistance : num 0 0 0 0 0 0 0 0 0 0 ...
## $ VeryActiveMinutes : int 25 21 30 29 36 38 42 50 28 19 ...
## $ FairlyActiveMinutes : int 13 19 11 34 10 20 16 31 12 8 ...
## $ LightlyActiveMinutes : int 328 217 181 209 221 164 233 264 205 211 ...
## $ SedentaryMinutes : int 728 776 1218 726 773 539 1149 775 818 838 ...
## $ Calories : int 1985 1797 1776 1745 1863 1728 1921 2035 1786 1775 ...
ruta_csv_dormir<-"C:\\Users\\chech\\OneDrive\\Documentos\\Data Analytics Google\\Proyecto final Google Data A\\mturkfitbit_export_4.12.16-5.12.16\\Fitabase Data 4.12.16-5.12.16\\Archivos a utilizar\\sleepDay_merged.csv"
df_dormir <- read.csv(ruta_csv_dormir)
str(df_dormir)
## 'data.frame': 413 obs. of 5 variables:
## $ Id : num 1.5e+09 1.5e+09 1.5e+09 1.5e+09 1.5e+09 ...
## $ SleepDay : chr "4/12/2016 12:00:00 AM" "4/13/2016 12:00:00 AM" "4/15/2016 12:00:00 AM" "4/16/2016 12:00:00 AM" ...
## $ TotalSleepRecords : int 1 2 1 2 1 1 1 1 1 1 ...
## $ TotalMinutesAsleep: int 327 384 412 340 700 304 360 325 361 430 ...
## $ TotalTimeInBed : int 346 407 442 367 712 320 377 364 384 449 ...
ruta_csv_cardiaca<-"C:\\Users\\chech\\OneDrive\\Documentos\\Data Analytics Google\\Proyecto final Google Data A\\mturkfitbit_export_4.12.16-5.12.16\\Fitabase Data 4.12.16-5.12.16\\Archivos a utilizar\\heartrate_seconds_merged.csv"
df_cardiaca<-read.csv(ruta_csv_cardiaca)
str(df_cardiaca)
## 'data.frame': 2483658 obs. of 3 variables:
## $ Id : num 2.02e+09 2.02e+09 2.02e+09 2.02e+09 2.02e+09 ...
## $ Time : chr "4/12/2016 7:21:00 AM" "4/12/2016 7:21:05 AM" "4/12/2016 7:21:10 AM" "4/12/2016 7:21:20 AM" ...
## $ Value: int 97 102 105 103 101 95 91 93 94 93 ...
copy_dailyActivity_merged <- df_actividad_diaria
copy_dailyActivity_merged$Id <- as.character(copy_dailyActivity_merged$Id)
str(copy_dailyActivity_merged)
## 'data.frame': 940 obs. of 15 variables:
## $ Id : chr "1503960366" "1503960366" "1503960366" "1503960366" ...
## $ ActivityDate : chr "4/12/2016" "4/13/2016" "4/14/2016" "4/15/2016" ...
## $ TotalSteps : int 13162 10735 10460 9762 12669 9705 13019 15506 10544 9819 ...
## $ TotalDistance : num 8.5 6.97 6.74 6.28 8.16 ...
## $ TrackerDistance : num 8.5 6.97 6.74 6.28 8.16 ...
## $ LoggedActivitiesDistance: num 0 0 0 0 0 0 0 0 0 0 ...
## $ VeryActiveDistance : num 1.88 1.57 2.44 2.14 2.71 ...
## $ ModeratelyActiveDistance: num 0.55 0.69 0.4 1.26 0.41 ...
## $ LightActiveDistance : num 6.06 4.71 3.91 2.83 5.04 ...
## $ SedentaryActiveDistance : num 0 0 0 0 0 0 0 0 0 0 ...
## $ VeryActiveMinutes : int 25 21 30 29 36 38 42 50 28 19 ...
## $ FairlyActiveMinutes : int 13 19 11 34 10 20 16 31 12 8 ...
## $ LightlyActiveMinutes : int 328 217 181 209 221 164 233 264 205 211 ...
## $ SedentaryMinutes : int 728 776 1218 726 773 539 1149 775 818 838 ...
## $ Calories : int 1985 1797 1776 1745 1863 1728 1921 2035 1786 1775 ...
copy_dailyActivity_merged <- copy_dailyActivity_merged %>%
transform(ActivityDate = mdy(ActivityDate))
str(copy_dailyActivity_merged)
## 'data.frame': 940 obs. of 15 variables:
## $ Id : chr "1503960366" "1503960366" "1503960366" "1503960366" ...
## $ ActivityDate : Date, format: "2016-04-12" "2016-04-13" ...
## $ TotalSteps : int 13162 10735 10460 9762 12669 9705 13019 15506 10544 9819 ...
## $ TotalDistance : num 8.5 6.97 6.74 6.28 8.16 ...
## $ TrackerDistance : num 8.5 6.97 6.74 6.28 8.16 ...
## $ LoggedActivitiesDistance: num 0 0 0 0 0 0 0 0 0 0 ...
## $ VeryActiveDistance : num 1.88 1.57 2.44 2.14 2.71 ...
## $ ModeratelyActiveDistance: num 0.55 0.69 0.4 1.26 0.41 ...
## $ LightActiveDistance : num 6.06 4.71 3.91 2.83 5.04 ...
## $ SedentaryActiveDistance : num 0 0 0 0 0 0 0 0 0 0 ...
## $ VeryActiveMinutes : int 25 21 30 29 36 38 42 50 28 19 ...
## $ FairlyActiveMinutes : int 13 19 11 34 10 20 16 31 12 8 ...
## $ LightlyActiveMinutes : int 328 217 181 209 221 164 233 264 205 211 ...
## $ SedentaryMinutes : int 728 776 1218 726 773 539 1149 775 818 838 ...
## $ Calories : int 1985 1797 1776 1745 1863 1728 1921 2035 1786 1775 ...
titulos <-colnames(copy_dailyActivity_merged)
titulos_minuscula <-tolower(titulos)
copy_dailyActivity_merged <- copy_dailyActivity_merged %>%
rename(
id=Id,
activity_date=ActivityDate,
total_steps=TotalSteps,
total_distance=TotalDistance,
tracker_distance=TrackerDistance,
logged_activities_distance= LoggedActivitiesDistance,
very_active_distance=VeryActiveDistance,
moderately_active_distance=ModeratelyActiveDistance,
light_active_distance=LightActiveDistance,
sedentary_active_distance=SedentaryActiveDistance,
very_active_minutes=VeryActiveMinutes,
fairly_active_minutes=FairlyActiveMinutes,
lightly_active_minutes=LightlyActiveMinutes,
sedentary_minutes=SedentaryMinutes,
calories=Calories)
colnames(copy_dailyActivity_merged)
## [1] "id" "activity_date"
## [3] "total_steps" "total_distance"
## [5] "tracker_distance" "logged_activities_distance"
## [7] "very_active_distance" "moderately_active_distance"
## [9] "light_active_distance" "sedentary_active_distance"
## [11] "very_active_minutes" "fairly_active_minutes"
## [13] "lightly_active_minutes" "sedentary_minutes"
## [15] "calories"
df_day_of_week_name <- copy_dailyActivity_merged %>%
mutate(day_of_week = wday(copy_dailyActivity_merged$activity_date, label = TRUE, abbr = FALSE))
str(df_day_of_week_name)
## 'data.frame': 940 obs. of 16 variables:
## $ id : chr "1503960366" "1503960366" "1503960366" "1503960366" ...
## $ activity_date : Date, format: "2016-04-12" "2016-04-13" ...
## $ total_steps : int 13162 10735 10460 9762 12669 9705 13019 15506 10544 9819 ...
## $ total_distance : num 8.5 6.97 6.74 6.28 8.16 ...
## $ tracker_distance : num 8.5 6.97 6.74 6.28 8.16 ...
## $ logged_activities_distance: num 0 0 0 0 0 0 0 0 0 0 ...
## $ very_active_distance : num 1.88 1.57 2.44 2.14 2.71 ...
## $ moderately_active_distance: num 0.55 0.69 0.4 1.26 0.41 ...
## $ light_active_distance : num 6.06 4.71 3.91 2.83 5.04 ...
## $ sedentary_active_distance : num 0 0 0 0 0 0 0 0 0 0 ...
## $ very_active_minutes : int 25 21 30 29 36 38 42 50 28 19 ...
## $ fairly_active_minutes : int 13 19 11 34 10 20 16 31 12 8 ...
## $ lightly_active_minutes : int 328 217 181 209 221 164 233 264 205 211 ...
## $ sedentary_minutes : int 728 776 1218 726 773 539 1149 775 818 838 ...
## $ calories : int 1985 1797 1776 1745 1863 1728 1921 2035 1786 1775 ...
## $ day_of_week : Ord.factor w/ 7 levels "domingo"<"lunes"<..: 3 4 5 6 7 1 2 3 4 5 ...
sum(is.na(df_day_of_week_name))
## [1] 0
duplicados <- duplicated(df_day_of_week_name) | duplicated(df_day_of_week_name, fromLast = TRUE)
sub_df <- df_day_of_week_name %>%
select(
-tracker_distance,
-logged_activities_distance,
-very_active_distance,
-moderately_active_distance,
-light_active_distance,
-sedentary_active_distance)
colnames(sub_df)
## [1] "id" "activity_date" "total_steps"
## [4] "total_distance" "very_active_minutes" "fairly_active_minutes"
## [7] "lightly_active_minutes" "sedentary_minutes" "calories"
## [10] "day_of_week"
df_filtrado_ceros <- subset(sub_df, total_steps != 0)
str(df_filtrado_ceros)
## 'data.frame': 863 obs. of 10 variables:
## $ id : chr "1503960366" "1503960366" "1503960366" "1503960366" ...
## $ activity_date : Date, format: "2016-04-12" "2016-04-13" ...
## $ total_steps : int 13162 10735 10460 9762 12669 9705 13019 15506 10544 9819 ...
## $ total_distance : num 8.5 6.97 6.74 6.28 8.16 ...
## $ very_active_minutes : int 25 21 30 29 36 38 42 50 28 19 ...
## $ fairly_active_minutes : int 13 19 11 34 10 20 16 31 12 8 ...
## $ lightly_active_minutes: int 328 217 181 209 221 164 233 264 205 211 ...
## $ sedentary_minutes : int 728 776 1218 726 773 539 1149 775 818 838 ...
## $ calories : int 1985 1797 1776 1745 1863 1728 1921 2035 1786 1775 ...
## $ day_of_week : Ord.factor w/ 7 levels "domingo"<"lunes"<..: 3 4 5 6 7 1 2 3 4 5 ...
df_sum_min <- df_filtrado_ceros %>%
mutate(total_min_activiy = df_filtrado_ceros$very_active_minutes+df_filtrado_ceros$fairly_active_minutes+df_filtrado_ceros$lightly_active_minutes)
str(df_sum_min)
## 'data.frame': 863 obs. of 11 variables:
## $ id : chr "1503960366" "1503960366" "1503960366" "1503960366" ...
## $ activity_date : Date, format: "2016-04-12" "2016-04-13" ...
## $ total_steps : int 13162 10735 10460 9762 12669 9705 13019 15506 10544 9819 ...
## $ total_distance : num 8.5 6.97 6.74 6.28 8.16 ...
## $ very_active_minutes : int 25 21 30 29 36 38 42 50 28 19 ...
## $ fairly_active_minutes : int 13 19 11 34 10 20 16 31 12 8 ...
## $ lightly_active_minutes: int 328 217 181 209 221 164 233 264 205 211 ...
## $ sedentary_minutes : int 728 776 1218 726 773 539 1149 775 818 838 ...
## $ calories : int 1985 1797 1776 1745 1863 1728 1921 2035 1786 1775 ...
## $ day_of_week : Ord.factor w/ 7 levels "domingo"<"lunes"<..: 3 4 5 6 7 1 2 3 4 5 ...
## $ total_min_activiy : int 366 257 222 272 267 222 291 345 245 238 ...
df_dormir_copy <- df_dormir
str(df_dormir_copy)
## 'data.frame': 413 obs. of 5 variables:
## $ Id : num 1.5e+09 1.5e+09 1.5e+09 1.5e+09 1.5e+09 ...
## $ SleepDay : chr "4/12/2016 12:00:00 AM" "4/13/2016 12:00:00 AM" "4/15/2016 12:00:00 AM" "4/16/2016 12:00:00 AM" ...
## $ TotalSleepRecords : int 1 2 1 2 1 1 1 1 1 1 ...
## $ TotalMinutesAsleep: int 327 384 412 340 700 304 360 325 361 430 ...
## $ TotalTimeInBed : int 346 407 442 367 712 320 377 364 384 449 ...
df_dormir_copy$Id <- as.character(df_dormir_copy$Id)
str(df_dormir_copy)
## 'data.frame': 413 obs. of 5 variables:
## $ Id : chr "1503960366" "1503960366" "1503960366" "1503960366" ...
## $ SleepDay : chr "4/12/2016 12:00:00 AM" "4/13/2016 12:00:00 AM" "4/15/2016 12:00:00 AM" "4/16/2016 12:00:00 AM" ...
## $ TotalSleepRecords : int 1 2 1 2 1 1 1 1 1 1 ...
## $ TotalMinutesAsleep: int 327 384 412 340 700 304 360 325 361 430 ...
## $ TotalTimeInBed : int 346 407 442 367 712 320 377 364 384 449 ...
df_dormir_copy <- df_dormir_copy %>%
transform(SleepDay =mdy_hms(SleepDay))
str(df_dormir_copy)
## 'data.frame': 413 obs. of 5 variables:
## $ Id : chr "1503960366" "1503960366" "1503960366" "1503960366" ...
## $ SleepDay : POSIXct, format: "2016-04-12" "2016-04-13" ...
## $ TotalSleepRecords : int 1 2 1 2 1 1 1 1 1 1 ...
## $ TotalMinutesAsleep: int 327 384 412 340 700 304 360 325 361 430 ...
## $ TotalTimeInBed : int 346 407 442 367 712 320 377 364 384 449 ...
titulos_dormir <- colnames(df_dormir_copy)
titulos_min_dormir <- tolower(titulos_dormir)
df_dormir_copy <- df_dormir_copy %>%
rename(id=Id,
sleep_day=SleepDay,
total_sleep_records=TotalSleepRecords,
total_minutes_asleep=TotalMinutesAsleep,
total_time_in_bed=TotalTimeInBed )
colnames(df_dormir_copy)
## [1] "id" "sleep_day" "total_sleep_records"
## [4] "total_minutes_asleep" "total_time_in_bed"
sum(is.na(df_dormir_copy))
## [1] 0
duplicados_dormir <- duplicated(df_dormir_copy) | duplicated(df_dormir_copy, fromLast = TRUE)
print(duplicados_dormir)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [157] FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [217] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE
## [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [301] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [313] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [325] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [337] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [349] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [361] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [373] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
## [385] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [397] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [409] FALSE FALSE FALSE FALSE FALSE
Encontramos duplicados en las filas 161 y 163, 223 y 224, 380 y 381.
df_dormir_unique <- df_dormir_copy[!duplicated(df_dormir_copy),]
str(df_dormir_unique)
## 'data.frame': 410 obs. of 5 variables:
## $ id : chr "1503960366" "1503960366" "1503960366" "1503960366" ...
## $ sleep_day : POSIXct, format: "2016-04-12" "2016-04-13" ...
## $ total_sleep_records : int 1 2 1 2 1 1 1 1 1 1 ...
## $ total_minutes_asleep: int 327 384 412 340 700 304 360 325 361 430 ...
## $ total_time_in_bed : int 346 407 442 367 712 320 377 364 384 449 ...
df_cardiaca_copy <- df_cardiaca
df_cardiaca_copy$Id <- as.character(df_cardiaca_copy$Id)
str(df_cardiaca_copy)
## 'data.frame': 2483658 obs. of 3 variables:
## $ Id : chr "2022484408" "2022484408" "2022484408" "2022484408" ...
## $ Time : chr "4/12/2016 7:21:00 AM" "4/12/2016 7:21:05 AM" "4/12/2016 7:21:10 AM" "4/12/2016 7:21:20 AM" ...
## $ Value: int 97 102 105 103 101 95 91 93 94 93 ...
df_cardiaca_copy<- df_cardiaca_copy %>%
transform(Time = mdy_hms(Time))
str(df_cardiaca_copy)
## 'data.frame': 2483658 obs. of 3 variables:
## $ Id : chr "2022484408" "2022484408" "2022484408" "2022484408" ...
## $ Time : POSIXct, format: "2016-04-12 07:21:00" "2016-04-12 07:21:05" ...
## $ Value: int 97 102 105 103 101 95 91 93 94 93 ...
titulos_cardiaca <- colnames(df_cardiaca_copy)
titulos_mini_cardiaca<- tolower(titulos_cardiaca)
df_cardiaca_copy<- df_cardiaca_copy %>%
rename(
id=Id ,
date=Time ,
value=Value )
colnames(df_cardiaca_copy)
## [1] "id" "date" "value"
sum(is.na(df_cardiaca_copy))
## [1] 0
df_cardiaca_unique <- df_cardiaca_copy[!duplicated(df_cardiaca_copy),]
str(df_cardiaca_unique)
## 'data.frame': 2483658 obs. of 3 variables:
## $ id : chr "2022484408" "2022484408" "2022484408" "2022484408" ...
## $ date : POSIXct, format: "2016-04-12 07:21:00" "2016-04-12 07:21:05" ...
## $ value: int 97 102 105 103 101 95 91 93 94 93 ...
df_cardica_unique contiene 2,483,658 filas, es decir que no había filas duplicadas.
integrantes <- unique(df_sum_min$id)
print(integrantes)
## [1] "1503960366" "1624580081" "1644430081" "1844505072" "1927972279"
## [6] "2022484408" "2026352035" "2320127002" "2347167796" "2873212765"
## [11] "3372868164" "3977333714" "4020332650" "4057192912" "4319703577"
## [16] "4388161847" "4445114986" "4558609924" "4702921684" "5553957443"
## [21] "5577150313" "6117666160" "6290855005" "6775888955" "6962181067"
## [26] "7007744171" "7086361926" "8053475328" "8253242879" "8378563200"
## [31] "8583815059" "8792009665" "8877689391"
Tenemos 33 usuarios utilizando la función de actividad diaria.
dias_estudiados <- unique(df_sum_min$activity_date)
print(dias_estudiados)
## [1] "2016-04-12" "2016-04-13" "2016-04-14" "2016-04-15" "2016-04-16"
## [6] "2016-04-17" "2016-04-18" "2016-04-19" "2016-04-20" "2016-04-21"
## [11] "2016-04-22" "2016-04-23" "2016-04-24" "2016-04-25" "2016-04-26"
## [16] "2016-04-27" "2016-04-28" "2016-04-29" "2016-04-30" "2016-05-01"
## [21] "2016-05-02" "2016-05-03" "2016-05-04" "2016-05-05" "2016-05-06"
## [26] "2016-05-07" "2016-05-08" "2016-05-09" "2016-05-10" "2016-05-11"
## [31] "2016-05-12"
Contiene los datos de 31 días, desde el 12/04/2016 al 12/05/2016 Si multiplicamos los usuarios por los días que se debería tener 1023 filas de datos, sin embargo se analizaron 863 filas, lo que representa una tasa de usabilidad de la aplicación del 84,35%.
ggplot(df_sum_min, aes(total_min_activiy))+
geom_histogram(binwidth = 5, fill = "green", color = "black")+
labs(title = "Histograma de entrenamientos", x = "Minutos", y = "Cantidad de entrenamientos")+
scale_x_continuous(n.breaks = 15)
El rango promedio de tiempo dedicado al entrenamiento se encuentra
mayormente entre 120 y 400 minutos.
avg_min_activity <- df_sum_min %>%
group_by(activity_date) %>%
summarise(promedio_total_min = mean(total_min_activiy))
ggplot(avg_min_activity, aes(x = activity_date, y = promedio_total_min))+
geom_line(size=1, color ="green")+
geom_point(size=0.8)+
geom_smooth(se = FALSE, size=0.5)+
stat_peaks(geom = "point", span = 11, color = "blue", size = 3) +
stat_peaks(geom = "label", span = 11, color = "blue", angle = 0, hjust = -0.1, x.label.fmt = "%d-%m") +
stat_peaks(geom = "rug", span = 11, color = "blue", sides = "b")+
stat_valleys(geom = "point", span = 11, color = "red", size = 3) +
stat_valleys(geom = "label", span = 11, color = "red", angle = 0, hjust = -0.1, x.label.fmt = "%d-%m") +
stat_valleys(geom = "rug", span = 11, color = "red", sides = "b")+
labs(title = "Promedio de actividad por dia de usuarios", x = "Días", y = "Minutos de actividad")+
scale_x_date(date_labels = "%d/%m")+
scale_y_continuous(n.breaks = 10)+
theme(legend.position = "bottom")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Los valores promedio del grupo oscilan entre 210 y 300 minutos, con una media entre 230 y 260 minutos.
activity_max_grupal <- avg_min_activity[which.max(avg_min_activity$promedio_total_min),]
print(activity_max_grupal)
## # A tibble: 1 × 2
## activity_date promedio_total_min
## <date> <dbl>
## 1 2016-04-23 293.
dia_prom_max_acti <- df_sum_min[df_sum_min$activity_date == "2016-04-23",][1, ]
print(dia_prom_max_acti)
## id activity_date total_steps total_distance very_active_minutes
## 12 1503960366 2016-04-23 14371 9.04 41
## fairly_active_minutes lightly_active_minutes sedentary_minutes calories
## 12 21 262 732 1949
## day_of_week total_min_activiy
## 12 sábado 324
El día sábado 23/04/2016 se obtuvo el valor máximo promedio de actividad con 293 min.
activity_min_grupal <- avg_min_activity[which.min(avg_min_activity$promedio_total_min),]
print(activity_min_grupal)
## # A tibble: 1 × 2
## activity_date promedio_total_min
## <date> <dbl>
## 1 2016-05-12 130.
dia_prom_min_acti <- df_sum_min[df_sum_min$activity_date == "2016-05-12",][1, ]
print(dia_prom_min_acti)
## id activity_date total_steps total_distance very_active_minutes
## 62 1624580081 2016-05-12 2971 1.93 0
## fairly_active_minutes lightly_active_minutes sedentary_minutes calories
## 62 0 107 890 1002
## day_of_week total_min_activiy
## 62 jueves 107
El día jueves 12/05/2016 se obtuvo el valor minimo promedio de actividad con 129 min.
activity_max_ind <- df_sum_min[which.max(df_sum_min$total_min_activiy),]
print(activity_max_ind)
## id activity_date total_steps total_distance very_active_minutes
## 914 8877689391 2016-04-16 29326 25.29 94
## fairly_active_minutes lightly_active_minutes sedentary_minutes calories
## 914 29 429 888 4547
## day_of_week total_min_activiy
## 914 sábado 552
El máximo de minutos en actividad fue 552, el día sábado 2016-04-16, id 8877689391.
activity_min_ind <- df_sum_min[which.min(df_sum_min$total_min_activiy),]
print(activity_min_ind)
## id activity_date total_steps total_distance very_active_minutes
## 382 4319703577 2016-04-12 7753 5.2 0
## fairly_active_minutes lightly_active_minutes sedentary_minutes calories
## 382 0 0 1440 2115
## day_of_week total_min_activiy
## 382 martes 0
El mínimo de minutos en actividad fue 0, el dia martes 2016-04-12 id 4319703577.
avg_pasos_totales <- df_sum_min %>%
group_by(activity_date) %>%
summarise(promedio_pasos_totales = mean(total_steps))
ggplot(avg_pasos_totales, aes(x=activity_date, y=promedio_pasos_totales))+
geom_line(stat = "identity", color = "brown")+
geom_point(size=0.8)+
geom_smooth(se = FALSE, size=0.5)+
stat_peaks(geom = "point", span = 11, color = "blue", size = 3) +
stat_peaks(geom = "label", span = 11, color = "blue", angle = 0, hjust = -0.1, x.label.fmt = "%d-%m") +
stat_peaks(geom = "rug", span = 11, color = "blue", sides = "b")+
stat_valleys(geom = "point", span = 11, color = "red", size = 3) +
stat_valleys(geom = "label", span = 11, color = "red", angle = 0, hjust = -0.1, x.label.fmt = "%d-%m") +
stat_valleys(geom = "rug", span = 11, color = "red", sides = "b")+
labs(title = "Promedio de pasos totales por día", x = "Días", y = "Pasos totales") +
scale_x_date(date_labels = "%d/%m")+
theme(legend.position = "bottom")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Observamos valores que van de los 7000 a los 9700 pasos, con una media
que oscila entre 8000 y 8500 pasos.
pasos_max_grupal <- avg_pasos_totales[which.max(avg_pasos_totales$promedio_pasos_totales),]
print(pasos_max_grupal)
## # A tibble: 1 × 2
## activity_date promedio_pasos_totales
## <date> <dbl>
## 1 2016-05-05 9738.
dia_prom_max_pasos <- df_sum_min[df_sum_min$activity_date == "2016-05-05",][1, ]
print(dia_prom_max_pasos)
## id activity_date total_steps total_distance very_active_minutes
## 24 1503960366 2016-05-05 14070 8.9 45
## fairly_active_minutes lightly_active_minutes sedentary_minutes calories
## 24 24 250 857 1959
## day_of_week total_min_activiy
## 24 jueves 319
El día jueves 05/05/2016 se obtuvo el máximo de pasos promedio, se realizaron 9738.462 pasos.
pasos_min_grupal <- avg_pasos_totales[which.min(avg_pasos_totales$promedio_pasos_totales),]
print(pasos_min_grupal)
## # A tibble: 1 × 2
## activity_date promedio_pasos_totales
## <date> <dbl>
## 1 2016-05-12 4302.
dia_prom_min_pasos <- df_sum_min[df_sum_min$activity_date == "2016-05-12",][1, ]
print(dia_prom_min_pasos)
## id activity_date total_steps total_distance very_active_minutes
## 62 1624580081 2016-05-12 2971 1.93 0
## fairly_active_minutes lightly_active_minutes sedentary_minutes calories
## 62 0 107 890 1002
## day_of_week total_min_activiy
## 62 jueves 107
El día jueves 12/05/2016, se obtuvo el minimo de pasos promedio, se realizaron 4301.706 pasos.
pasos_max_ind <- df_sum_min[which.max(df_sum_min$total_steps),]
print(pasos_max_ind)
## id activity_date total_steps total_distance very_active_minutes
## 51 1624580081 2016-05-01 36019 28.03 186
## fairly_active_minutes lightly_active_minutes sedentary_minutes calories
## 51 63 171 1020 2690
## day_of_week total_min_activiy
## 51 domingo 420
El máximo de pasos fue 36019, el día domingo 2016/05/01 del usuario 1624580081.
pasos_min_ind <- df_sum_min[which.min(df_sum_min$total_steps),]
print(pasos_min_ind)
## id activity_date total_steps total_distance very_active_minutes
## 108 1844505072 2016-04-27 4 0 0
## fairly_active_minutes lightly_active_minutes sedentary_minutes calories
## 108 0 1 1439 1348
## day_of_week total_min_activiy
## 108 miércoles 1
El mínimo de pasos fue 4, el dia miércoles 2016/04/27 del usuario 1844505072.
dias_cero_pasos <- subset(sub_df, total_steps == 0)
cantidad_ceros <- dias_cero_pasos %>%
group_by(activity_date) %>%
count(dias_cero_pasos$total_steps == 0)
ggplot(cantidad_ceros, aes(x = activity_date, y = n))+
geom_col(fill="orange", color="black")+
labs(title = "Cantidad de registros con cero pasos por día", x="Días", y="Cantidad de personas")+
scale_x_date(date_labels = "%d/%m")
Con este gráfico podemos observar que la mayoría de los días, salvo un
día 15/04, hubo registro con cero pasos, por día entre 1 a 4 personas no
utilizan el dispositivo de recolección de datos, ahí encontramos los
faltantes de datos del dataframe.
activiy_semanal <- df_sum_min %>%
group_by(day_of_week) %>%
summarise(activity_promedio = mean(total_min_activiy))%>%
arrange(desc(activity_promedio))
print(activiy_semanal)
## # A tibble: 7 × 2
## day_of_week activity_promedio
## <ord> <dbl>
## 1 sábado 268.
## 2 martes 258.
## 3 lunes 250
## 4 viernes 248.
## 5 miércoles 241.
## 6 jueves 240.
## 7 domingo 229.
ggplot(activiy_semanal, aes(x = day_of_week, y = activity_promedio, fill = day_of_week))+
geom_bar(stat = "identity")+
labs(title = "Actividad física promedio según día de la semana", x= " Días", y= "Minutos")+
scale_y_continuous(n.breaks = 10)+
theme_minimal()
pasos_semanal <- df_sum_min %>%
group_by(day_of_week) %>%
summarise(pasos_promedio = mean(total_steps)) %>%
arrange(desc(pasos_promedio))
print(pasos_semanal)
## # A tibble: 7 × 2
## day_of_week pasos_promedio
## <ord> <dbl>
## 1 martes 8949.
## 2 sábado 8947.
## 3 lunes 8488.
## 4 jueves 8185.
## 5 miércoles 8158.
## 6 viernes 7821.
## 7 domingo 7627.
ggplot(pasos_semanal, aes(x = day_of_week, y = pasos_promedio, fill = day_of_week))+
geom_bar(stat = "identity")+
labs(title = "Promedio de pasos según día de la semana", x= " Días", y= "Pasos")+
scale_y_continuous(n.breaks = 10)+
theme_minimal()
Podemos decir según el grupo estudiado que en los fines de semana, los
días sábados se encuentran los mayores registros de actividad física y
pasos realizados, mientras que en la semana los días martes son los días
de mayor actividad y movimiento. Por el contrario el domingo es el día
con menor actividad, y en la semana los jueves son también de menor
actividad y movimiento.
dormir_integrantes <- unique(df_dormir_unique$id)
print(dormir_integrantes)
## [1] "1503960366" "1644430081" "1844505072" "1927972279" "2026352035"
## [6] "2320127002" "2347167796" "3977333714" "4020332650" "4319703577"
## [11] "4388161847" "4445114986" "4558609924" "4702921684" "5553957443"
## [16] "5577150313" "6117666160" "6775888955" "6962181067" "7007744171"
## [21] "7086361926" "8053475328" "8378563200" "8792009665"
Tenemos 24 usuarios de los que se han recolectado datos, 9 usuarios menos que en actividad diaria.
dias_dormir <- unique(df_dormir_unique$sleep_day)
print(dias_dormir)
## [1] "2016-04-12 UTC" "2016-04-13 UTC" "2016-04-15 UTC" "2016-04-16 UTC"
## [5] "2016-04-17 UTC" "2016-04-19 UTC" "2016-04-20 UTC" "2016-04-21 UTC"
## [9] "2016-04-23 UTC" "2016-04-24 UTC" "2016-04-25 UTC" "2016-04-26 UTC"
## [13] "2016-04-28 UTC" "2016-04-29 UTC" "2016-04-30 UTC" "2016-05-01 UTC"
## [17] "2016-05-02 UTC" "2016-05-03 UTC" "2016-05-05 UTC" "2016-05-06 UTC"
## [21] "2016-05-07 UTC" "2016-05-08 UTC" "2016-05-09 UTC" "2016-05-10 UTC"
## [25] "2016-05-11 UTC" "2016-04-14 UTC" "2016-04-22 UTC" "2016-04-27 UTC"
## [29] "2016-05-04 UTC" "2016-05-12 UTC" "2016-04-18 UTC"
Los días de recolección de datos fueron 31, del 12/4/2016 al 12/5/2016.
El dataframe de actividad del sueño abarca el mismo período, pero con menos usuarios (24). Se esperaban 744 filas, pero se obtuvieron 410, lo que equivale al 55,1% del total esperado.
avg_min_dormidos <- df_dormir_unique %>%
group_by(sleep_day) %>%
summarise(promedio_sueño =mean(total_minutes_asleep))
ggplot(avg_min_dormidos, aes(x=sleep_day, y=promedio_sueño))+
geom_line(stat = "identity", size=1, color="violet")+
geom_point(size=0.8)+
geom_smooth(se = FALSE, size=0.5)+
stat_peaks(geom = "point", span = 11, color = "blue", size = 3) +
stat_peaks(geom = "label", span = 11, color = "blue", angle = 0, hjust = -0.1, x.label.fmt = "%d-%m") +
stat_peaks(geom = "rug", span = 11, color = "blue", sides = "b")+
stat_valleys(geom = "point", span = 11, color = "red", size = 3) +
stat_valleys(geom = "label", span = 11, color = "red", angle = 0, hjust = -0.1, x.label.fmt = "%d-%m") +
stat_valleys(geom = "rug", span = 11, color = "red", sides = "b")+
labs(title = "Promedio de minutos de sueño por día", x="Días", y="Minutos de sueño")+
theme(legend.position = "bottom")+
scale_y_continuous(n.breaks = 10)
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Los valores promedio de sueño del grupo oscilan entre 360 y 490 minutos,
con una media entre 410 y 440 minutos.
sueño_max_prom <- avg_min_dormidos[which.max(avg_min_dormidos$promedio_sueño),]
print(sueño_max_prom)
## # A tibble: 1 × 2
## sleep_day promedio_sueño
## <dttm> <dbl>
## 1 2016-04-24 00:00:00 487.
dia_prom_max_sueño <- df_sum_min[df_sum_min$activity_date == "2016-4-24",][1, ]
print(dia_prom_max_sueño)
## id activity_date total_steps total_distance very_active_minutes
## 13 1503960366 2016-04-24 10039 6.41 39
## fairly_active_minutes lightly_active_minutes sedentary_minutes calories
## 13 5 238 709 1788
## day_of_week total_min_activiy
## 13 domingo 282
El registro máximo de minutos de sueño promedio fue el día doming 24/4 con 487 minutos.
sueño_mini_prom <- avg_min_dormidos[which.min(avg_min_dormidos$promedio_sueño),]
print(sueño_mini_prom)
## # A tibble: 1 × 2
## sleep_day promedio_sueño
## <dttm> <dbl>
## 1 2016-05-05 00:00:00 362.
dia_prom_min_sueño <- df_sum_min[df_sum_min$activity_date == "2016-5-05",][1, ]
print(dia_prom_min_sueño)
## id activity_date total_steps total_distance very_active_minutes
## 24 1503960366 2016-05-05 14070 8.9 45
## fairly_active_minutes lightly_active_minutes sedentary_minutes calories
## 24 24 250 857 1959
## day_of_week total_min_activiy
## 24 jueves 319
El registro mínimo de minutos de sueño fue el día jueves 5/5 con 362 minutos.
sueño_max_ind <- df_dormir_unique[which.max(df_dormir_unique$total_minutes_asleep),]
print(sueño_max_ind)
## id sleep_day total_sleep_records total_minutes_asleep
## 28 1644430081 2016-05-02 1 796
## total_time_in_bed
## 28 961
El registro máximo de minutos de sueño fue el día lunes 2/5 con 796 minutos, id 1644430081.
sueño_min_ind <- df_dormir_unique[which.min(df_dormir_unique$total_minutes_asleep),]
print(sueño_min_ind)
## id sleep_day total_sleep_records total_minutes_asleep
## 339 7007744171 2016-05-01 1 58
## total_time_in_bed
## 339 61
El registro mínimo de minutos de sueño fue el domingo 1/5 con 58 min, id 7007744171.
day_of_week_sueño <- df_dormir_unique %>%
mutate(day_of_week = wday(df_dormir_unique$sleep_day, label = TRUE, abbr = FALSE))
head(day_of_week_sueño)
## id sleep_day total_sleep_records total_minutes_asleep
## 1 1503960366 2016-04-12 1 327
## 2 1503960366 2016-04-13 2 384
## 3 1503960366 2016-04-15 1 412
## 4 1503960366 2016-04-16 2 340
## 5 1503960366 2016-04-17 1 700
## 6 1503960366 2016-04-19 1 304
## total_time_in_bed day_of_week
## 1 346 martes
## 2 407 miércoles
## 3 442 viernes
## 4 367 sábado
## 5 712 domingo
## 6 320 martes
prom_sueño_day <- day_of_week_sueño %>%
group_by(day_of_week) %>%
summarise(day_prom_sueño = mean(total_minutes_asleep))%>%
arrange(desc(day_prom_sueño))
print(prom_sueño_day)
## # A tibble: 7 × 2
## day_of_week day_prom_sueño
## <ord> <dbl>
## 1 domingo 453.
## 2 miércoles 435.
## 3 lunes 420.
## 4 sábado 419.
## 5 viernes 405.
## 6 martes 405.
## 7 jueves 401.
ggplot(prom_sueño_day, aes(x = day_of_week, y = day_prom_sueño, fill =day_of_week))+
geom_bar(stat = "identity")+
labs(title = "Promedio de minutos de sueño según dia de la semana", x = "Días", y = "Minutos de sueño")+
scale_y_continuous(n.breaks = 10)+
theme_minimal()
Podemos observar que los fines de semana la mayor cantidad de minutos de
sueño se encuentran en los días domingo, mientras que en la semana los
días miércoles poseen mas minutos de sueño. Por el contrario el dia
jueves se encuentra el promedio mas bajo de minutos de sueño.
cardica_integrantes <- unique(df_cardiaca_unique$id)
print(cardica_integrantes)
## [1] "2022484408" "2026352035" "2347167796" "4020332650" "4388161847"
## [6] "4558609924" "5553957443" "5577150313" "6117666160" "6775888955"
## [11] "6962181067" "7007744171" "8792009665" "8877689391"
El data frame contiene información de 14 usuarios, 10 usuarios menos que en actividad del sueño y 19 menos que en actividad diaria.
####Máxima
cardiaca_max<- df_cardiaca_copy[which.max(df_cardiaca_copy$value),]
print(cardiaca_max)
## id date value
## 49262 2022484408 2016-04-21 16:31:40 203
El valor de frecuencia cardiaca máxima fue 203, el día 2016-04-21 16:31:40, id 2022484408.
cardiaca_min<- df_cardiaca_copy[which.min(df_cardiaca_copy$value),]
print(cardiaca_min)
## id date value
## 1504248 5577150313 2016-05-04 02:00:10 36
El valor de frecuencia cardiaca mínimo fue 36, el dia 2016-05-04 02:00:10, id 5577150313.
sub_cardiaca_time <- df_cardiaca_unique
sub_cardiaca_time$date <- substr(sub_cardiaca_time$date,start = 1, stop = 10)
cardiaca_mucha_actividad <-subset(sub_cardiaca_time, date == "2016-04-23")
promedio_cardiaca_mucha_actividad <- mean(cardiaca_mucha_actividad$value)
print(promedio_cardiaca_mucha_actividad)
## [1] 78.76555
La frecuencia cardíaca promedio del día 23/4, considerado un día de mucha actividad física, fue de 78.76.
cardiaca_poca_actividad <- subset(sub_cardiaca_time, date == "2016-04-24")
promedio_cardiaca_poca_actividad <- mean(cardiaca_poca_actividad$value)
print(promedio_cardiaca_poca_actividad)
## [1] 76
La frecuencia cardíaca del día domingo 24/4, considerado un día de poca actividad física, fue de 76.
Esto sugiere una correlación positiva entre mayor actividad física y mayor frecuencia cardíaca.
calend_4<-rep(NA,30)
calend_4[21] <- "Mayor cantidad de pasos"
calend_4[c(23,30)]<-"Mayor actividad"
calend_4[c(17)]<-"Menor actividad y mayor hs sueño"
calend_4[c(24)]<-"Mayor hs sueño"
calend_4[26]<-"Menor hs sueño"
calendR(year = 2016,
month = 4,
start = "M",
text = "Start",
text.pos = 12,
special.days = calend_4,
special.col = c("green2","lightgreen","lightblue","violet","pink"),
legend.pos = "bottom",
)
calend_5 <-rep(NA,31)
calend_5[c(1,4)]<-"Menor actividad"
calend_5[c(5)]<-"Menor hs sueño y mayor cant. pasos"
calendR(year = 2016,
month = 5,
start = "M",
text = "End",
text.pos = 12,
special.days = calend_5,
special.col = c("violet","green3"),
legend.pos = "bottom",
)
Análisis de correlación y comportamiento:
Se observó que, tras un día de alta actividad física, el descanso nocturno tiende a ser mayor. Por ejemplo: Los sábados presentan altos niveles de actividad, y los domingos muestran mayor duración del sueño. En la semana, los martes son días de intensa actividad, seguidos por miércoles con mayor cantidad de minutos de sueño. Los días con menor promedio de sueño son los martes y jueves, aunque no se encontró una correlación directa con la actividad física del día anterior.