Cette semaine a été importante pour moi, parce que j’ai commencé un nouveau Master en Modélisation en Ecologie, donc c’était important pour moi de rendre hommage à quelqu’un qui m’a inspiré : Hans Roseling.
Un bref résumé de sa biographie : Hans Roseling était un médecin suédois et plus important pour moi, un statisticien (en fait il était épidémiologiste, mais ils font beaucoup de statistiques) et un avaleur de sabre. Il a également créé une fondation qui vise à aider les gens à mieux comprendre les statistiques.
Un jour, pendant ma Licence, je suis tombé sur un de ses Ted Talk intitulé : The best stats you’ve ever seen (NDT : Les meilleures stats que vous ayez jamais vues) . Cet conférence a changé ma façon de voir le monde. Cela m’a rendu plus optimiste quant à l’avenir de notre espèce, même si nous avons un nombre énorme de défis à relever. Si vous n’avez pas regardé une de ses conférences, arrêtez tout et regardez en une !
Sa conférence m’a complètement époustouflé. Si vous l’avez aimé aussi, vous devriez regarder un de ses documentaires : Don’t Panic - The Truth about Population (NDT : Ne Paniquez Pas - La vérité sur la Population).
Depuis, je sais que je veux utiliser les statistiques pour mieux comprendre notre monde. Bien sûr, je suis toujours passionné par les sciences de la mer. C’est pourquoi je veux utiliser des méthodes statistiques pour mieux comprendre le fonctionnement des communautés marines.
C’est ainsi que j’entame un nouveau master en modélisation. C’est pourquoi je voudrais rendre hommage à Hans Roseling. Quoi de mieux que d’utiliser certaines de ses données de Gapminder et de faire des graphiques animés cool ?
Alors c’est parti ! J’ai déjà préparé un nouvel ensemble de données inspiré par le brillant package R de Jennifer Bryan gapminder. Ce sera l’occasion de mettre en valeur quelques fonctionnalités de gganimate
!
Tout d’abord, je charge quelques library
pratiques et ma propre version du jeu de données gapminder
.
library(tidyverse)
library(gganimate)
theme_set(theme_bw())
load("gapminder_data.RData")
glimpse(gapminder)
## Observations: 39,928
## Variables: 8
## $ country <fct> Afghanistan, Afghanistan, Afghanistan, Afghanistan, Afghani…
## $ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia,…
## $ year <dbl> 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809,…
## $ fertility <dbl> 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,…
## $ childMort <dbl> 469, 469, 469, 469, 469, 469, 470, 470, 470, 470, 470, 470,…
## $ lifeExp <dbl> 28.2, 28.2, 28.2, 28.2, 28.2, 28.2, 28.1, 28.1, 28.1, 28.1,…
## $ pop <dbl> 3280000, 3280000, 3280000, 3280000, 3280000, 3280000, 32800…
## $ gdpPercap <dbl> 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 604, 604,…
Ce jeu de données dispose de deux nouvelles variables par rapport au package gapminder
.
- childMort
le nombre d’enfants âgés de moins de 5 ans morts pour 1 000 naissances ;
- fertility
le nombre d’enfants par femme.
Faisons quelques graphiques animés ! Tout d’abord, je veux recréer l’un des graphiques animés les plus connus : commençons avec l’espérence de vie à la naissance en fonction du revenu.
p_1 <- ggplot(gapminder, aes(x = gdpPercap, y = lifeExp)) +
geom_point(aes(color = continent, size = pop)) +
scale_color_manual(name = "Continent", values = gapminder::continent_colors) +
scale_size(name = "Population") +
scale_x_log10() +
labs(x = "log10($ GDP per capita)",
y = "Life expectancy",
title = paste("Espérance de vie ~ log10(PIB par habitant en $) - Année:", "{round(frame_time, 0)}")) +
transition_time(year)
animate(p_1, fps = 5)
Pour animer le graphique, j’utilise simplement la fonction gganimate::transition_time()
qui permet d’animer le graphique pour chaque valeur de la variable gapminder$year
. De plus cette fonction donne accès à une nouvelle variable frame_time
qui permet de savoir quelle valeur de gapminder$year
est actuellement affiché à l’écran. J’utilise cette variable dans la fonction ggplot2::title()
. Pour animer le tout, j’utilise la fonction gganimate::animate()
qui prend comme argument un objet gganim
et qui me permet de choisir le nombre d’images par seconde affiché dans le rendu final.
Maintenant, intéressons nous à la fertilité en fonction du revenu.
p_2 <- ggplot(gapminder, aes(x = gdpPercap, y = fertility)) +
geom_point(aes(color = continent, size = pop)) +
scale_color_manual(name = "Continent", values = gapminder::continent_colors) +
scale_size(name = "Population") +
scale_x_log10() +
labs(x = "log10(PIB par habitant en $)",
y = "Nombre d'enfants par femme",
title = paste("Fertilité ~ log10(PIB par habitant en $) - Année:", "{round(frame_time, 0)}")) +
transition_time(year)
animate(p_1, fps = 5)
Super ! La fertilité continu de décroitre alors que le PIB par habitant ne cèsse d’augmnenter. Est-ce que nous devons toujours nous attendre à ce que la population bomb explose ? Maintenant, intéressons nous à la mortalité infantile en fonction du PIB.
p_3 <- ggplot(gapminder, aes(x = gdpPercap, y = childMort)) +
geom_point(aes(color = continent, size = pop)) +
scale_color_manual(name = "Continent", values = gapminder::continent_colors) +
scale_size(name = "Population") +
scale_x_log10() +
scale_y_log10() +
labs(x = "log10(PIB par habitant en $)",
y = "log10(Child mortality per 1,000 babies)",
title = paste("log10(Mortalité infantile) ~ log10(PIB par habitant en $) - Année:", "{round(frame_time, 0)}")) +
transition_time(year)
animate(p_3, fps = 5)
De nombreux autres graphiques sont possible avec ce jeu de donnée. Avec gganimate
, quelques lignes de codes suffisent pour annimer des données et rendre hommage à Hans Roseling.