Chapitre 2 Le tidyverse
Dans ce document, nous utiliserons l’extension tidyverse
par (Wickham 2017b). Ce chapitre permettra d’introduire l’extension tidyverse
mais surtout les principes qui la sous-tendent. Ce chapitre est inspiré de (Barnier 2018) et (Wickham and Grolemund 2017).
library(tidyverse)
library(questionr)
2.1 Extensions
Le terme tidyverse est une contraction de tidy (qu’on pourrait traduire par bien rangé) et de universe. En allant visiter le site internet de ces extensions https://www.tidyverse.org/, voici ce que nous pouvons trouver sur la première page du site:
The tidyverse is an opinionated collection of R packages designed for data science. All packages share an underlying design philosophy, grammar, and data structures.
que nous pourrions traduire par:
Le tidyverse est une collection dogmatique d’extensions pour le langage R conçues pour la science des données. Toutes les extensions partagent une philosphie sous-jacente de design, de grammaire et de structures de données.
Ces extensions abordent un très grand nombre d’opérations courantes dans R
. L’avantage d’utiliser le tidyverse
c’est qu’il permet de simplifier plusieurs opérations fréquentes et il introduit le concept de tidy data. De plus, la grammaire du tidyverse
étant cohérente entre toutes ses extensions, en apprenant comment utiliser l’une de ces extensions, vous serez en monde connu lorsque viendra le temps d’apprendre de nouvelles extensions.
Nous utiliserons le tidyverse
pour:
- Le concept de tidy data
- L’importation et/ou l’exportation de données
- La manipulation de variables
- La visualisation
Le tidyverse
permet aussi de:
- Travailler avec des chaînes de caractères (du texte par exemple)
- Programmer
- Remettre en forme des données
- Extraire des données du Web
- Etc.
Pour en savoir plus, nous invitons le lecteur à se rendre au site du tidyverse
https://www.tidyverse.org/. Le tidyverse
est en grande partie issu des travaux de Hadley Wickham.
2.2 Installation
Pour installer les extensions du tidyverse
, nous effectuons la commande suivante:
install.packages("tidyverse")
Une fois l’extension installée, il n’est pas nécessaire de la réinstaller à chaque fois que vous utilisez R
. Par contre, vous devez charger l’extension à chaque fois que vous utilisez R
.
Pour charger l’extension et l’utiliser dans R
, nous effectuons la commande suivante:
library(tidyverse)
Cette commande va en fait charger plusieurs extensions qui constituent le coeur du tidyverse
, à savoir :
ggplot2
(visualisation)dplyr
(manipulation des données)tidyr
(remise en forme des données)purrr
(programmation)readr
(importation de données)tibble
(tableaux de données)forcats
(variables qualitatives)stringr
(chaînes de caractères)
Il existe d’autres extensions qui font partie du tidyverse
mais qui doivent être chargées explicitement, comme par exemple readxl
(pour l’importation de données depuis des fichiers Excel).
La liste complète des extensions se trouve sur le site officiel du tidyverse
https://www.tidyverse.org/packages/.
2.3 Les tidy data
Le tidyverse
est en partie fondé sur le concept de tidy data, développé à l’origine par Hadley Wickham dans un article du Journal of Statistical Software, voir (Wickham 2014). Nous pourrions traduire ce concept par données bien rangées.
Il s’agit d’un modèle d’organisation des données qui vise à faciliter le travail souvent long et fastidieux de nettoyage et de préparation préalable à la mise en oeuvre de méthodes d’analyse. Dans ce livre, nous travaillerons toujours avec des tidy data. En réalité, la plupart des données rencontrées par les chercheurs ne sont pas tidy. Il existe une extension du tidyverse
qui permet de faciliter la transformation de données non tidy en données tidy, l’extension tidyr
. Nous ne verrons pas comment l’utiliser dans ce livre.
Les principes d’un jeu de données tidy sont les suivants :
- chaque variable est une colonne
- chaque observation est une ligne
- chaque valeur doit être dans une cellule différente
La figure 2.1 montre ces règles de façon visuelle (l’image a été prise de (Wickham and Grolemund 2017)).

Figure 2.1: Suivre les trois principes rend les données tidy: les variables sont en colonnes, les observations sont sur des lignes, et chaques valeurs sont dans des cellules différentes.
Pourquoi s’assurer que vos données sont tidy? Il y a deux avantages importants:
Un avantage général de choisir une seule façon de conserver vos données. Si vous utilisez une structure de données consitante, il est plus facile d’apprendre à utiliser les outils qui fonctionneront avec ce type de structure, étant donné que celles-ci possède une uniformité sous-jacente.
Un avantage spécifique de placer les variables en colonnes car ceci permet de vectoriser les opérations dans
R
. Ceci implique que vos fonctions seront plus rapides lorsque viendra le temps de les exécuter.
Voici un exemple de données tidy qui sont accessibles en R
de base.
as_tibble(rownames_to_column(mtcars))
#> # A tibble: 32 x 12
#> rowname mpg cyl disp hp drat wt qsec vs am gear
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 Mazda RX4 21.0 6. 160. 110. 3.90 2.62 16.5 0. 1. 4.
#> 2 Mazda RX4 W… 21.0 6. 160. 110. 3.90 2.88 17.0 0. 1. 4.
#> 3 Datsun 710 22.8 4. 108. 93. 3.85 2.32 18.6 1. 1. 4.
#> 4 Hornet 4 Dr… 21.4 6. 258. 110. 3.08 3.22 19.4 1. 0. 3.
#> 5 Hornet Spor… 18.7 8. 360. 175. 3.15 3.44 17.0 0. 0. 3.
#> 6 Valiant 18.1 6. 225. 105. 2.76 3.46 20.2 1. 0. 3.
#> # ... with 26 more rows, and 1 more variable: carb <dbl>
2.4 Les tibbles
Une autre particularité du tidyverse est que ces extensions travaillent avec des tableaux de données au format tibble, qui est une évolution plus moderne du classique data frame du R de base. Ce format est fourni est géré par l’extension du même nom (tibble
), qui fait partie du coeur du tidyverse. La plupart des fonctions des extensions du tidyverse acceptent des data frames en entrée, mais retournent un objet de classe tibble
.
Pour être en mesure d’effectuer des calculs statistiques, il nous faut une structure qui soit en mesure de garder en mémoire une base de données. Ces structures se nomment des “tibbles” dans R.
2.4.1 Prérequis
Pour être en mesure d’utiliser le paquetage tibble, nous devons charger l’extension tibble. Pour ce faire, il suffit d’utiliser la commande suivante:
library(tibble)
2.4.2 Un exemple de tibble
Pour comprendre ce qu’est un tibble, nous allons utiliser deux librairies: nycflights13
et diamonds
. Si ce n’est pas déjà fait, vous devez les installer et ensuite les charger.
library(nycflights13)
library(ggplot2)
Nous allons étudier le paquetage nycflights13
qui contient 5 bases de données contenant des informations concernant les vols intérieurs en partance de New York en 2013, à partir des aéroports de Newark Liberty International (EWR), John F. Kennedy International (JFK) ou LaGuardia (LGA). Les 5 bases de données sont les suivantes:
- flights: information sur les 336,776 vols
- airlines: lien entre les codes IATA de deux lettres et les noms de compagnies d’aviation (16 au total)
- planes: information de construction sur les 3 322 avions utilisés
- weather: données météo à chaque heure (environ 8 710 observations) pour chacun des trois aéroports.
- airports: noms des aéroports et localisations
2.4.3 La base de données flights
Pour visualiser facilement une base de données sous forme tibble, il suffit de taper son nom dans la console. Nous allons utiliser la base de données flights. Par exemple:
flights
#> # A tibble: 336,776 x 19
#> year month day dep_time sched_dep_time dep_delay arr_time
#> <int> <int> <int> <int> <int> <dbl> <int>
#> 1 2013 1 1 517 515 2. 830
#> 2 2013 1 1 533 529 4. 850
#> 3 2013 1 1 542 540 2. 923
#> 4 2013 1 1 544 545 -1. 1004
#> 5 2013 1 1 554 600 -6. 812
#> 6 2013 1 1 554 558 -4. 740
#> # ... with 3.368e+05 more rows, and 12 more variables:
#> # sched_arr_time <int>, arr_delay <dbl>, carrier <chr>, flight <int>,
#> # tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
#> # distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
Nous allons décortiquer la sortie console:
A tibble: 336,776 x 19
: un tibble est une façon de représenter une base de données en R. Cette base de données possède:336 776
lignes19
colonnes correspondant aux 19 variables décrivant chacune des observations
year month
day
dep_time
sched_dep_time
dep_delay
arr_time
sont différentes colonnes, en d’autres mots des variables, de cette base de données.- Nous avons ensuite 10 lignes d’obervations correspondant à 10 vols
... with 336,766 more rows, and 12 more variables:
nous indique que 336 766 lignes et 12 autres variables ne pouvaient pas être affichées à l’écran.
Malheureusement cette sortie écran ne nous permet pas d’explorer les données correctement. Nous verrons à la section 2.4.5 comment explorer des tibbles.
2.4.4 La base de données diamonds
La base de données diamonds est composée des variables suivantes:
price
: prix en dollars UScarat
: poids du diamant en grammescut
: qualité de la coupe (Fair, Good, Very Good, Premium, Ideal)color
: couleur du diamant (J (pire) jusqu’à D (meilleur))clarity
: une mesure de la clarté du diamant (I1 (pire), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (meilleur))x
: longueur en mmy
: largeur en mmz
: hauteur en mmdepth
: z / mean(x, y) = 2 * z / (x + y)table
: largeur du dessus du diamant par rapport à son point le plus large
diamonds
#> # A tibble: 53,940 x 10
#> carat cut color clarity depth table price x y z
#> <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
#> 1 0.230 Ideal E SI2 61.5 55. 326 3.95 3.98 2.43
#> 2 0.210 Premium E SI1 59.8 61. 326 3.89 3.84 2.31
#> 3 0.230 Good E VS1 56.9 65. 327 4.05 4.07 2.31
#> 4 0.290 Premium I VS2 62.4 58. 334 4.20 4.23 2.63
#> 5 0.310 Good J SI2 63.3 58. 335 4.34 4.35 2.75
#> 6 0.240 Very Good J VVS2 62.8 57. 336 3.94 3.96 2.48
#> # ... with 5.393e+04 more rows
2.4.5 Comment explorer des “tibbles”
Voici les façons les plus communes de comprendre les données se trouvant à l’intérieur d’un “tibble”:
1. En utilisant la fonction `View()` de RStudio.C'est la commande que nous utiliserons le plus fr?quemment.
2. En utilisant la fonction `glimpse()` du paquetage knitr
3. En utilisant la fonction `kable()`
4. En utilisant l'opérateur `$` pour étudier une seule variable d'une base de données
View()
:
Éxécutez View(flights)
dans la console de RStudio et explorez la base de données obtenue.
Nous remarquons que chaque colonnes représentent une variable différente et que ces variables peuvent être de différents types. Certaines de ces variables, comme distance
, day
et arr_delay
sont des variables dites quantitatives. Ces variables sont numériques par nature. D’autres variables sont dites qualitatives.
Si vous regardez la colonne à l’extrème-gauche de la sortie de View(flights)
, vous verrez une colonne de nombres. Ces nombres représentent les numéros de ligne de la base de données. Si vous vous promenez sur une ligne de même nombre, par exemple la ligne 5, vous étudiez une unité statistique.
glimpse
:
La seconde façon d’explorer une base de données est d’utiliser la fonction glimpse()
. Cette fonction nous donne la majorité de l’information précédente et encore plus.
glimpse(flights)
#> Observations: 336,776
#> Variables: 19
#> $ year <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013,...
#> $ month <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
#> $ day <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
#> $ dep_time <int> 517, 533, 542, 544, 554, 554, 555, 557, 557, 55...
#> $ sched_dep_time <int> 515, 529, 540, 545, 600, 558, 600, 600, 600, 60...
#> $ dep_delay <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2...
#> $ arr_time <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838, 7...
#> $ sched_arr_time <int> 819, 830, 850, 1022, 837, 728, 854, 723, 846, 7...
#> $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -...
#> $ carrier <chr> "UA", "UA", "AA", "B6", "DL", "UA", "B6", "EV",...
#> $ flight <int> 1545, 1714, 1141, 725, 461, 1696, 507, 5708, 79...
#> $ tailnum <chr> "N14228", "N24211", "N619AA", "N804JB", "N668DN...
#> $ origin <chr> "EWR", "LGA", "JFK", "JFK", "LGA", "EWR", "EWR"...
#> $ dest <chr> "IAH", "IAH", "MIA", "BQN", "ATL", "ORD", "FLL"...
#> $ air_time <dbl> 227, 227, 160, 183, 116, 150, 158, 53, 140, 138...
#> $ distance <dbl> 1400, 1416, 1089, 1576, 762, 719, 1065, 229, 94...
#> $ hour <dbl> 5, 5, 5, 5, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5,...
#> $ minute <dbl> 15, 29, 40, 45, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, ...
#> $ time_hour <dttm> 2013-01-01 05:00:00, 2013-01-01 05:00:00, 2013...
kable()
:
La dernière façon d’étudier l’entièreté de la base de données est d’utiliser la fonction kable()
de la librairie knitr
. Nous allons explorer les codes des différentes compagnies d’aviation de deux façons.
library(knitr)
airlines
#> # A tibble: 16 x 2
#> carrier name
#> <chr> <chr>
#> 1 9E Endeavor Air Inc.
#> 2 AA American Airlines Inc.
#> 3 AS Alaska Airlines Inc.
#> 4 B6 JetBlue Airways
#> 5 DL Delta Air Lines Inc.
#> 6 EV ExpressJet Airlines Inc.
#> # ... with 10 more rows
kable(airlines)
carrier | name |
---|---|
9E | Endeavor Air Inc. |
AA | American Airlines Inc. |
AS | Alaska Airlines Inc. |
B6 | JetBlue Airways |
DL | Delta Air Lines Inc. |
EV | ExpressJet Airlines Inc. |
F9 | Frontier Airlines Inc. |
FL | AirTran Airways Corporation |
HA | Hawaiian Airlines Inc. |
MQ | Envoy Air |
OO | SkyWest Airlines Inc. |
UA | United Air Lines Inc. |
US | US Airways Inc. |
VX | Virgin America |
WN | Southwest Airlines Co. |
YV | Mesa Airlines Inc. |
À première vue, les deux sorties sont semblables sauf que la seconde est beaucoup plus agréable visuellement dans un document R Markdown.
- L’opérateur
$
:
Finalement, l’opérateur $
nous permet d’explorer une seule variable à l’intérieur d’une base de données. Par exemple, si nous désirons étudier la variable name
de la base de données airlines
, nous obtenons:
airlines$name
#> [1] "Endeavor Air Inc." "American Airlines Inc."
#> [3] "Alaska Airlines Inc." "JetBlue Airways"
#> [5] "Delta Air Lines Inc." "ExpressJet Airlines Inc."
#> [7] "Frontier Airlines Inc." "AirTran Airways Corporation"
#> [9] "Hawaiian Airlines Inc." "Envoy Air"
#> [11] "SkyWest Airlines Inc." "United Air Lines Inc."
#> [13] "US Airways Inc." "Virgin America"
#> [15] "Southwest Airlines Co." "Mesa Airlines Inc."
Bibliographie
Wickham, Hadley. 2017b. Tidyverse: Easily Install and Load the ’Tidyverse’. https://CRAN.R-project.org/package=tidyverse.
Barnier, Julien. 2018. Introduction à R et Au Tidyverse. https://juba.github.io/tidyverse/.
Wickham, Hadley, and Garrett Grolemund. 2017. R for Data Science. 1st ed. O’Reilly Media Inc. http://r4ds.had.co.nz/.
Wickham, Hadley. 2014. “Tidy Data.” Journal of Statistical Software, Articles 59 (10):1–23. https://doi.org/10.18637/jss.v059.i10.