Présentation du tidyverse

Julien Barnier - Centre Max Weber

1er février 2018

Un peu d’histoire

Au commencement…

Au commencement était Hadley Wickham

Le premier jour…

Le premier jour, Hadley Wickham créa ggplot2.

(Plus précisément en 2005)

Le deuxième jour…

Le deuxième jour, Hadley Wickham créa reshape2 et plyr.

En parallèle il développa également :

  • des packages “utilitaires” : lubridate, stringr
  • des packages pour faciliter le développement : devtools, testthat, roxygen2

(Plus précisément entre 2007 et 2012)

Le troisième jour…

Le troisième jour Hadley Wickham formalisa et publia un article sur le concept de tidy data (Journal of Statistical Software, 2014).

https://www.jstatsoft.org/article/view/v059i10

(À la même période il alla travailler pour RStudio)

Le quatrième jour…

Le quatrième jour :

  • reshape2 fut progressivement remplacé par tidyr
  • plyr fut progressivement remplacé par dplyr.

(Plus précisément à partir de 2014)

Le cinquième jour…

Le cinquième jour apparut l’expression “hadleyverse” pour désigner l’ensemble de ces extensions.

(Plus précisément autour de 2015)

Le sixième jour…

Enfin, le sixième jour, l’expression hadleyverse fut officiellement remplacée par tidyverse, et un site et un package du même nom furent mis en place.

(Plus précisément fin 2016)

Tout ça pour dire que…

Le tidyverse est un ensemble de packages développés depuis une dizaine d’années, qui ont évolué au fil du temps pour former un ensemble d’outils relativement cohérents.

Il s’agit évidemment d’un travail collectif (139 contributeurs pour ggplot2, 144 contributeurs pour dplyr, etc.)

Concrètement

Le tidyverse c’est…

  1. un ensemble d’extensions partageant une philosophie commune et abordant un grand nombre d’activités liées à l’analyse de données : import, manipulation, recodages, visualisation, programmation, etc.
  2. une extension regroupant certains de ces packages
  3. un site Web centralisant documentation et actualités

Philosophie

  • intérêt porté à tout ce qui vient avant et après l’application de méthodes d’analyse (et sur lequel on passe le plus de temps)
  • chaque extension constitue un bloc simple, avec une fonction bien définie, une syntaxe cohérente, et qui se combine facilement avec les autres extensions

Extensions

Import de données

import de données tabulaires au format texte (CSV, TSV…)

import de données depuis Excel

haven : import de données depuis SAS, SPSS, Stata

Import de données

rvest : extractions de données du Web

httr : interrogation d’API Web

DBI, dbplyr : connexion à des bases de données

Manipulation des données

version améliorée des data frame

remettre en forme des données non-tidy

manipuler des données tidy

Manipulation de variables

travail et recodages de factors

manipuler des chaînes de caractères

manipuler des dates

Visualisation

“Grammaire des graphiques” pour R

Programmation

outils pour la programmation fonctionnelle

implémentation du pipe

rlang : outils de plus bas niveau

L’extension tidyverse

tidyverse est aussi le nom d’une “méta-extension”.

Son rôle est d’installer et de charger les extensions qui constituent le “coeur” du tidyverse :

Aperçu

Import de données

readr et readxl permettent d’importer des données tabulaires depuis des fichiers texte ou Excel.

Une interface intégrée à RStudio facilite leur usage en permettant de modifier les options d’importation et d’avoir un aperçu en temps réel.

Aperçu

Import de données

Comparées aux fonctions de base de R, les fonctions de readr :

  • ne convertissent pas les variables qualitatives en factor (stringsAsFactors = FALSE)
  • savent reconnaître les formats courants de dates et heures
  • sont jusqu’à 10 fois plus rapides

Tibble

Ces fonctions d’import de données retournent un data.frame (tableau de données) d’un type particulier : un tibble.

À la différence des data.frame, les tibbles :

  • n’ont pas de noms de lignes (rownames)
  • autorisent des noms de colonnes invalides pour les data frames (espaces, caractères spéciaux…)
  • s’affichent plus intelligemment que les data frames
  • ne font pas de partial matching sur les noms de colonnes
  • affichent un avertissement si on essaie d’accéder à une colonne qui n’existe pas

Aperçu

Tibble

Les tibbles restent totalement compatibles avec les data frames.

Les fonctions d’extensions comme dplyr ou tidyr renvoient des tibbles.

Tidy data

  • Le tidyverse tire son nom du concept de tidy data
  • 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
  • Les extensions du tidyverse, notamment ggplot2 et dplyr, sont prévues pour fonctionner avec des données tidy
  • L’extension tidyr fournit des outils pour rendre les données tidy

Tidy data : principes

Les trois principes d’un jeu de données tidy :

  • chaque variable est une colonne
  • chaque observation est une ligne
  • chaque type d’observation est dans une table différente

Tidy data : contre-exemples

Données messy :

id adresse
1 3 rue des fleurs 43100 Bonjour-les-Oeillères
2 Impasse des lilas 01410 Patelin-en-Bresse
3 12 avenue Wickham 21230 Taille-d’Iversse

Données tidy :

id adresse code_postal commune
1 3 rue des fleurs 43100 Bonjour-les-Oeillères
2 Impasse des lilas 01410 Patelin-en-Bresse
3 12 avenue Hadley 21230 Taille-d’Iversse

Tidy data : contre-exemples

Données messy :

country 2002 2007
Belgium 10.3 10.4
France 59.9 61.1

Données tidy :

country annee population
Belgium 2002 10.3
France 2002 59.9
Belgium 2007 10.4
France 2007 61.1

Tidy data : contre-exemples

dep_time origin dest carrier name
517 EWR IAH UA United Air Lines Inc.
533 LGA IAH UA United Air Lines Inc.
542 JFK MIA AA American Airlines Inc.
544 JFK BQN B6 JetBlue Airways

Données tidy :

dep_time origin dest carrier
517 EWR IAH UA
533 LGA IAH UA
542 JFK MIA AA
544 JFK BQN B6
carrier name
AA American Airlines Inc.
B6 JetBlue Airways
UA United Air Lines Inc.

Visualisation

ggplot2 propose une implémentation d’une grammaire des graphiques (Grammar of Graphics, Leland Wilkinson, 2005).

Il fournit une syntaxe cohérente, qui peut sembler complexe à première vue mais qui est très “efficace”.

Aperçu

Manipulation des données

dplyr propose des outils de manipulation et transformation de données au format tidy.

Ces outils se présentent sous la forme de “verbes” qu’on peut assembler grâce à un opérateur de type pipe.

Aperçu

Remise en forme des données

tidyr propose des outils pour mettre en forme des données (les passer au format tidy).

Comme pour dplyr, ce sont des verbes qui peuvent s’utiliser avec le pipe.

Aperçu (?)

Quelques remarques

Manques

  • modélisation (chantier en cours : modelr)
  • graphiques interactifs (ggvis)

Traduction française : “ordocosme”, “organivers”… ?

Limites

  • syntaxe pas totalement cohérente
  • programmation plus compliquée
  • les fonctions déjà existantes ne renvoient pas forcément des résultats tidy (broom)
  • certaines fonctions déjà existantes s’attendent à avoir des data frames plutôt que des tibbles

Au delà du tidyverse

Le modèle des tidy data s’exporte dans d’autres domaines.

Au delà du tidyverse : tidytext

Appliquer les concepts du tidyverse à l’analyse textuelle.

book linenumber chapter word
Sense & Sensibility 1010 7 he
Sense & Sensibility 1010 7 said
Sense & Sensibility 1010 7 only
Sense & Sensibility 1010 7 one
Sense & Sensibility 1010 7 gentleman
Sense & Sensibility 1010 7 there
Sense & Sensibility 1010 7 besides

Plus d’informations : https://www.tidytextmining.com/

Au delà du tidyverse : sf

sf (simple features), nouvelle implémentation de la gestion des objets spatiaux.

Avant, avec sp :

## Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots
##   ..@ data       :'data.frame':  606 obs. of  4 variables:
##   .. ..$ NAME      : Factor w/ 602 levels "Abidjan","Abu Zaby",..: 368 33 472 322 419 593 390 194 263 115 ...
##   .. ..$ COUNTRY   : Factor w/ 165 levels "Afghanistan",..: 124 124 124 124 124 124 124 153 124 124 ...
##   .. ..$ POPULATION: num [1:606] 468000 416000 5825000 152000 1160000 ...
##   .. ..$ CAPITAL   : Factor w/ 2 levels "N","Y": 1 1 1 1 1 1 1 1 1 1 ...
##   ..@ coords.nrs : num(0) 
##   ..@ coords     : num [1:606, 1:2] 33.1 40.6 30.5 150.8 56.2 ...
##   .. ..- attr(*, "dimnames")=List of 2
##   .. .. ..$ : NULL
##   .. .. ..$ : chr [1:2] "coords.x1" "coords.x2"
##   ..@ bbox       : num [1:2, 1:2] -165.3 -53.2 177.1 78.2
##   .. ..- attr(*, "dimnames")=List of 2
##   .. .. ..$ : chr [1:2] "coords.x1" "coords.x2"
##   .. .. ..$ : chr [1:2] "min" "max"
##   ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
##   .. .. ..@ projargs: chr "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"

Avec sf :

## Simple feature collection with 6 features and 3 fields
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: 30.45333 ymin: 56.84654 xmax: 150.78 ymax: 68.96355
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
## # A tibble: 6 x 4
##   NAME             COUNTRY POPULATION                  geometry
##   <fct>            <fct>        <dbl>    <sf_geometry [degree]>
## 1 Murmansk         Russia      468000 POINT (33.08604 68.96355)
## 2 Arkhangelsk      Russia      416000 POINT (40.64616 64.52067)
## 3 Saint Petersburg Russia     5825000 POINT (30.45333 59.95189)
## 4 Magadan          Russia      152000     POINT (150.78 59.571)
## 5 Perm'            Russia     1160000 POINT (56.23246 58.00024)
## 6 Yekaterinburg    Russia     1620000 POINT (60.61013 56.84654)

Compatible avec les verbes de dplyr et (bientôt) avec ggplot2.

Enseignement

Quel R enseigner ?

Avantages du tidyverse

  • syntaxes cohérentes
  • incitation à aborder la question de l’organisation et de la manipulation des données
  • dissociation remise en forme / manipulation

Inconvénients

  • réapprendre un “nouveau” R
  • syntaxes spécifiques, complexité supplémentaire (surtout pour ggplot2)
  • nécessité de revenir à “l’ancienne” syntaxe de temps en temps : coexistence qui peut être source de confusion

Enseignement

Expérience personnelle : passage à une formule d’introduction à R sur quatre jours.

  • premier jour : concepts de base du langage, statistique univariée et bivariée (R de base)
  • deuxième jour : ggplot2 puis recodages de variables
  • troisième jour: dplyr et rmarkdown
  • quatrième jour : rappels et mise en pratique sur un jeu de données d’exemple

Ressources

Merci !