8  Données de la Banque mondiale

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

Plan du chapitre :

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

Tout d’abord, nous chargeons l’ensemble des données de la Banque mondiale. Nous ne considérons que le sous-ensemble qui a des valeurs définies à la fois pour espérance.de.vie et pour 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, elles se rapportent au 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 == "Koweït" & 1991 <= année & année <= 1995,
  .(pays, année, population)]
     pays année population
1: Koweït  1991    1999651
2: Koweït  1992         NA
3: Koweït  1993         NA
4: Koweït  1994         NA
5: Koweït  1995    1586123

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

not.na[is.na(population), population := 1700000]
not.na[
  pays == "Koweït" & 1991 <= année & année <= 1995,
  .(pays, année, population)]
     pays année population
1: Koweït  1991    1999651
2: Koweït  1992    1700000
3: Koweït  1993    1700000
4: Koweït  1994    1700000
5: Koweït  1995    1586123

Nous définissons ensuite la fonction suivante 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")))
}

Le code ci-dessus est un exemple de la méthode rajouter une colonne et facettes. Notez que les niveaux des facteurs détermineront l’ordre des facettes dans l’affichage. Nous définissons ci-dessous trois fonctions, 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 qu’un clic 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 simplement ajouter 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, une bonne idée pour économiser de l’espace dans un ggplot avec des facettes.

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 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

Nous ajoutons ci-dessous des rectangles pour sélectionner les années, et des courbes 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 :

vis.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"))
vis.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 cliquer sur un point doit désélectionner ce pays.
  • Ajoutez des étiquettes de texte au graphique de la série temporelle situé à droite, avec le nom de chaque pays. L’étiquette ne doit apparaître que lorsque le pays est sélectionné, et 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 au nuage de points, avec le nom de chaque pays. L’étiquette ne doit apparaître que lorsque le pays est sélectionné, et disparaître lorsqu’on clique sur l’étiquette.

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