Continúo con el análisis, recuperando los datos del dataset limpio del anterior notebook https://rpubs.com/cperaltap/actividad_1_limpieza

Primeras observaciones
kable(summary(act_data))
X Hora Dia Mes Year Distancia Calorias Tiempo FCMedia Zancada Ascenso Velocidad
Min. : 1.0 Min. : 5.0 Min. : 2.0 Min. : 1.000 Min. :2015 Min. : 1.01 Min. : 48.0 Min. : 4.53 Min. :105.0 Min. :0.7422 Min. : 0.00 Min. : 7.30
1st Qu.:116.5 1st Qu.: 9.0 1st Qu.:112.0 1st Qu.: 4.000 1st Qu.:2017 1st Qu.: 5.63 1st Qu.: 349.5 1st Qu.: 32.87 1st Qu.:140.0 1st Qu.:0.9546 1st Qu.: 42.00 1st Qu.: 9.74
Median :232.0 Median :10.0 Median :212.0 Median : 7.000 Median :2018 Median : 7.02 Median : 445.0 Median : 40.57 Median :147.0 Median :1.0200 Median : 60.00 Median :10.44
Mean :232.0 Mean :11.6 Mean :196.6 Mean : 6.989 Mean :2018 Mean : 7.07 Mean : 447.3 Mean : 40.91 Mean :146.4 Mean :1.0226 Mean : 65.98 Mean :10.42
3rd Qu.:347.5 3rd Qu.:15.0 3rd Qu.:278.0 3rd Qu.:10.000 3rd Qu.:2020 3rd Qu.: 8.05 3rd Qu.: 528.5 3rd Qu.: 47.31 3rd Qu.:154.0 3rd Qu.:1.0800 3rd Qu.: 87.00 3rd Qu.:11.03
Max. :463.0 Max. :21.0 Max. :364.0 Max. :12.000 Max. :2021 Max. :21.35 Max. :1252.0 Max. :119.83 Max. :186.0 Max. :1.3586 Max. :301.00 Max. :13.77

Haciendo un summary(me apoyo en kable para hacerlo más cómodo visualmente) podemos observar los mínimos, máximos, principales cuantiles incluyendo la media y la mediana.

Datos que nos llaman la atención:

Podemos visualizar los diagramas de cajas (boxplot) de algunas columnas intersantes para ver la distribución de los registros
boxplot(act_data %>% select(Distancia, Velocidad))

Podemos usar también diferentes funciones para sacar estadísticos
# Velocidad media en las sesiones
mean(act_data$Velocidad)
## [1] 10.41991
# Desviación típica y variancza de la distancia
# Si lo pongo entre paréntesis asigno a la variable y muestro
(sd_vel <- sd(act_data$Distancia))
## [1] 2.353329
(var_vel <- var(act_data$Distancia))
## [1] 5.538157
# Nótese que la la varianza es la desviación típica al cuadrado
var_vel == sd_vel**2
## [1] FALSE
# Podemos sacar los diferentes cuantiles eligiéndolos en la función
# En este caso para las Calorias
quantile(act_data$Calorias, prob=c(0.25,0.5,0.75))
##   25%   50%   75% 
## 349.5 445.0 528.5
quantile(act_data$Calorias, prob=c(seq(0,1,0.1))) # Haciendo una secuencia cada 10%
##     0%    10%    20%    30%    40%    50%    60%    70%    80%    90%   100% 
##   48.0  267.2  329.0  364.0  396.0  445.0  472.0  504.4  556.6  636.4 1252.0
# La media es el valor que se encuentra en medio de todos los registros
median(act_data$Distancia)
## [1] 7.02
# La moda es el valor más repetido (redondeamos a un decimal)
# Creamos una pequeña función para calcularla
moda <- function(x) {
   return(as.numeric(names(which.max(table(x)))))
}
moda(round(act_data$Distancia, 1))
## [1] 7

Vayamos con algo de visualización

Cargo la libreria ggplot2

library(ggplot2)
Histograma de las Distancias
ggplot(data= act_data) + 
  geom_histogram(aes(x = Distancia), col = "blue", binwidth = 1)

Se observa que las mayorías de las carreras son entre 5 y 8 km. Además la distancia de 10Km también es recurrente

Diagrama de caja del Ascenso
ggplot(data= act_data) +
  geom_boxplot(aes(x=Ascenso), col="blue")

Vemos que la mayoría de las carreras tienen un ascenso acumulado entre 40 y 90 y se ven algunos outliers por encima de 100 (a ojo, sin entrar a valorar que superen el 1.5 del valor intercuartil). Veamos esos outliers:

outliers <- act_data %>% filter(Ascenso > 100)
outliers
# Lo que hacen un total de cuantos?

count(outliers)
Ahora haremos una agrupación por años mostrando la media de la Velocidad para ver evolución
# Velocidad media por año en la que se realiza la actividad
agrupado_y_velocidad <- act_data %>% group_by(Year) %>% summarise(Velocidad_media = mean(Velocidad))
agrupado_y_velocidad
# Hacemos un gráfico de lineas para visualizar la evolución
ggplot(data = agrupado_y_velocidad) +
  geom_line(aes(x = Year, y = Velocidad_media), col="blue", size= 2) +
  scale_x_continuous("AÑOS", labels = as.character(agrupado_y_velocidad$Year), breaks = agrupado_y_velocidad$Year)

Se puede observar que los años más veloces del atleta han sido 2017 y 2018, a partir del cual se observa como va bajando esta velocidad paulatinamente hasta 2021. Aproximadamente -1.5 Kmh respecto a esos años.

Aprovechemos el gráfico de líneas para hacer otro estudio, en este caso un acumulativo por años de la distancia recorrida por días
En este caso utilizo la libreria plotly para interactuar con el gráfico
library(plotly)
#Añado columna de acumulador para la actividad
act_data$Acumulado <- ave(act_data$Distancia, act_data$Year, FUN=cumsum)

plot_acumulado <- ggplot(data = act_data) +   
  geom_line(aes(x = Dia, y = Acumulado, col = factor({Year})),
                                            size = 1,
                                            alpha = 2/5)
ggplotly(plot_acumulado)

Tenemos información interesante, como que el año 2019 se empezó a entrenar tarde, pero finalmente la evolución en más progresiva y es el año con más distancia recorrida. El gráfico también nos muestra que en el año 2015 los registros comienzan pasada la mitad de año y el 2021 deja de tener sesiones el último trimestre (Eso es porque estamos realizando este estudioen Octubre de 2021) Veamos lo que decimos sacando la info directamente:

# Primer día del año en 2015
act_2015 <- act_data %>% filter(Year==2015)
min(act_2015$Dia)
## [1] 218
# Último día del año en 2021
act_2021 <- act_data %>% filter(Year==2021)
max(act_2021$Dia)
## [1] 297
Vamos a ver que mes es el más activo, viendo la influencia de cada año. Además, interactivo para ver la información sobre el gráfico!
act_dist_by_month_year <- act_data %>% group_by(Mes, Year) %>% summarise(Distancia = sum(Distancia))
## `summarise()` has grouped output by 'Mes'. You can override using the `.groups` argument.
act_dist_by_month_year
plot_month_year <- ggplot(act_dist_by_month_year, aes(x=Mes, y=Distancia, fill=Year)) +
  geom_bar(stat="identity") + 
  theme_minimal() # Añadimos un tema diferente, para ser más cómodo visualmente

ggplotly(plot_month_year)

Visualmente podemos observar que Octubre (mes 10) es el más activo y Junio es más inactivo. Además, si interactuamos, vemos que hay meses/años especialmente activos. Por ejemplo Marzo de 2019 o Julio de 2018.

# Verificamos ordenando por distancia el dataset de la agrupación
act_dist_by_month_year %>% arrange(desc(Distancia))

Sobre este dataset se pueden ver un análisis de regresión lineal en https://rpubs.com/cperaltap/regresion_lineal_multiple y un analisis de clasificación con kmeans en https://rpubs.com/cperaltap/clasificacion_kmeans_actividades