TyT2019|W11: Divergent Bar Chart ou comment utiliser un histogramme pour montrer des différences par rapport à la moyenne

Pour le #Tidytiuesday de cette semaine, nous avons accès à des données qui notent les jeux de société parus entre 1950 et 2016. Il y a pas moins de 10 532 jeux de société qui ont été crées, de quoi s’ammuser! Les données brutes proviennent du site Board Game Geek.

Les graphiques présentés dans l’article font un bon travail pour montrer les grandes tendances qu’on peut ressortir de ces données. J’aime particulièrement les titres acrocheurs. On peut donc y apprendre que c’est plus agréable d’être 3 joueurs et qu’on peut avoir du plaisir pendant 5 heures.

Je suis moins certaine par contre de l’évolution des évaluations dans le temps. Les données fournies ne nous donnent pas une liste d’évaluations dans le temps, c’est-à-dire plusieurs mesures de l’évaluation d’un jeu dans le temps. On a seulement une moyenne de l’évaluation du jeu et sa date de création… Donc, je ne suis pas certaine qu’on peut présenter l’évolution des évaluations dans le temps. D’une certaine façon, c’est normal que les jeux créés récemment aient une meilleure note que ceux crées en 1947. Je suis presque sûr que le site Board Game Geek ne permettait pas les évaluations cette année là… Donc, je ne crois pas vraiment pouvoir utiliser les années pour pousser plus loin la visualisation des évaluations. Je préfère me concentrer sur les catégories, d’une part parce que l’article n’aborde pas cet aspect et que je suis curieuse mais aussi parce que je pense que c’est un beau défi de traitement de données à réaliser.

IMPORTER

board_games <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-03-12/board_games.csv")

EXPLORER

glimpse(board_games)
## Observations: 10,532
## Variables: 22
## $ game_id        <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
## $ description    <chr> "Die Macher is a game about seven sequential po...
## $ image          <chr> "//cf.geekdo-images.com/images/pic159509.jpg", ...
## $ max_players    <int> 5, 4, 4, 4, 6, 6, 2, 5, 4, 6, 7, 5, 4, 4, 6, 4,...
## $ max_playtime   <int> 240, 30, 60, 60, 90, 240, 20, 120, 90, 60, 45, ...
## $ min_age        <int> 14, 12, 10, 12, 12, 12, 8, 12, 13, 10, 13, 12, ...
## $ min_players    <int> 3, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 3,...
## $ min_playtime   <int> 240, 30, 30, 60, 90, 240, 20, 120, 90, 60, 45, ...
## $ name           <chr> "Die Macher", "Dragonmaster", "Samurai", "Tal d...
## $ playing_time   <int> 240, 30, 60, 60, 90, 240, 20, 120, 90, 60, 45, ...
## $ thumbnail      <chr> "//cf.geekdo-images.com/images/pic159509_t.jpg"...
## $ year_published <int> 1986, 1981, 1998, 1992, 1964, 1989, 1978, 1993,...
## $ artist         <chr> "Marcus Gschwendtner", "Bob Pepper", "Franz Voh...
## $ category       <chr> "Economic,Negotiation,Political", "Card Game,Fa...
## $ compilation    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ designer       <chr> "Karl-Heinz Schmiel", "G. W. \"Jerry\" D'Arcey"...
## $ expansion      <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "Elfengold,...
## $ family         <chr> "Country: Germany,Valley Games Classic Line", "...
## $ mechanic       <chr> "Area Control / Area Influence,Auction/Bidding,...
## $ publisher      <chr> "Hans im Glück Verlags-GmbH,Moskito Spiele,Vall...
## $ average_rating <dbl> 7.66508, 6.60815, 7.44119, 6.60675, 7.35830, 6....
## $ users_rated    <int> 4498, 478, 12019, 314, 15195, 73, 2751, 186, 12...

Nous disposons de plusieurs variables, mais pour ce que j’ai en tête j’ai besion que des catégories et de la moyenne des évaluations. Donc, je ne pousserai pas plus loin mon analyse du reste des variables de ces données.

PRÉPARER

rate<-board_games%>%
  select(category,average_rating)%>% # conserver seulement les 2 colonnes pertinentes pour l'analyse
    mutate(category = str_replace_all(category, "\\/",","))%>% #uniformiser les séparateurs de catégories
    separate(category, c("no1","no2","no3","no4","no5","no6","no7","no8","no9","no10","no11","no12","no13","no14",
                         "no15"), sep=",")%>% #séparer les catégories en différents colonnes
  gather(key="No", value="Categories", -average_rating)%>%
  select(Categories,average_rating) %>%
  #summarise(mean=mean(average_rating)) # la note moyenne est de 6.37
  mutate(divergence=average_rating-6.37)%>%
  group_by(Categories)%>%
  summarise(average_div_rate=mean(divergence))

top_10<-rate%>%
  top_n(10, average_div_rate) #sélectionner les 10 meilleures évaluations

bottom_10<-rate%>%
  top_n(-10, average_div_rate)#sélectionner les 10 pires évaluations

rate<-top_10%>%
  rbind(bottom_10)

VISUALISER

#Graphique
gg<-ggplot(data=rate, aes(x=reorder(Categories, average_div_rate), y=average_div_rate, fill=Categories))
gg<-gg + geom_bar(stat="identity", width=0.85)
gg<-gg + coord_flip()
gg<-gg + scale_fill_manual(values = c("#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9","#A9A9A9","#A9A9A9","#A9A9A9","#A9A9A9","#A9A9A9","#A9A9A9","#A9A9A9","#A9A9A9","#A9A9A9","#A44A3F","#090446","#A9A9A9"))
#Ajouter les étiquettes de données
gg<-gg + annotate(geom="text", x=1,y=-0.84, label="5.6", color="#A44A3F", size=4, hjust=0, fontface="bold")
gg<-gg + annotate(geom="text", x=20,y=0.85, label="7.2", color="#090446", size=4, hjust=0, fontface="bold")
gg<-gg + annotate(geom="text", x=1,y=0.02, label="Trivia", color="#A9A9A9", size=5, hjust=0)
gg<-gg + annotate(geom="text", x=2,y=0.02, label="Children's Game", color="#A9A9A9", size=5, hjust=0)
gg<-gg + annotate(geom="text", x=3,y=0.02, label="Memory", color="#A9A9A9", size=5, hjust=0)
gg<-gg + annotate(geom="text", x=4,y=0.02, label="Math", color="#A9A9A9", size=5, hjust=0)
gg<-gg + annotate(geom="text", x=5,y=0.02, label="Radio Theme", color="#A9A9A9", size=5, hjust=0)
gg<-gg + annotate(geom="text", x=6,y=0.02, label="TV", color="#A9A9A9", size=5, hjust=0)
gg<-gg + annotate(geom="text", x=7,y=0.02, label="Movies", color="#A9A9A9", size=5, hjust=0)
gg<-gg + annotate(geom="text", x=8,y=0.02, label="Electronic", color="#A9A9A9", size=5, hjust=0)
gg<-gg + annotate(geom="text", x=9,y=0.02, label="Music", color="#A9A9A9", size=5, hjust=0)
gg<-gg + annotate(geom="text", x=10,y=0.02, label="Word Game", color="#A9A9A9", size=5, hjust=0)
gg<-gg + annotate(geom="text", x=11,y=-0.02, label="Age of Reason", color="#A9A9A9", size=5, hjust=1)
gg<-gg + annotate(geom="text", x=12,y=-0.02, label="Post-Napoleonic", color="#A9A9A9", size=5, hjust=1)
gg<-gg + annotate(geom="text", x=13,y=-0.02, label="Miniature", color="#A9A9A9", size=5, hjust=1)
gg<-gg + annotate(geom="text", x=14,y=-0.02, label="Civilization", color="#A9A9A9", size=5, hjust=1)
gg<-gg + annotate(geom="text", x=15,y=-0.02, label="American Revolutionary War", color="#A9A9A9", size=5, hjust=1)
gg<-gg + annotate(geom="text", x=16,y=-0.02, label="American Indian Wars", color="#A9A9A9", size=5, hjust=1)
gg<-gg + annotate(geom="text", x=17,y=-0.02, label="Book", color="#A9A9A9", size=5, hjust=1)
gg<-gg + annotate(geom="text", x=18,y=-0.02, label="Civil War", color="#A9A9A9", size=5, hjust=1)
gg<-gg + annotate(geom="text", x=19,y=-0.02, label="Expansion for Base-game", color="#A9A9A9", size=5, hjust=1)
gg<-gg + annotate(geom="text", x=20,y=-0.02, label="Vietman War", color="#A9A9A9", size=5, hjust=1)
#modifier la légende
gg<-gg + theme(legend.position="none")
#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.y= element_blank(),
              panel.grid.major.x= element_blank(),
              panel.grid.minor = element_blank(),
              axis.line = element_blank(),
              axis.ticks.y = element_blank(),
              axis.ticks.x = element_blank())
#ajouter les titres
gg<-gg + labs(title="Which categories of board games are the best and worst rated?",
              subtitle=NULL,
              y=NULL,
              x=NULL)
gg<-gg + theme(plot.title    = element_text(hjust=0.5,size=26, color="#8B8B8B", face="bold"),
               plot.subtitle = element_text(hjust=0,size=18, color="#8B8B8B"),
               axis.title.y  = element_blank(),
               axis.title.x  = element_blank(),
               axis.text.y   = element_blank(),
               axis.text.x   = element_blank())

J’ai choisi de travailler sur les catégories de jeu de société. Comme les évaluations fournies sont déjà des moyennes, je n’ai pas inclus les années dans mon analyse. Je voulais voir quelles sont les catégories les mieux et les moins biens notés par rapport à la moyenne. Pour y arriver, j’ai travaillé la colonnes des catégories pour séparer toutes les lignes où il y avait plus d’une catégories dans la même cellule. Pour ensuite refaire une table de données qui associe une note avec une catégorie. À partir de là, j’ai pu sousrtaire la note moyenne de l’évaluation de chaque ligne pour connaire la différence par rapport à la moyenne. Le reste c’est une histoire de présentation graphique. Voici ce que ça donne:

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