Manipuler des données avec dplyr

De EduTech Wiki
Aller à la navigation Aller à la recherche

Introduction

dplyr est un paquet de R faisant partie de l'écosystème Tidyverse utile pour manipuler des données en format rectangulaire (i.e. lignes et colonnes). Il utilise une grammaire basée sur les actions les plus fréquentes dans la manipulations des données comme par exemple filtrer, agréger, sélectionner, transformer, etc. Le paquet dplyr peut être utilisé dans plusieurs contextes, comme par exemple :

Cet article propose un survol des manipulations les plus fréquentes, ainsi que des ressources complémentaires.

Prérequis

L'article nécessite de connaissances de base de R, notamment au niveau des structures de données de type data.frame ou tibble (i.e. organisées en lignes et colonnes). La lecture préalable de l'article Introduction à Tidyverse est également recommandée.

Installation

dplyr est l'un des paquets qui composent l'écosystème Tidyverse. Il peut donc être installé deux deux manières :

  • Paquet individuel
  • Paquet global Tidyverse

Paquet dplyr individuel

Pour installer seulement le paquet dplyr, la commande est la suivante :

# Installation individuelle
install.packages("dplyr")

Pour utiliser le paquet il faudra à ce moment le charger :

library(dplyr)

Paquet global Tidyverse

Si vous installez le paquet global Tidyverse, dplyr est installé automatiquement.

# Installation de Tidyverse
install.packages("tidyverse")

L'installation de l'écosystème Tidyverse est conseillée, car dplyr peut s'intégrer facilement avec d'autres manipulations sur les données comme par exemple la visualisation des données avec ggplot2.

Pour utiliser le paquet vous pouvez à ce moment choisir si :

  • Charger seulement dplyr
    library(dplyr)
    
  • Charger tous les paquets de Tidyverse
    library(tidyverse)
    

Voir Introduction à Tidyverse pour plus de détails.

Données gapminder utilisées dans le tutoriel

Pour faciliter la compréhension des différents éléments de dplyr, cet article utilise un jeu de données issue du paquet gapminder (Bryan, 2017), créé par Jennifer Bryan, qui est un extrait des données collectées par la fondation Gapminder, un institution indépendante qui utilise les données afin de modifier des mauvaises conceptions que les personnes ont souvent à propos de phénomènes globaux.

Cette section explique comment installer le paquet et fourni une description des donnée disponibles. Au moment de l'écriture de ce tutoriel, la version du paquet gapminder est la 0.3.0 (voir versionnage sémantique). Le paquet propose des données sur plusieurs nations du monde. À la version 0.3.0, les données sont disponibles jusqu'en 2007.

Installation et chargement

Pour disposer des données, il faut d'abord installer le paquet avec la commande :

install.packages("gapminder")

À ce moment, il faut charger le paquet pour pouvoir l'utiliser

library(gapminder)

Description des données

Une fois chargé le paquet avec l'instruction library(gapminder) vous aurez accès à deux références symboliques :

  • gapminder
  • gapminder_unfiltered

Les deux jeux de données ont la même structure, mais gapminder compte seulement 1'704 observations, tandis que gapminder_unfiltered en a 3'313. Nous allons utiliser gapminder dans la suite de cet article.

Avec la commande str(gapminder) on peut accéder à des informations sur le jeu de données :

tibble[,6] [1,704 x 6] (S3: tbl_df/tbl/data.frame)
 $ country  : Factor w/ 142 levels "Afghanistan",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ continent: Factor w/ 5 levels "Africa","Americas",..: 3 3 3 3 3 3 3 3 3 3 ...
 $ year     : int [1:1704] 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ...
 $ lifeExp  : num [1:1704] 28.8 30.3 32 34 36.1 ...
 $ pop      : int [1:1704] 8425333 9240934 10267083 11537966 13079460 14880372 12881816 13867957 16317921 22227415 ...
 $ gdpPercap: num [1:1704] 779 821 853 836 740 ...

Avec la fonction glimpse(gapminder) on peut implémenter la structure avec un aperçu des données contenues :

Rows: 1,704
Columns: 6
$ country   <fct> "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanista~
$ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia,~
$ year      <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, 2002, 2007,~
$ lifeExp   <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.822, 41.674,~
$ pop       <int> 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12881816, 138~
$ gdpPercap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134, 978.0114, 8~

Si vous utilisez RStudio, vous pouvez voir directement les données en format spreadsheet avec l'instruction View(gapminder).

Ces commandes nous permettent de découvrir que le jeu de données gapminder est organisé dans un format long (voir la section Tidy data de l'Introduction à Tidyverse), avec 6 variables et 1'704 observations. En combinant des informations issues des commandes précédentes, ainsi que depuis la documentation du paquet, on découvre les informations suivantes à propos des six variables du jeu de données :

  1. country : le nom de la nation, un facteur avec 142 modalités, c'est-à-dire 142 nations différentes. La documentation suggère que pour chaque nation, il y existe 12 observations (i.e. lignes) avec les données recueillies depuis 1952 à 2007, avec des intervalles fixes de 5 ans. On peut récupérer les noms des nations avec la commande levels(gapminder$country)
  2. continent : le nom du continent dans lequel se trouve la nation, un facteur avec 5 modalités, donc les 5 continents Africa, America, Asia, Europe, Oceania. On peut récupérer les noms des facteurs avec la commande levels(gapminder$continent)
  3. year : l'année de référence. Comme indiqué plus haut, les données couvrent la période entre 1951 et 2007, avec 5 années d'intervalles. On peut récupérer les différentes années avec la commande unique(gapminder$year) (car il s'agit de chiffres et pas d'un facteur comme les variables précédentes).
  4. lifeExp : l'espérance de vie à la naissance en années
  5. pop : la population de la nation à l'année de référence
  6. gdpPercap : le produit intérieur brut en dollar international (Geary-Khamis), une mesure qui ajuste pour la différence au fil du temps. Les détails économiques ne sont pas nécessaires pour suivre le tutoriel, il suffit de retenir que cette variable représente grosso-modo la richesse d'une nation de manière standardisée et donc comparable entre pays et années.

Le paquet met à disposition également une autre référence symbolique, country_codes : un jeu de données qui contient notamment l’abréviation de la nation (e.g. FRA, GER, CHE, ...). Nous utiliserons ce deuxième jeu de données pour montrer des opérations qui impliquent deux tableaux. La commande str(country_codes) affiche la structure suivante :

tibble[,3] [187 x 3] (S3: tbl_df/tbl/data.frame)
 $ country  : chr [1:187] "Afghanistan" "Albania" "Algeria" "Angola" ...
 $ iso_alpha: chr [1:187] "AFG" "ALB" "DZA" "AGO" ...
 $ iso_num  : int [1:187] 4 8 12 24 32 51 533 36 40 31 ...

Chargement des paquets nécessaires à suivre le tutoriel

Pour suivre le tutoriel, il est donc nécessaire de charger au moins les deux paquets tidyverse (qui incorpore également dplyr) et gapminder. En d'autres termes, il serait bien que votre fichier de script R commence avec les lignes de code suivantes :

library(tidyverse)
library(gapminder)

Le chargement de tidyverse est recommandé, car le tutoriel propose occasionnellement des croisement avec d'autres paquets de l'écosystème Tidyverse pour montrer l'intégration de la manipulation des données avec d'autres opérations utiles.

Verbs pour manipuler des données

dplyr propose une grammaire pour effectuer des opérations sur des données organisées en une ou deux tableaux, c'est-à-dire organisées en lignes et colonnes, idéalement en suivant les principes du Tidy data (Wickham, 2014, p. 4) :

  1. Chaque variable forme une colonne
  2. Chaque observation forme une ligne
  3. Chaque unité d'observation forme un tableau