Des ratios pour comparer

Cette semaine, le #Tidytuesday nous fait découvrir les performances des athlètes de la fédération internationale de force athlétique. J’ai utilisé des ratios (poids soulevé/poids corporel) pour comparer les performances des hommes et des femmes en fonction de l’âge.



CONTEXTE

Les données proviennent de Open Powerlifting.

Les données mises à notre disposition pour ce Tidytuesday sont un petit sous-ensemble des données limitées aux événements IPF (International Powerlifting Federation). L’ensemble complet de données avec beaucoup plus de colonnes et d’autres événements peut être trouvé sous forme de fichier directement sur le site de Open Powerlifting.



OBJECTIFS

  1. Visualiser la relation entre le poids de l’athlète et le poids que cet athlète peut soulever en fonction de l’âge à l’épreuve du soulevé de terre (deadlift)
  2. Réaliser cette comparaison pour les hommes et pour les femmes



IMPORTER

ipf_lifts <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-10-08/ipf_lifts.csv")
FALSE Parsed with column specification:  
FALSE cols(  
FALSE   name = col_character(),  
FALSE   sex = col_character(),  
FALSE   event = col_character(),  
FALSE   equipment = col_character(),  
FALSE   age = col_double(),  
FALSE   age_class = col_character(),  
FALSE   division = col_character(),  
FALSE   bodyweight_kg = col_double(),  
FALSE   weight_class_kg = col_character(),  
FALSE   best3squat_kg = col_double(),  
FALSE   best3bench_kg = col_double(),  
FALSE   best3deadlift_kg = col_double(),  
FALSE   place = col_character(),  
FALSE   date = col_date(format = ""),  
FALSE   federation = col_character(),  
FALSE   meet_name = col_character()  
FALSE 
)



EXPLORER

summary(ipf_lifts)
##      name               sex               event            
##  Length:41152       Length:41152       Length:41152        
##  Class :character   Class :character   Class :character    
##  Mode  :character   Mode  :character   Mode  :character    
##                                                            
##                                                            
##                                                            
##                                                            
##   equipment              age         age_class           division          
##  Length:41152       Min.   : 0.50   Length:41152       Length:41152        
##  Class :character   1st Qu.:22.50   Class :character   Class :character    
##  Mode  :character   Median :31.50   Mode  :character   Mode  :character    
##                     Mean   :34.77                                          
##                     3rd Qu.:45.00                                          
##                     Max.   :93.50                                          
##                     NA's   :2906                                           
##  bodyweight_kg    weight_class_kg    best3squat_kg    best3bench_kg     
##  Min.   : 37.29   Length:41152       Min.   :-210.0   Min.   :-160.0    
##  1st Qu.: 60.00   Class :character   1st Qu.: 160.0   1st Qu.:  97.5    
##  Median : 75.55   Mode  :character   Median : 215.0   Median : 140.0    
##  Mean   : 81.15                      Mean   : 217.6   Mean   : 144.7    
##  3rd Qu.: 97.30                      3rd Qu.: 270.0   3rd Qu.: 185.0    
##  Max.   :240.00                      Max.   : 490.0   Max.   : 415.0    
##  NA's   :187                         NA's   :13698    NA's   :2462      
##  best3deadlift_kg    place                date             
##  Min.   :-215.0   Length:41152       Min.   :1973-11-09    
##  1st Qu.: 170.0   Class :character   1st Qu.:1998-12-11    
##  Median : 222.5   Mode  :character   Median :2007-10-14    
##  Mean   : 221.8                      Mean   :2006-02-19    
##  3rd Qu.: 270.0                      3rd Qu.:2015-06-05    
##  Max.   : 420.0                      Max.   :2019-08-26    
##  NA's   :14028                                             
##   federation         meet_name          
##  Length:41152       Length:41152        
##  Class :character   Class :character    
##  Mode  :character   Mode  :character    
##                                         
##                                         
##                                         
## 

Aucune conversion particulière à effectuer. Toutes les variables utiles pour le travail de cette semaine sont sous le bon format. Le seul travail de préparation qui est à faire est de synthétiser les données (moyennes) et de préparer une table de données qui permet de faire un graphique.



PRÉPARER

comp_poids<-ipf_lifts %>%
     mutate(ratio=best3deadlift_kg/bodyweight_kg) %>%
     filter(!is.na(ratio), !is.na(age_class), !age_class=="5-12") %>%
     select(age_class, sex, ratio) %>%
     group_by(sex, age_class) %>%
     summarise(moyenne=mean(ratio, na.rm=TRUE), et=sd(ratio, na.rm=TRUE)) %>%
     mutate(age_class=as.factor(age_class))



VISUALISER

#Graphique  
gg<-ggplot(data=comp_poids)  
gg<-gg + geom_rect(data=comp_poids, aes(x=age_class, y=moyenne),
                      xmin=as.numeric(comp_poids$age_class[[5]])-0.5,
                      xmax=as.numeric(comp_poids$age_class[[6]])+0.5,
                      ymin=0,
                      ymax=4,
                      fill="#E7E7E7", alpha=0.6)  
gg<-gg + geom_rect(data=comp_poids, aes(x=age_class, y=moyenne),
                      xmin=as.numeric(comp_poids$age_class[[9]])-0.5,
                      xmax=as.numeric(comp_poids$age_class[[10]])+0.5,
                      ymin=0,
                      ymax=4,
                      fill="#E7E7E7", alpha=0.6)  
gg<-gg + geom_rect(data=comp_poids, aes(x=age_class, y=moyenne),
                      xmin=as.numeric(comp_poids$age_class[[12]])-0.5, 
                      xmax=as.numeric(comp_poids$age_class[[13]])+0.5,
                      ymin=0, 
                      ymax=4,
                      fill="#E7E7E7", alpha=0.6)  
gg<-gg + geom_segment( aes(x=as.numeric(comp_poids$age_class[[5]]),
                           xend=as.numeric(comp_poids$age_class[[13]]),
                           y=3.24,
                           yend=2.2),
                           color="#EA9010", alpha=0.6)  
gg<-gg + geom_segment( aes(x=as.numeric(comp_poids$age_class[[5]]),
                           xend=as.numeric(comp_poids$age_class[[13]]),
                           y=2.73,
                           yend=1.92),  
                           color="#4A0D67", alpha=0.6)  
gg<-gg + geom_point(data=comp_poids,aes(x=age_class, y=moyenne, group=sex, color=sex), size=4.5)  
gg<-gg + geom_errorbar(data=comp_poids, aes(x=age_class, ymin=moyenne-et, ymax=moyenne+et, color=sex), width=0.3, size=0.6, alpha=0.6)  
gg<-gg + scale_color_manual(values=c("#4A0D67","#EA9010"))  
#retirer la légende  
gg<-gg + theme(legend.position = "none")  
#ajuster les axes  
gg<-gg + scale_y_continuous(breaks=seq(0,4,0.5), limits=c(0, 4))
#modifier le thème  
gg <- gg +  theme(panel.border = element_blank(),
                      panel.background = element_blank(),
                      plot.background = element_blank(),
                      panel.grid.major.x= element_blank(),
                      panel.grid.major.y= element_blank(),
                      panel.grid.minor = element_blank(),
                      axis.line.x = element_line(size=0.5, color="#A9A9A9"),
                      axis.line.y =element_line(size=0.5, color="#A9A9A9"),
                      axis.ticks = element_blank())  
#ajouter les titres  
gg<-gg + labs(title="Les <span style='color:#4A0D67'>**femmes**</span>  perdent leur super pouvoir moins vite que les <span style='color:#EA9010'>**hommes**</span> !",
                subtitle = "\nAu meilleur de leur forme, les hommes peuvent soulever 3.2X leur poids corporel à l'épreuve du soulvé de terre. Les femmes,\npour leur part, peuvent soulever 2.7X leur poids pour la même catégorie d'âge. Ce qui est surprenant c'est que les femmes\nperdent leur capacité physique moins rapidement que les hommes.\n",
               x="Âge",
               y="Ratio poids soulevé/poids corporel",
               caption="\nSOURCE: Open Powerlifting   |  DESIGN: Johanie Fournier, agr.")  
gg<-gg + theme(  plot.title    =  element_markdown(lineheight = 1.1,size=21, hjust=0,vjust=0.5, face="bold", color="#404040"),
                   plot.subtitle = element_text(size=14, hjust=0,family="Tw Cen MT", color="#8B8B8B")
,                  plot.caption  = element_text(size=8, hjust=1,vjust=0.5, family="Tw Cen MT", color="#8B8B8B"),
                   axis.title.y  = element_text(size=12, hjust=1,vjust=0.5, family="Tw Cen MT", color="#8B8B8B", angle=90),
                   axis.title.x  = element_text(size=12, hjust=0,vjust=0.5, family="Tw Cen MT", color="#8B8B8B"),
                   axis.text.y   = element_text(size=12, hjust=0.5,vjust=0.5, family="Tw Cen MT", color="#8B8B8B"),
                   axis.text.x   = element_text(size=12, hjust=0.5,vjust=0.5, family="Tw Cen MT", color="#8B8B8B"))

Voici ce que ça donne:





CONCLUSION

Finalement, la relation entre le poids de l’athlète et le poids qu’il est capable de soulever au deadlift en fonction de l’âge nous apprend que le poids soulevé diminue avec l’âge pour les hommes et les femmes. Par contre, la comparaison des hommes et des femmes en mettant les graphiques côte à côte n’est pas si facile à faire. Pour contourner ce problème, j’ai choisi de présenter le ratio poids soulevé/poids corporel. En comparant ce ratio pour les hommes et les femmes, on se rend compte que les femmes perdent leur capacité physique moins vite que les hommes au fur et à mesure que l’âge augmente.



Alors, tu veux en savoir plus sur ma démarche? Un épisode de podcast sera bientôt disponible dans lequel je t’explique toute la réflexion et les concepts de data visualisation qui ont menés à la création de cette viz.

Publicités

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.