TyT2019|W15: Left_join ou Right_join? On a le choix mais il faut valider!

Pour le #Tidytuesday de cette semaine, nous avons l’occasion de regarder les tournois du Grand Chelem. Financial Times a produite un arcivle qui a couvert l’aspect historique des femmes au tennis. Cet article couvre plus de données que ce qui nous est proposé ici, mais il contient plusieurs visualisation qui vallent la peine d’être vues.

 

CONTEXTE

Les tournois du Grand Chelem, également appelés majors, sont les quatre événements annuels les plus importants. Ils offrent le plus grand nombre de points de classement, de récompenses, d’attention du public et des médias, la plus grande force et la plus grande taille du terrain, ainsi qu’un plus grand nombre de « meilleurs ». L’épreuve du Grand Chelem comprend l’Open australien mi-janvier, l’Ouverture Française entre fin mai et début juin, Wimbledon en juin-juillet et l’US Open en août-septembre. Chaque tournoi se déroule sur deux Les tournois australien et américain se jouent sur des courts en dur, le français sur terre battue et le Wimbledon sur gazon.

 

OBJECTIFS

1) Visualiser l’évolution de l’âge au premier grand titre pour les hommes et les femmes

IMPORTER

tt_data<-tt_load("2019-04-09")
FALSE Parsed with column specification:
FALSE cols(
FALSE   player = col_character(),
FALSE   year = col_double(),
FALSE   tournament = col_character(),
FALSE   outcome = col_character(),
FALSE   gender = col_character()
FALSE )
FALSE Parsed with column specification:
FALSE cols(
FALSE   year = col_double(),
FALSE   grand_slam = col_character(),
FALSE   name = col_character(),
FALSE   rolling_win_count = col_double(),
FALSE   tournament_date = col_date(format = ""),
FALSE   gender = col_character()
FALSE )
FALSE Parsed with column specification:
FALSE cols(
FALSE   name = col_character(),
FALSE   grand_slam = col_character(),
FALSE   date_of_birth = col_date(format = ""),
FALSE   date_of_first_title = col_date(format = ""),
FALSE   age = col_double()
FALSE )
print(tt_data)
FALSE Available Datasets:
FALSE   grand_slam_timeline 
FALSE   grand_slams 
FALSE   pic1 
FALSE   pic2 
FALSE   player_dob 
FALSE   tennis_pros 
FALSE   

EXPLORER

data_age<-tt_data$player_dob
glimpse(data_age)
## Observations: 105
## Variables: 5
## $ name                <chr> "Nancy Richey", "Virginia Wade", "Billie Jea…
## $ grand_slam          <chr> "French Open", "US Open", "Wimbledon", "Aust…
## $ date_of_birth       <date> 1942-08-23, 1945-07-10, 1943-11-22, 1942-07…
## $ date_of_first_title <date> 1968-06-08, 1968-09-07, 1968-07-05, 1969-01…
## $ age                 <dbl> 9421, 8460, 8992, 9691, 7249, 7116, 7360, 10…
summary(data_age)
##      name            grand_slam        date_of_birth       
##  Length:105         Length:105         Min.   :1934-11-02  
##  Class :character   Class :character   1st Qu.:1956-03-19  
##  Mode  :character   Mode  :character   Median :1971-08-12  
##                                        Mean   :1968-10-21  
##                                        3rd Qu.:1981-08-08  
##                                        Max.   :1997-10-16  
##                                                            
##  date_of_first_title       age       
##  Min.   :1968-06-08   Min.   : 5961  
##  1st Qu.:1978-06-16   1st Qu.: 7512  
##  Median :1994-10-15   Median : 8286  
##  Mean   :1992-10-28   Mean   : 8531  
##  3rd Qu.:2004-06-06   3rd Qu.: 9502  
##  Max.   :2018-09-08   Max.   :12724  
##  NA's   :3            NA's   :3
grand_slams<-tt_data$grand_slams
glimpse(grand_slams)
## Observations: 416
## Variables: 6
## $ year              <dbl> 1968, 1968, 1968, 1968, 1969, 1969, 1969, 1969…
## $ grand_slam        <chr> "australian_open", "french_open", "wimbledon",…
## $ name              <chr> "Billie Jean King", "Nancy Richey", "Billie Je…
## $ rolling_win_count <dbl> 1, 1, 2, 1, 1, 2, 1, 3, 4, 5, 6, 7, 8, 1, 2, 3…
## $ tournament_date   <date> 1968-01-10, 1968-06-09, 1968-07-14, 1968-09-0…
## $ gender            <chr> "Female", "Female", "Female", "Female", "Femal…
summary(grand_slams)
##       year       grand_slam            name           rolling_win_count
##  Min.   :1968   Length:416         Length:416         Min.   : 1.000   
##  1st Qu.:1980   Class :character   Class :character   1st Qu.: 1.000   
##  Median :1993   Mode  :character   Mode  :character   Median : 4.000   
##  Mean   :1993                                         Mean   : 5.507   
##  3rd Qu.:2006                                         3rd Qu.: 8.000   
##  Max.   :2019                                         Max.   :23.000   
##  tournament_date         gender         
##  Min.   :1968-01-10   Length:416        
##  1st Qu.:1979-12-10   Class :character  
##  Median :1993-03-26   Mode  :character  
##  Mean   :1993-04-09                     
##  3rd Qu.:2006-02-16                     
##  Max.   :2019-01-10
Hmisc::describe(data_age$age)
## data_age$age 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      102        3      102        1     8531     1661     6387     6615 
##      .25      .50      .75      .90      .95 
##     7512     8286     9502    10674    10938 
## 
## lowest :  5961  6033  6114  6285  6320, highest: 10967 11061 12252 12273 12724
Hmisc::describe(data_age$date_of_first_title)
## data_age$date_of_first_title 
##        n  missing distinct 
##      102        3      102 
## 
## lowest : 1968-06-08 1968-06-09 1968-07-05 1968-07-06 1968-09-07
## highest: 2017-06-10 2017-09-09 2018-01-27 2018-06-09 2018-09-08
Hmisc::describe(grand_slams$tournament_date)
## grand_slams$tournament_date 
##        n  missing distinct 
##      416        0      204 
## 
## lowest : 1968-01-10 1968-06-09 1968-07-14 1968-09-09 1969-01-10
## highest: 2018-01-10 2018-06-09 2018-07-14 2018-09-09 2019-01-10
Hmisc::describe(data_age$grand_slam)
## data_age$grand_slam 
##        n  missing distinct 
##      102        3        7 
## 
## Australian Open (19, 0.186), Australian Open (December) (1, 0.010),
## Australian Open (Jan.) (1, 0.010), Australian Open (January) (1, 0.010),
## French Open (39, 0.382), US Open (24, 0.235), Wimbledon (17, 0.167)
Hmisc::describe(grand_slams$grand_slam)
## grand_slams$grand_slam 
##        n  missing distinct 
##      416        0        4 
##                                                                           
## Value      australian_open     french_open         us_open       wimbledon
## Frequency              104             104             104             104
## Proportion            0.25            0.25            0.25            0.25
Hmisc::describe(data_age$name)
## data_age$name 
##        n  missing distinct 
##      105        0      105 
## 
## lowest : Adriano Panatta    Albert Costa       Amélie Mauresmo    Ana Ivanovic       Anastasia Myskina 
## highest: Virginia Wade      Vitas Gerulaitis   William Bowrey     Yannick Noah       Yevgeny Kafelnikov
Hmisc::describe(grand_slams$name)
## grand_slams$name 
##        n  missing distinct 
##      416        0      105 
## 
## lowest : Adriano Panatta    Albert Costa       Amélie Mauresmo    Ana Ivanovic       Anastasia Myskina 
## highest: Virginia Wade      Vitas Gerulaitis   William Bowrey     Yannick Noah       Yevgeny Kafelnikov
Hmisc::describe(grand_slams$gender)
## grand_slams$gender 
##        n  missing distinct 
##      416        0        2 
##                         
## Value      Female   Male
## Frequency     208    208
## Proportion    0.5    0.5

Nous disposons de plusieurs variables. Toutefois, pour pouvoir pousser plus l’exploration de ces données, il va falloir travailler un peu les âges car elles sont sotckées sous forme de jour et non d’année. Pour avoir le genre, il faut joindre 2 tables de données ensemble. Donc, il faut s’assurer que toutes ces valeurs contenues dans ces colonnes concordent.

PRÉPARER:

gender% #J'ai besion de sélectionner seulement le genre
  select(name, gender)%>%
  distinct()

data%
  mutate(age_y=round(age/365, digits = 0))%>% #modifier l'age pour l'avoir en année
  mutate(tournament_date=date_of_first_title)%>% #avoir le même nom de colonne pour joindre les fichiers
  left_join(gender, by="name")%>%
  mutate(annee=year(date_of_first_title))%>%
  select("name", "gender", "age_y", "date_of_first_title")

glimpse(data) #validation du nombre de ligne des données combinées
FALSE Observations: 105
FALSE Variables: 4
FALSE $ name                <chr> "Nancy Richey", "Virginia Wade", "Billie Jea…
FALSE $ gender              <chr> "Female", "Female", "Female", "Female", "Fem…
FALSE $ age_y               <dbl> 26, 23, 25, 27, 20, 19, 20, 29, 21, 23, 22, …
FALSE $ date_of_first_title <date> 1968-06-08, 1968-09-07, 1968-07-05, 1969-01…
summary(data) #validation des données manquante comme on a fait un left_join
FALSE      name              gender              age_y      date_of_first_title 
FALSE  Length:105         Length:105         Min.   :16.0   Min.   :1968-06-08  
FALSE  Class :character   Class :character   1st Qu.:21.0   1st Qu.:1978-06-16  
FALSE  Mode  :character   Mode  :character   Median :23.0   Median :1994-10-15  
FALSE                                        Mean   :23.4   Mean   :1992-10-28  
FALSE                                        3rd Qu.:26.0   3rd Qu.:2004-06-06  
FALSE                                        Max.   :35.0   Max.   :2018-09-08  
FALSE                                        NA's   :3      NA's   :3

VISUALISER

gg<-ggplot(data=data, aes(x=date_of_first_title, y=age_y, group=gender, color=gender))
gg<-gg + geom_line(size=2)
gg<- gg +scale_color_manual(values=c("#931328", "#3E7BBC"))
#modifier la légende
gg<-gg + theme(legend.position="top")
#ajuster les étiquettes des axes
gg<-gg + scale_x_date(date_breaks = "10 year", date_labels = "%Y")
#modifier le thème
gg<-gg +theme(panel.border = element_blank(),
              panel.background = element_rect(fill = "#FFFFFF", colour = "#FFFFFF"),
              plot.background = element_rect(fill = "#FFFFFF", colour = "#FFFFFF"),
              panel.grid.major.x= element_line(linetype="dotted", size=0.5, color="#9F9F9F"),
              panel.grid.major.y= element_blank(),
              panel.grid.minor = element_blank(),
              axis.line.y = element_blank(),
              axis.line.x = element_line(linetype="solid", size=1, color="#9F9F9F"),
              axis.ticks.x = element_line(linetype="solid", size=1, color="#9F9F9F"),
              axis.ticks.y = element_blank())
#ajouter les titres
gg<-gg + labs(title= "Grand Chelem: Qu'est-ce qu'on peut constater comme tendance???",
              subtitle=NULL,
              y="Âge moyen à la première victoire",
              x="Années")
gg<-gg + theme(plot.title    = element_text(hjust=0,size=18, color="#5B5B5B"),
               plot.subtitle = element_text(hjust=0,size=12, color="#5B5B5B"),
               axis.title.x  = element_text(hjust=0.5, size=12,angle=360, color="#5B5B5B"),
               axis.title.y  = element_text(hjust=0.5, size=12, angle=90,color="#5B5B5B"),
               axis.text.y   = element_blank(),
               axis.text.x   = element_text(hjust=0.5, size=8, color="#5B5B5B"))

Avec ce graphique, on peut se faire une idée générale de la tendance de l’age à la première victiore, mais ce n’est pas très clair. Il y a trop de variation dans les données pour que le portrait global soit clair. Pour améliorer le tout, on peut regrouper les données en faisant la moyenne des ages des gagnants sur une période de temps. Disons 10 ans.
Voyons ce que ça donne:

PRÉPARER:

gender% #J'ai besion de sélectionner seulement le genre
  select(name, gender)%>%
  distinct()

data%
  mutate(age_y=round(age/365, digits = 0))%>% #modifier l'age pour l'avoir en année
  mutate(tournament_date=date_of_first_title)%>% #avoir le même nom de colonne pour joindre les fichiers
  left_join(gender, by="name")%>%
  mutate(annee=year(date_of_first_title))%>%
  mutate(decennie=0)%>%
  mutate(decennie=ifelse(annee%
  mutate(decennie=ifelse(annee>1970 & annee%
  mutate(decennie=ifelse(annee>1980 & annee%
  mutate(decennie=ifelse(annee>1990 & annee%
  mutate(decennie=ifelse(annee>2000 & annee%
  mutate(decennie=ifelse(annee>2010 & annee%
  group_by(gender, decennie)%>%
  summarise(age_moy=mean(age_y, na.rm = TRUE))%>%
  filter(!is.na(decennie))

data$decennie<-factor(data$decennie,levels = c(60,70, 80, 90, 00, 10))

glimpse(data) #validation du nombre de ligne des données combinées
FALSE Observations: 12
FALSE Variables: 3
FALSE Groups: gender [2]
FALSE $ gender   <chr> "Female", "Female", "Female", "Female", "Female", "Fema…
FALSE $ decennie <fct> 0, 10, 60, 70, 80, 90, 0, 10, 60, 70, 80, 90
FALSE $ age_moy  <dbl> 22.77778, 25.69231, 25.25000, 21.55556, 18.20000, 21.00…
summary(data) #validation des données manquante comme on a fait un left_join
FALSE     gender          decennie    age_moy     
FALSE  Length:12          60:2     Min.   :18.20  
FALSE  Class :character   70:2     1st Qu.:21.82  
FALSE  Mode  :character   80:2     Median :23.48  
FALSE                     90:2     Mean   :23.53  
FALSE                     0 :2     3rd Qu.:25.36  
FALSE                     10:2     Max.   :27.80

VISUALISER

gg<-ggplot(data=data, aes(x=decennie, y=age_moy, group=gender, color=gender))
gg<-gg + geom_line(size=3)
gg<-gg + geom_point(size=6)
gg<- gg +scale_color_manual(values=c("#931328", "#3E7BBC"))
gg<-gg + geom_point(size=5, color="#FFFFFF")
#Ajouter les étiquettes de données
gg<-gg + geom_text(data=data, aes(x=decennie, y=age_moy, label=round(age_moy, digits=0)), size=2.75, vjust=0.5, family="Calibri")
gg<- gg +scale_color_manual(values=c("#931328", "#3E7BBC"))
#modifier la légende
gg<-gg + theme(legend.position="none")
#ajuster les étiquettes des axes
gg<-gg + scale_y_continuous(breaks=seq(15, 35, 5),limits = c(15, 35))
#modifier le thème
gg<-gg +theme(panel.border = element_blank(),
              panel.background = element_rect(fill = "#FFFFFF", colour = "#FFFFFF"),
              plot.background = element_rect(fill = "#FFFFFF", colour = "#FFFFFF"),
              panel.grid.major.x= element_line(linetype="dotted", size=0.5, color="#9F9F9F"),
              panel.grid.major.y= element_blank(),
              panel.grid.minor = element_blank(),
              axis.line.y = element_blank(),
              axis.line.x = element_line(linetype="solid", size=1, color="#9F9F9F"),
              axis.ticks.x = element_line(linetype="solid", size=1, color="#9F9F9F"),
              axis.ticks.y = element_blank())
#ajouter les titres
gg<-gg + labs(title= "Grand Chelem: Qu'est-ce qui c'est passé dans les années 80?",
              subtitle="L'âge moyen à laquel les joueurs ont remportés leur premier titre est passé de 28 à 22 ans pour les\nhommes et de 25 à 18 ans pour les femmes entre les années 60 et les années 80. L'age moyen est\nrevenu à 27 ans pour les hommes et 26 ans pour les femmes dans les anées 2010",
              y="Âge moyen à la première victoire",
              x="Années")
gg<-gg + theme(plot.title    = element_text(hjust=0,size=20, color="#5B5B5B"),
               plot.subtitle = element_text(hjust=0,size=12, color="#5B5B5B"),
               axis.title.x  = element_text(hjust=0.5, size=12,angle=360, color="#5B5B5B"),
               axis.title.y  = element_text(hjust=0.5, size=12, angle=90,color="#5B5B5B"),
               axis.text.y   = element_blank(),
               axis.text.x   = element_text(hjust=0.5, size=8, color="#5B5B5B"))

Ce qu’on peut observer:

  • L’âge moyen de la première victoire varie en fonction du temps et était à son minimun dans les années 80.
  • J’ai regroupé les âges moyens pour les hommes et les femmes par période de 10 ans pour pouvoir voir un tendances dans les données. Faire afficher les données de toutes les années individuellement ne nous montrait aucune tendance claire.
  • Il y a une différence entre les hommes et les femmes, les femmes gagnent généralement leur premier titre plus jeune ques les hommes.
  • Par contre, j’ai l’impression qu’il nous manque des éléments pour que l’histoire soit claire. Pourquoi est-ce que l’age à la première victoire diminue dans les années 80?

Est-ce que le nombre de joueurs qu’on considère par décénie est le même?

PRÉPARER:

gender% #J'ai besion de sélectionner seulement le genre
  select(name, gender)%>%
  distinct()

data%
  mutate(age_y=round(age/365, digits = 0))%>% #modifier l'age pour l'avoir en année
  mutate(tournament_date=date_of_first_title)%>% #avoir le même nom de colonne pour joindre les fichiers
  left_join(gender, by="name")%>%
  mutate(annee=year(date_of_first_title))%>%
  mutate(decennie=0)%>%
  mutate(decennie=ifelse(annee%
  mutate(decennie=ifelse(annee>1970 & annee%
  mutate(decennie=ifelse(annee>1980 & annee%
  mutate(decennie=ifelse(annee>1990 & annee%
  mutate(decennie=ifelse(annee>2000 & annee%
  mutate(decennie=ifelse(annee>2010 & annee<=2020, 10, decennie))

by(data, data$decennie, summary)
FALSE data$decennie: 0
FALSE      name            grand_slam        date_of_birth       
FALSE  Length:20          Length:20          Min.   :1971-09-13  
FALSE  Class :character   Class :character   1st Qu.:1979-05-14  
FALSE  Mode  :character   Mode  :character   Median :1981-07-23  
FALSE                                        Mean   :1981-09-06  
FALSE                                        3rd Qu.:1985-09-20  
FALSE                                        Max.   :1988-09-23  
FALSE  date_of_first_title       age            age_y       tournament_date     
FALSE  Min.   :2001-01-27   Min.   : 6285   Min.   :17.00   Min.   :2001-01-27  
FALSE  1st Qu.:2003-03-08   1st Qu.: 7547   1st Qu.:21.00   1st Qu.:2003-03-08  
FALSE  Median :2004-06-06   Median : 8066   Median :22.00   Median :2004-06-06  
FALSE  Mean   :2004-09-26   Mean   : 8421   Mean   :23.15   Mean   :2004-09-26  
FALSE  3rd Qu.:2005-10-15   3rd Qu.: 9410   3rd Qu.:26.25   3rd Qu.:2005-10-15  
FALSE  Max.   :2010-06-05   Max.   :10939   Max.   :30.00   Max.   :2010-06-05  
FALSE     gender              annee         decennie
FALSE  Length:20          Min.   :2001   Min.   :0  
FALSE  Class :character   1st Qu.:2003   1st Qu.:0  
FALSE  Mode  :character   Median :2004   Median :0  
FALSE                     Mean   :2004   Mean   :0  
FALSE                     3rd Qu.:2005   3rd Qu.:0  
FALSE                     Max.   :2010   Max.   :0  
FALSE -------------------------------------------------------- 
FALSE data$decennie: 10
FALSE      name            grand_slam        date_of_birth       
FALSE  Length:16          Length:16          Min.   :1982-02-25  
FALSE  Class :character   Class :character   1st Qu.:1985-02-11  
FALSE  Mode  :character   Mode  :character   Median :1989-02-28  
FALSE                                        Mean   :1989-03-08  
FALSE                                        3rd Qu.:1992-02-09  
FALSE                                        Max.   :1997-10-16  
FALSE  date_of_first_title       age            age_y       tournament_date     
FALSE  Min.   :2011-06-04   Min.   : 7307   Min.   :20.00   Min.   :2011-06-04  
FALSE  1st Qu.:2012-07-15   1st Qu.: 8260   1st Qu.:23.00   1st Qu.:2012-07-15  
FALSE  Median :2015-03-11   Median : 9614   Median :26.50   Median :2015-03-11  
FALSE  Mean   :2015-01-04   Mean   : 9434   Mean   :25.88   Mean   :2015-01-04  
FALSE  3rd Qu.:2017-07-02   3rd Qu.:10305   3rd Qu.:28.25   3rd Qu.:2017-07-02  
FALSE  Max.   :2018-09-08   Max.   :12252   Max.   :34.00   Max.   :2018-09-08  
FALSE     gender              annee         decennie 
FALSE  Length:16          Min.   :2011   Min.   :10  
FALSE  Class :character   1st Qu.:2012   1st Qu.:10  
FALSE  Mode  :character   Median :2014   Median :10  
FALSE                     Mean   :2015   Mean   :10  
FALSE                     3rd Qu.:2017   3rd Qu.:10  
FALSE                     Max.   :2018   Max.   :10  
FALSE -------------------------------------------------------- 
FALSE data$decennie: 60
FALSE      name            grand_slam        date_of_birth       
FALSE  Length:9           Length:9           Min.   :1934-11-02  
FALSE  Class :character   Class :character   1st Qu.:1942-07-16  
FALSE  Mode  :character   Mode  :character   Median :1943-07-10  
FALSE                                        Mean   :1942-06-16  
FALSE                                        3rd Qu.:1944-05-23  
FALSE                                        Max.   :1946-03-01  
FALSE  date_of_first_title       age            age_y       tournament_date     
FALSE  Min.   :1968-06-08   Min.   : 8460   Min.   :23.00   Min.   :1968-06-08  
FALSE  1st Qu.:1968-07-05   1st Qu.: 8992   1st Qu.:25.00   1st Qu.:1968-07-05  
FALSE  Median :1968-09-07   Median : 9421   Median :26.00   Median :1968-09-07  
FALSE  Mean   :1969-01-11   Mean   : 9706   Mean   :26.67   Mean   :1969-01-11  
FALSE  3rd Qu.:1969-01-26   3rd Qu.: 9691   3rd Qu.:27.00   3rd Qu.:1969-01-26  
FALSE  Max.   :1970-07-04   Max.   :12273   Max.   :34.00   Max.   :1970-07-04  
FALSE     gender              annee         decennie 
FALSE  Length:9           Min.   :1968   Min.   :60  
FALSE  Class :character   1st Qu.:1968   1st Qu.:60  
FALSE  Mode  :character   Median :1968   Median :60  
FALSE                     Mean   :1969   Mean   :60  
FALSE                     3rd Qu.:1969   3rd Qu.:60  
FALSE                     Max.   :1970   Max.   :60  
FALSE -------------------------------------------------------- 
FALSE data$decennie: 70
FALSE      name            grand_slam        date_of_birth       
FALSE  Length:21          Length:21          Min.   :1937-08-03  
FALSE  Class :character   Class :character   1st Qu.:1950-07-09  
FALSE  Mode  :character   Mode  :character   Median :1954-06-24  
FALSE                                        Mean   :1952-12-04  
FALSE                                        3rd Qu.:1956-06-06  
FALSE                                        Max.   :1962-12-12  
FALSE  date_of_first_title       age            age_y       tournament_date     
FALSE  Min.   :1971-06-05   Min.   : 6114   Min.   :17.00   Min.   :1971-06-05  
FALSE  1st Qu.:1974-06-15   1st Qu.: 7510   1st Qu.:21.00   1st Qu.:1974-06-15  
FALSE  Median :1976-06-14   Median : 8309   Median :23.00   Median :1976-06-14  
FALSE  Mean   :1976-02-20   Mean   : 8478   Mean   :23.24   Mean   :1976-02-20  
FALSE  3rd Qu.:1978-01-01   3rd Qu.: 9219   3rd Qu.:25.00   3rd Qu.:1978-01-01  
FALSE  Max.   :1980-01-01   Max.   :12724   Max.   :35.00   Max.   :1980-01-01  
FALSE     gender              annee         decennie 
FALSE  Length:21          Min.   :1971   Min.   :70  
FALSE  Class :character   1st Qu.:1974   1st Qu.:70  
FALSE  Mode  :character   Median :1976   Median :70  
FALSE                     Mean   :1976   Mean   :70  
FALSE                     3rd Qu.:1978   3rd Qu.:70  
FALSE                     Max.   :1980   Max.   :70  
FALSE -------------------------------------------------------- 
FALSE data$decennie: 80
FALSE      name            grand_slam        date_of_birth       
FALSE  Length:16          Length:16          Min.   :1954-12-23  
FALSE  Class :character   Class :character   1st Qu.:1960-04-30  
FALSE  Mode  :character   Mode  :character   Median :1965-09-22  
FALSE                                        Mean   :1965-08-05  
FALSE                                        3rd Qu.:1970-09-06  
FALSE                                        Max.   :1973-12-02  
FALSE  date_of_first_title       age            age_y       tournament_date     
FALSE  Min.   :1981-01-03   Min.   : 6033   Min.   :17.00   Min.   :1981-01-03  
FALSE  1st Qu.:1983-03-15   1st Qu.: 6486   1st Qu.:18.00   1st Qu.:1983-03-15  
FALSE  Median :1986-09-07   Median : 7116   Median :19.50   Median :1986-09-07  
FALSE  Mean   :1986-05-15   Mean   : 7588   Mean   :20.75   Mean   :1986-05-15  
FALSE  3rd Qu.:1989-09-10   3rd Qu.: 8490   3rd Qu.:23.25   3rd Qu.:1989-09-10  
FALSE  Max.   :1990-09-10   Max.   :11061   Max.   :30.00   Max.   :1990-09-10  
FALSE     gender              annee         decennie 
FALSE  Length:16          Min.   :1981   Min.   :80  
FALSE  Class :character   1st Qu.:1983   1st Qu.:80  
FALSE  Mode  :character   Median :1986   Median :80  
FALSE                     Mean   :1986   Mean   :80  
FALSE                     3rd Qu.:1989   3rd Qu.:80  
FALSE                     Max.   :1990   Max.   :80  
FALSE -------------------------------------------------------- 
FALSE data$decennie: 90
FALSE      name            grand_slam        date_of_birth       
FALSE  Length:20          Length:20          Min.   :1967-10-02  
FALSE  Class :character   Class :character   1st Qu.:1970-07-20  
FALSE  Mode  :character   Mode  :character   Median :1973-07-24  
FALSE                                        Mean   :1974-02-08  
FALSE                                        3rd Qu.:1976-12-03  
FALSE                                        Max.   :1981-09-26  
FALSE  date_of_first_title       age            age_y       tournament_date     
FALSE  Min.   :1991-06-10   Min.   : 5961   Min.   :16.00   Min.   :1991-06-10  
FALSE  1st Qu.:1994-12-06   1st Qu.: 7481   1st Qu.:20.75   1st Qu.:1994-12-06  
FALSE  Median :1997-04-01   Median : 8108   Median :22.00   Median :1997-04-01  
FALSE  Mean   :1996-07-22   Mean   : 8200   Mean   :22.50   Mean   :1996-07-22  
FALSE  3rd Qu.:1998-06-14   3rd Qu.: 8469   3rd Qu.:23.50   3rd Qu.:1998-06-14  
FALSE  Max.   :2000-09-11   Max.   :10967   Max.   :30.00   Max.   :2000-09-11  
FALSE     gender              annee         decennie 
FALSE  Length:20          Min.   :1991   Min.   :90  
FALSE  Class :character   1st Qu.:1995   1st Qu.:90  
FALSE  Mode  :character   Median :1997   Median :90  
FALSE                     Mean   :1996   Mean   :90  
FALSE                     3rd Qu.:1998   3rd Qu.:90  
FALSE                     Max.   :2000   Max.   :90

Donc,

années 60 = 9 joueurs
années 70 = 21 joueurs
années 80 = 16 joueurs
années 90 = 20 joueurs
années 00 = 20 joueurs
années 10 = 16 joueurs

Je pense qu’on peut seulement suspecter les années 60 comme étant aberhant. Rien ne laisse suspecter d’explication pour notre cas des années 80.

Ensuite, comment varie le nombre de nouveau gagnant par décénnie?

PRÉPARER:

gender%
  select(name, gender, year, rolling_win_count)%>%
  mutate(annee=year)%>%
  mutate(decennie=0)%>%
  mutate(decennie=ifelse(annee%
  mutate(decennie=ifelse(annee>1970 & annee%
  mutate(decennie=ifelse(annee>1980 & annee%
  mutate(decennie=ifelse(annee>1990 & annee%
  mutate(decennie=ifelse(annee>2000 & annee%
  mutate(decennie=ifelse(annee>2010 & annee%
  filter(rolling_win_count==1)%>%
  group_by(gender, decennie)%>%
  summarise(somme_new=sum(rolling_win_count, na.rm = TRUE))%>%
  filter(!is.na(decennie))%>%
  select(decennie, gender, somme_new)

gender$decennie<-factor(gender$decennie,levels = c(60,70, 80, 90, 00, 10))

glimpse(gender) #validation du nombre de ligne des données combinées
FALSE Observations: 12
FALSE Variables: 3
FALSE Groups: gender [2]
FALSE $ decennie  <fct> 0, 10, 60, 70, 80, 90, 0, 10, 60, 70, 80, 90
FALSE $ gender    <chr> "Female", "Female", "Female", "Female", "Female", "Fem…
FALSE $ somme_new <dbl> 9, 13, 5, 11, 4, 8, 11, 3, 6, 13, 10, 12
summary(gender) #validation des données manquante comme on a fait un left_join
FALSE  decennie    gender            somme_new    
FALSE  60:2     Length:12          Min.   : 3.00  
FALSE  70:2     Class :character   1st Qu.: 5.75  
FALSE  80:2     Mode  :character   Median : 9.50  
FALSE  90:2                        Mean   : 8.75  
FALSE  0 :2                        3rd Qu.:11.25  
FALSE  10:2                        Max.   :13.00

VISUALISER

gg<-ggplot(data=gender, aes(x=decennie, y=somme_new, group=gender, color=gender))
gg<-gg + geom_line(size=3)
gg<-gg + geom_point(size=6)
gg<- gg +scale_color_manual(values=c("#931328", "#3E7BBC"))
gg<-gg + geom_point(size=5, color="#FFFFFF")
#Ajouter les étiquettes de données
gg<-gg + geom_text(data=gender, aes(x=decennie, y=somme_new, label=round(somme_new, digits=0)), size=2.75, vjust=0.5, family="Calibri")
gg<- gg +scale_color_manual(values=c("#931328", "#3E7BBC"))
gg<-gg + annotate(geom="text", x=1,y=4, label="Femmes", color="#931328", size=4, hjust=1, fontface="bold")
gg<-gg + annotate(geom="text", x=1,y=7, label="Hommes", color="#3E7BBC", size=4, hjust=1, fontface="bold")
#modifier la légende
gg<-gg + theme(legend.position="none")
#ajuster les étiquettes des axes
gg<-gg + scale_y_continuous(breaks=seq(0, 20, 5),limits = c(0, 20))
#modifier le thème
gg<-gg +theme(panel.border = element_blank(),
              panel.background = element_rect(fill = "#FFFFFF", colour = "#FFFFFF"),
              plot.background = element_rect(fill = "#FFFFFF", colour = "#FFFFFF"),
              panel.grid.major.x= element_line(linetype="dotted", size=0.5, color="#9F9F9F"),
              panel.grid.major.y= element_blank(),
              panel.grid.minor = element_blank(),
              axis.line.y = element_blank(),
              axis.line.x = element_line(linetype="solid", size=1, color="#9F9F9F"),
              axis.ticks.x = element_line(linetype="solid", size=1, color="#9F9F9F"),
              axis.ticks.y = element_blank())
#ajouter les titres
gg<-gg + labs(title= "Grand Chelem: Comment à évoluer le nombre de nouveaux gagnant?",
              subtitle=NULL,
              y="Nombre de nouveaux gagnants",
              x="Années")
gg<-gg + theme(plot.title    = element_text(hjust=0,size=18, color="#5B5B5B"),
               plot.subtitle = element_text(hjust=0,size=12, color="#5B5B5B"),
               axis.title.x  = element_text(hjust=0.5, size=12,angle=360, color="#5B5B5B"),
               axis.title.y  = element_text(hjust=0.5, size=12, angle=90,color="#5B5B5B"),
               axis.text.y   = element_blank(),
               axis.text.x   = element_text(hjust=0.5, size=8, color="#5B5B5B"))

Peu de nouveau gagnant du côté des femmes dans les années 80 et une moins forte diminution du côté des hommes. Ça va à l’encontre de ce qu’on a constaté pour l’age à la première victoire…

Dernière question, comment évolu l’age moyen de tous les participants par décénnie?

PRÉPARER:

players%
  filter(!outcome %in% "Absent")%>%
  mutate(name=player)%>%
  mutate(annee=year)%>%
  mutate(decennie=0)%>%
  mutate(decennie=ifelse(annee%
  mutate(decennie=ifelse(annee>1970 & annee%
  mutate(decennie=ifelse(annee>1980 & annee%
  mutate(decennie=ifelse(annee>1990 & annee%
  mutate(decennie=ifelse(annee>2000 & annee%
  mutate(decennie=ifelse(annee>2010 & annee%
  select(name, gender, decennie)%>%
  left_join(data_age, by="name")

Il semblerait qu’on ne dispose pas de la date de naissance de tous les joueurs, je suspecte qu’on a pas l’information pour les joueurs qui n’ont pas gagné…

Donc, les données ne nous permettent pas de comprendre pourquoi est-ce que l’age moyen à la première victoire est inérieur pour les années 80.

Vous voulez en apprendre plus sur ma démarche? Allez écouter l’épisode de podcast dans lequel j’explique mes réflexions pour arriver à ce résultat.

Une réflexion sur “TyT2019|W15: Left_join ou Right_join? On a le choix mais il faut valider!

  1. Pingback: Podcast ADV #4: Quand on s’amuse à fouiller dans les données pour comprendre | Johanie Fournier, agr.

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s