TyT2019|W28: Données factorielles et ‘Alluvial diagram’

Qui aime le socceur féminin? Je dois avouer que je ne suis pas une grande fan de sport, mais c’est vrai que ça apporte une infinité de possibilité pour visualiser du data donc ça a le mérite de capter mon attention. Au menu du #Tidytuesday de cette semaine, des données factorielles à réorganiser dans le bon ordre et un alluvial diagram pas banal pour créer une viz assez originale merci (voir un exemple et une description de ce type de visuel ici).

CONTEXTE

Selon wikipedia: “La Coupe du Monde Féminine de la FIFA est une compétition de soccer internationale disputée par les équipes nationales féminines seniors des membres de la Fédération Internationale de Football Association (FIFA), l’instance dirigeante internationale de ce sport. La compétition a lieu tous les quatre ans depuis 1991, date à laquelle s’est déroulé en Chine le tournoi inaugural, alors appelé Championnat du monde de football féminin FIFA. Selon le format actuel du tournoi, les équipes nationales se disputent 23 places dans une phase de qualification de trois ans. L’équipe du pays hôte est automatiquement inscrite à la 24e place. Le tournoi proprement dit, appelé alternativement Finale de la Coupe du Monde, est disputé sur des sites du pays hôte sur une période d’environ un mois.

Les huit tournois de la Coupe du Monde Féminine de la FIFA ont été remportés par quatre équipes nationales. Les États-Unis ont remporté quatre victoires, dont la dernière en 2019. Les autres vainqueurs sont l’Allemagne, avec deux titres; et le Japon et la Norvège avec un titre chacun.”

OBJECTIFS

1) Changer le format des données pour passer d’un format factoriel à un format utilisable pour la viz de cette semaine
2) Me familiariser avec le package ggalluvial pour créer un alluvial diagram à l’aide de ggplot
3) Visualiser la provenande des équipes gagnantes en fontion de l’équipe perdant contre lesquels elles sont compétitionnées

IMPORTER

wwc_outcomes <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-07-09/wwc_outcomes.csv")
FALSE Parsed with column specification:
FALSE cols(
FALSE   year = col_double(),
FALSE   team = col_character(),
FALSE   score = col_double(),
FALSE   round = col_character(),
FALSE   yearly_game_id = col_double(),
FALSE   team_num = col_double(),
FALSE   win_status = col_character()
FALSE )
codes <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-07-09/codes.csv")
FALSE Parsed with column specification:
FALSE cols(
FALSE   country = col_character(),
FALSE   team = col_character()
FALSE )

EXPLORER

glimpse(wwc_outcomes)
## Observations: 568
## Variables: 7
## $ year           <dbl> 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1…
## $ team           <chr> "CHN", "NOR", "DEN", "NZL", "JPN", "BRA", "GER", …
## $ score          <dbl> 4, 0, 3, 0, 0, 1, 4, 0, 2, 3, 0, 5, 4, 0, 2, 2, 0…
## $ round          <chr> "Group", "Group", "Group", "Group", "Group", "Gro…
## $ yearly_game_id <dbl> 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9…
## $ team_num       <dbl> 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1…
## $ win_status     <chr> "Won", "Lost", "Won", "Lost", "Lost", "Won", "Won…
summary(wwc_outcomes)
##       year          team               score           round          
##  Min.   :1991   Length:568         Min.   : 0.000   Length:568        
##  1st Qu.:1999   Class :character   1st Qu.: 0.000   Class :character  
##  Median :2007   Mode  :character   Median : 1.000   Mode  :character  
##  Mean   :2007                      Mean   : 1.614                     
##  3rd Qu.:2015                      3rd Qu.: 2.000                     
##  Max.   :2019                      Max.   :13.000                     
##  yearly_game_id     team_num    win_status       
##  Min.   : 1.00   Min.   :1.0   Length:568        
##  1st Qu.: 9.00   1st Qu.:1.0   Class :character  
##  Median :18.00   Median :1.5   Mode  :character  
##  Mean   :19.61   Mean   :1.5                     
##  3rd Qu.:27.00   3rd Qu.:2.0                     
##  Max.   :52.00   Max.   :2.0
glimpse(codes)
## Observations: 212
## Variables: 2
## $ country <chr> "Afghanistan", "Albania", "Algeria", "American Samoa", "…
## $ team    <chr> "AFG", "ALB", "ALG", "ASA", "AND", "ANG", "AIA", "ATG", …
summary(codes)
##    country              team          
##  Length:212         Length:212        
##  Class :character   Class :character  
##  Mode  :character   Mode  :character

Pas de données manquante ici dans les données et les variables sont stockées sous le bon format, par contre pour arriver à faire un alluvial diagram il va falloir réorganiser la présentation des données.

PRÉPARER:

data%
  left_join(codes, by = "team") %>%
  mutate(country=ifelse(country=="Brazil", "Brésil", country)) %>%
  mutate(country=ifelse(country=="Germany", "Allemagne", country)) %>%
  mutate(country=ifelse(country=="Japan", "Japon", country)) %>%
  mutate(country=ifelse(country=="Norway", "Norvège", country)) %>%
  mutate(country=ifelse(country=="Sweden", "Suède", country)) %>%
  mutate(country=ifelse(country=="United States", "États-Unis", country)) %>%
  mutate(country=ifelse(country=="North Korea", "Corée du Nord", country)) %>%
  mutate(country=ifelse(country=="England", "Angleterre", country)) %>%
  arrange(year,yearly_game_id, team_num) %>%
  mutate(equipe_gagante=country) %>%
  mutate(equipe_perdante=lead(country)) %>%
  filter(!is.na(equipe_perdante)) %>%
  select(equipe_gagante, equipe_perdante) %>%
  group_by(equipe_gagante, equipe_perdante) %>%
  summarise(freq=n()) %>%
  filter(freq>4) %>%
  ungroup() %>%
  mutate(equipe_gagante = factor(equipe_gagante,
                        levels = c("Brésil", "Canada", "Allemagne",
                                   "Japon", "Norvège", "Suède",
                                   "États-Unis")))

VISUALISER

#Graphique

#install.packages("ggalluvial")
#library(ggalluvial)

gg<-ggplot(data=data, aes(axis1 = equipe_gagante, axis2 = equipe_perdante, y=freq))
gg<-gg + geom_alluvium(aes(fill = equipe_gagante), width = 1/7)
gg<-gg + geom_stratum(width = 1/7, alpha=0.5, color = "black")
gg<-gg + geom_text(stat = "stratum", label.strata = TRUE)
gg<-gg + scale_fill_manual(values = c("#736F6E", "#736F6E", "#018E42","#736F6E", "#736F6E", "#736F6E", "#736F6E"))
#ajuster les axes
gg<-gg + scale_x_discrete(limits = c("Équipe Gagnante", "Équipe Perdante"), expand = c(.05, .05), position = "top")
#modifier la légende
gg<-gg + theme(legend.position="none")
#modifier le thème
gg<-gg +theme(panel.border = element_blank(),
              panel.background = element_blank(),
              plot.background = element_blank(),
              panel.grid.major.y= element_blank(),
              panel.grid.major.x= element_blank(),
              panel.grid.minor = element_blank(),
              axis.line = element_blank(),
              axis.ticks= element_blank())
#ajouter les titres
gg<-gg + labs(title="L'allemagne gagne souvent.... mais pas les bons matchs!\n",
              subtitle="L'équipe nationale féminine de la FIFA de l'Allemagne a gagnée 17 matchs au cours des 28 dernières années comparativement à 11 pour l'équipe des\nÉtats-Unis. Malheureusement, l'Allemagne n'a pas gagnée suffisament de match en finale puisqu'elles ont remportées seument 2 Coupes du Monde\ncomparativement à 4 pour les États-Unis.\n\n",
              y=" ",
              x=" ")
gg<-gg + theme(plot.title    = element_text(hjust=0,size=26, color="#018E42", face="bold"),
               plot.subtitle = element_text(hjust=0,size=12, color="#736F6E"),
               axis.title.y  = element_blank(),
               axis.title.x  = element_blank(),
               axis.text.y   = element_blank(),
               axis.text.x   = element_text(hjust=0.5, size=12, color="#000000"))

 

Voici ce que ça donne:

 

alluvial fra FINAL

Tu veux en savoir plus sur ma démarche? Va écouter l’épisode de podcast dans lequel j’explique mes réflexions pour arriver à ce résultat.

Une réflexion sur “TyT2019|W28: Données factorielles et ‘Alluvial diagram’

  1. Pingback: Podcast ADV #8: Au-delà de la viz, il ne faut pas oublier l’analyse des données! | 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