8  Visualisation des données de la Banque mondiale

Traduction de l’anglais Ch08-WorldBank-facets

Dans ce chapitre, nous allons explorer plusieurs visualisations des données de la Banque mondiale.

Plan du chapitre :

8.1 Chargement des données et définition des fonctions d’aide

Tout d’abord, nous chargeons l’ensemble des données de la Banque mondiale, et nous ne considérons que le sous-ensemble qui a des valeurs non manquantes à la fois pour espérance.de.vie et taux.de.fertilité.

library(animint2)
data(BanqueMondiale, package="animint2fr")
BanqueMondiale$Region <- sub(" (all income levels)", "", BanqueMondiale$region, fixed=TRUE)
library(data.table)
not.na <- data.table(
  BanqueMondiale)[!(is.na(espérance.de.vie) | is.na(taux.de.fertilité))]

Nous allons également tracer la variable population à l’aide d’une légende de taille. Avant de tracer le graphique, nous nous assurerons qu’aucune valeur n’est manquante.

not.na[is.na(not.na$population)]
   iso2c country year fertility.rate life.expectancy population
1:    KW  Kuwait 1992          2.338        72.95266         NA
2:    KW  Kuwait 1993          2.341        73.07373         NA
3:    KW  Kuwait 1994          2.413        73.18724         NA
   GDP.per.capita.Current.USD 15.to.25.yr.female.literacy iso3c
1:                         NA                          NA   KWT
2:                         NA                          NA   KWT
3:                         NA                          NA   KWT
                                           region     capital longitude
1: Middle East & North Africa (all income levels) Kuwait City   47.9824
2: Middle East & North Africa (all income levels) Kuwait City   47.9824
3: Middle East & North Africa (all income levels) Kuwait City   47.9824
   latitude               income        lending                     Region
1:  29.3721 High income: nonOECD Not classified Middle East & North Africa
2:  29.3721 High income: nonOECD Not classified Middle East & North Africa
3:  29.3721 High income: nonOECD Not classified Middle East & North Africa
                            région espérance.de.vie taux.de.fertilité année
1: Moyen-Orient et Afrique du Nord         72.95266             2.338  1992
2: Moyen-Orient et Afrique du Nord         73.07373             2.341  1993
3: Moyen-Orient et Afrique du Nord         73.18724             2.413  1994
     pays PIB.par.habitant.USD alphabétisation                 revenu
1: Koweït                   NA              NA Revenu élevé : nonOCDE
2: Koweït                   NA              NA Revenu élevé : nonOCDE
3: Koweït                   NA              NA Revenu élevé : nonOCDE

Le tableau ci-dessus montre que trois lignes ont des valeurs manquantes pour la variable population. concernant le Koweït entre 1992 et 1994. Le tableau ci-dessous présente les données des années voisines, de 1991 à 1995.

not.na[pays == "Kuwait" & 1991 <= année & année <= 1995]
Empty data.table (0 rows and 24 cols): iso2c,country,year,fertility.rate,life.expectancy,population...

Le tableau ci-dessus montre que la population du Koweït a diminué au cours de la période 1991-1995, ce qui concorde avec la guerre du Golfe survenue à cette époque. Nous remplissons les valeurs manquantes ci-dessous.

not.na[is.na(population), population := 1700000]
not.na[pays == "Kuwait" & 1991 <= année & année <= 1995]
Empty data.table (0 rows and 24 cols): iso2c,country,year,fertility.rate,life.expectancy,population...

Ensuite, nous définissons la fonction d’aide suivante, qui sera utilisée pour ajouter des colonnes aux ensembles de données afin d’affecter des geoms aux facettes.

FACETS <- function(df, top, side){
  data.frame(df,
             top=factor(top, c("Taux de fertilité", "Années")),
             side=factor(side, c("Années", "Espérance de vie")))
}

Notez que les niveaux des facteurs spécifieront l’ordre des facettes dans le ggplot. Ceci est un exemple de l’idiome addColumn then facet . Nous définissons ci-dessous trois fonctions d’aide, une pour chaque facette.

TS.RIGHT <- function(df)FACETS(df, "Années", "Espérance de vie")
SCATTER <- function(df)FACETS(df, "Taux de fertilité", "Espérance de vie")
TS.ABOVE <- function(df)FACETS(df, "Taux de fertilité", "Années")

8.2 Premier graphique de la série temporelle

Tout d’abord, nous définissons un ensemble de données avec une ligne pour chaque année, que nous utiliserons pour sélectionner les années à l’aide d’un geom_tallrect en arrière-plan.

années <- unique(not.na[, .(année)])

Nous définissons le ggplot avec un geom_tallrect en arrière-plan, et un geom_line pour les séries temporelles.

ts.right <- ggplot()+
  geom_tallrect(aes(
    xmin=année-1/2, xmax=année+1/2),
    clickSelects="année",
    data=TS.RIGHT(années), alpha=1/2)+
  geom_line(aes(
    année, espérance.de.vie, group=pays, colour=Region),
    clickSelects="pays",
    data=TS.RIGHT(not.na), size=4, alpha=3/5)
ts.right

Remarquez que nous avons spécifié clickSelects=année pour qu’un clic sur un tallrect modifie l’année sélectionnée, et clickSelects=pays pour que le fait de cliquer sur une ligne sélectionne ou désélectionne un pays. Notez également que nous avons utilisé TS.RIGHT pour identifier les colonnes que nous utiliserons dans la spécification des facettes (section suivante).

8.3 Ajouter une facette de nuage de points

Nous commençons par ajouter simplement des facettes au graphique de la série temporelle précédente.

ts.facet <- ts.right+
  theme_bw()+
  theme(panel.margin=grid::unit(0, "lines"))+
  facet_grid(side ~ top, scales="free")+
  xlab("")+
  ylab("")
ts.facet

Nous définissons panel.margin à 0, ce qui est toujours une bonne idée pour économiser de l’espace dans un ggplot avec des facettes. Dans un des exemples tiré de, dans un exemple de l’idiome addColumn then facet, nous utilisons scales="free" et nous masquons les étiquettes des axes . Pour les remplacer, nous utilisons le libellé de la facette pour indiquer la variable encodée sur chaque axe. Ci-dessous, nous ajoutons une facette de nuage de points avec un point pour chaque année et chaque pays.

ts.scatter <- ts.facet+
  theme_animint(width=600)+
  geom_point(aes(
    taux.de.fertilité, espérance.de.vie,
    colour=Region, size=population,
    key=pays), # key aesthetic for animated transitions!
    clickSelects="pays",
    showSelected="année",
    data=SCATTER(not.na))+
  scale_size_animint(pixel.range=c(2, 20), breaks=10^(9:5))
ts.scatter

Remarquez comment nous utilisons scale_size_animint pour spécifier l’échelle des tailles en pixels, et les intervalles (breaks) dans la légende. Notez également que nous utilisons SCATTER pour spécifier les colonnes top et side qui sont utilisées dans la spécification de la facette. Nous affichons également ce ggplot de manière interactive ci-dessous.

animint(ts.scatter)

Notez que la sélection unique est utilisée par défaut pour l’année et le pays.

8.4 Ajout d’une autre facette pour les séries temporelles

Ci-dessous, nous ajoutons des widerects pour sélectionner les années, et des chemins d’accès (“path”) pour afficher le taux de fertilité.

scatter.both <- ts.scatter+
  geom_widerect(aes(
    ymin=année-1/2, ymax=année+1/2),
    clickSelects="année",
    data=TS.ABOVE(années), alpha=1/2)+
  geom_path(aes(
    taux.de.fertilité, année, group=pays, colour=Region),
    clickSelects="pays",
    data=TS.ABOVE(not.na), size=4, alpha=3/5)
scatter.both

Notez que TS.ABOVE a été utilisé pour spécifier les colonnes des facettes top et side. Nous affichons une version interactive ci-dessous.

viz.scatter.both <- animint(
  title="Données de la Banque mondiale (multiple selection, facets)",
  scatterBoth=scatter.both+
    theme_animint(width=1000, height=800),
  duration=list(année=1000),
  time=list(variable="année", ms=3000),
  first=list(année=1975, pays=c("United States", "Vietnam")),
  selector.types=list(pays="multiple"))
viz.scatter.both

8.5 Résumé du chapitre et exercices

Nous avons montré comment créer une visualisation multicouche et multipanneaux (mais à graphique unique) des données de la Banque mondiale.

Exercices :

  • Sur chaque graphique de série temporelle, ajoutez un point dont la taille est proportionnelle à la population, comme dans le nuage de points. Les points ne doivent apparaître que lorsque le pays est sélectionné, et un clic sur les points doit désélectionner ce pays.
  • Ajoutez des étiquettes de texte au graphique de la série temporelle situé à droite, avec les noms de chaque pays. Chaque étiquette ne doit apparaître que lorsque le pays est sélectionné, et doit disparaître lorsqu’on clique sur l’étiquette.
  • Ajoutez une étiquette de texte au nuage de points pour indiquer l’année sélectionnée.
  • Ajoutez des étiquettes de texte au nuage de points, avec des noms pour chaque pays. Chaque étiquette ne doit apparaître que lorsque le pays est sélectionné, et doit disparaître lorsqu’on clique sur l’étiquette.

Le chapitre 9 présente comment visualiser les données sur les vélos à Montréal.