Prérequis

Cette leçon comporte quelques prérequis sur votre compréhension de R. Si vous n’avez pas été au bout des bases de R avec des données tabulées, je vous suggère de le faire d’abord. Avoir une expérience dans un autre langage de programmation peut aussi vous aider. Si vous souhaitez savoir par où commencer, je vous recommande de parcourir les excellents tutoriels de Programming Historian sur Python.

Objectifs de la leçon

A la fin de cette leçon, vous serez en mesure de :

  1. comprendre comment organiser vos données pour qu’elles soient ordonnées et pourquoi c’est important.
  2. comprendre le paquet dplyr et l’utiliser pour manipuler et administrer les données
  3. se familiariser avec l’opérateur pipe dans R et observer comment il peut vous aider à créer du code plus lisible
  4. apprendre à travailler sur des exemples de base de manipulation de données pour acquérir les fondements de l’analyse exploratoire des données

Introduction

Les données que vous trouverez “dans la nature” sont rarement dans un format qui rend possible une analyse et vous aurez à les manipuler avant d’explorer les questions que vous souhaitez leur poser. Cette manipulation peut prendre plus de temps que l’analyse elle-même ! Dans ce tutoriel, nous apprendrons quelques techniques de base for manipuler, gérer et administrer nos données dans R. Notamment, nous nous fonderons sur la philosophie des “données propres”(tidy data) telle que l’a présentée Hadley Wickham.

Selon Wickham, la donnée est “propre” quand elle répond à ces trois critères :

  1. Chaque observation dans une ligne.
  2. Chaque variable dans une colonne.
  3. Chaque valeur a sa propre cellule.

Remplir ces critères nous permet de juger si la donnée est organisée ou pas. Ces critères nous fournissent également un schéma standard et un ensemble d’outils pour gérer les formes les plus communes de désordre dans les données :

  1. les entêtes de colonnes sont des valeurs et pas des noms de variables
  2. plusieurs variables sont stockées dans une même colonne
  3. des variables sont présentes à la fois dans les colonnes et dans les lignes
  4. une seule unité d’observation est présente dans plusieurs tables

Avantage peut-être encore plus important, garder nos données dans ce format propre nous permet d’utiliser une galerie de paquets dans le “tidyverse”, qui ont été spécifiquement conçus pour fonctionner avec des données propres. En nous assurant que nos données en entrée et en sortie sont propres, nous n’auront qu’un petit nombre d’outils à utiliser pour résoudre un grand nombre de questions. De plus, nous pouvons combiner, manipuler et scinder des jeux de données comme bon nous semble.

Dans ce tutoriel, nous traiterons particulièrement le paquet dplyr du tidyverse. Mais cela vaut la peine de mentionner brièvement quelques autres paquets que nous utiliserons :

Si vous ne l’avez pas déjà fait, vous devriez installer et charger le “tidyverse” avant de commencer. Assurez-vous en outre que vous disposez de la dernière version de R et de la dernière version de Rstudio installées sur votre système d’exploitation.

Copiez le code ci-dessous dans Rstudio. Pour les exécuter, il vous faut mettre ces lignes en surbrillance et presser Ctrl+enter (ou Cmd+enter sur Mac OS):

# Installer les bibliothèques tidyverse et charger ces bibliothèques
# Ne vous inquiétez pas si cela prend un peu de temps 

install.packages("tidyverse", repos = "http://cran.us.r-project.org")
## le package 'tidyverse' a été décompressé et les sommes MD5 ont été vérifiées avec succés
## 
## Les packages binaires téléchargés sont dans
##  C:\Users\dbelveze\AppData\Local\Temp\RtmpWQ98oH\downloaded_packages
library(tidyverse)
## Warning: le package 'tidyverse' a été compilé avec la version R 4.3.3
## Warning: le package 'ggplot2' a été compilé avec la version R 4.3.2
## Warning: le package 'tibble' a été compilé avec la version R 4.3.2
## Warning: le package 'tidyr' a été compilé avec la version R 4.3.2
## Warning: le package 'readr' a été compilé avec la version R 4.3.3
## Warning: le package 'purrr' a été compilé avec la version R 4.3.2
## Warning: le package 'dplyr' a été compilé avec la version R 4.3.3
## Warning: le package 'stringr' a été compilé avec la version R 4.3.2
## Warning: le package 'forcats' a été compilé avec la version R 4.3.3
## Warning: le package 'lubridate' a été compilé avec la version R 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Un exemple du fonctionnement de dplyr

Utilisons un exemple pour voir comment dplyr peut nous aider en tant qu’historien : importons les données de recensement décennal des Etats-Unis entre 1790 et 2010. Téléchargez les données en cliquant ici et placez le fichier téléchargé dans le dossier que vous utiliserez pour traiter les exemples présentés dans ce tutoriel.

Etant donné que les données sont présentées dans un fichier csv, nous allons utiliser la commande read_csv() comprise dans le paquet readr du tidyverse.

Après avoir importé les données, vous remarquerez qu’elles sont disposées en trois colonnes : une pour la population, une pour l’année et une pour l’État. Ces données sont d’emblée dans un format propre, ce qui nous permet de nous livrer à une multitude d’explorations.

Pour cet exemple, créons une visualisation de la croissance de la population en Californie et dans l’État de New York afin d’avoir une meilleure compréhension des migrations vers l’Ouest. On va utiliser dplyr pour filtrer nos données, de telle sorte qu’elles ne contiennent que les informations relatives aux États qui nous intéressent et on va utiliser ggplot2 pour visualiser cette information. Cet exercice n’a d’autre but que de nous donner une idée de ce que dplyr peut faire, ne vous en faites pas si vous ne comprenez pas le code utilisé à ce stade :

# Filtrer le jeu pour ne traiter que les données relatives à la Californie et à l'État de New York
california_and_new_york_state_populations<-us_state_populations_import %>%
  filter(state %in% c("California", "New York"))

# Editer le graphique des courbes de population de la Californie et de l'État de New York
ggplot(data=california_and_new_york_state_populations, aes(x=year, y=population, color=state)) +
  geom_line() +
  geom_point()

Comme on peut le voir, la population de la Californie a cru de façon considérable comparée à celle de l’État de New York. Cet exemple en particulier peut sembler évident, compte tenu de l’histoire des migrations aux Etats-Unis, mais le code en lui-même nous procure une base à partir de laquelle poser une foule de questions semblables. Par exemple, avec une modification rapide du code, on peut créer un graphique équivalent pour deux autres États comme le Mississipi et la Virginie.

# Filtrer le jeu pour ne traiter que les données relatives au Mississippi et à la Virginie
mississippi_and_virginia_state_populations<-us_state_populations_import %>%
  filter(state %in% c("Mississippi", "Virginia"))

# Éditer le graphique des courbes de population du Mississippi et de la Virginie
ggplot(data=mississippi_and_virginia_state_populations, aes(x=year, y=population, color=state)) +
  geom_line() +
  geom_point()

La possibilité de faire des changements rapides dans le code et de réanalyser nos données est un élément fondamental de l’analyse exploratoire de données (AED). Plutôt que d’essayer de “prouver” une hypothèse, l’analyse exploratoire de données nous aide à mieux comprendre nos données et à les interroger. Pour les Historiens, l’AED nous apporte un moyen aisé de savoir quand on peut approfondir un sujet ou bien quand on doit reprendre de la hauteur, et c’est un sujet sur lequel R excelle.

L’opérateur Pipe

Avant de jeter un coup d’oeil à dplyr, nous devons examiner ce qu’est l’opérateur pipe (%>%) dans R, car nous l’utiliserons souvent dans nos exemples. Comme mentionné plus haut, l’opérateur pipe fait partie du paquet magrittr mis au point par Stefan Milton Bache et Hadley Wickham et est inclus dans le tidyverse. Son nom rend hommage au peintre surréaliste René Magritte qui, dans son oeuvre “La trahison des images”, a représenté une pipe célèbre en plaçant en dessous la légende “ceci n’est pas une pipe”.

L’opérateur pipe nous permet de passer ce qui est à gauche du pipe comme la première variable de la fonction qui est donnée à droite. Bien que cela puisse paraître étrange au premier abord, une fois que vous l’aurez appris, vous trouverez qu’il rend votre code plus lisible en vous évitant d’enchâsser vos opérations les unes dans les autres. Ne vous inquiétez pas si tout cela vous semble encore confus pour l’instant ; ça va s’éclairer progressivement avec des exemples.

Supposons que nous ayons un intérêt à obtenir la racine carrée de la valeur pour la population de chaque État, puis d’en faire la somme et finalement la moyenne. A l’évidence, cette mesure ne nous sert à rien, mais cela permet de montrer à quel point un code réalisé avec R peut rapidement devenir difficile à lire. Normalement, nous pourrions enchâsser ces opérations :

mean(sum(sqrt(us_state_populations_import$population)))
## [1] 1256925

Comme on peut le voir, avec des commandes enchâssées, il est difficile de se rappeler combien de parenthèses doivent être fournies et cela donne un code assez pataud. Pour minimiser cela, certains vont créer des vecteurs temporaires entre chaque appel de commandes.

# Obtenir la racine carrée de la population de chaque Etat

sqrt_state_populations_vector<-sqrt(us_state_populations_import$population)

# Obtenir la somme de toutes les racines carrées des variables temporaires

sum_sqrt_state_populations_vector<-sum(sqrt_state_populations_vector)

# obtenir la moyenne de la variable temporaire

mean_sum_sqrt_state_populations_vector<-mean(sum_sqrt_state_populations_vector)

# Afficher la moyenne

mean_sum_sqrt_state_populations_vector
## [1] 1256925

Vous obtenez certes la même réponse, mais de façon beaucoup plus lisible. En revanche, cela peut rapidement encombrer votre espace de travail si vous oubliez de supprimer les vecteurs temporaires. L’opérateur pipe fait tout cela oour vous. Voici le même code mais avec l’opérateur pipe :

us_state_populations_import$population%>%sqrt%>%sum%>%mean
## [1] 1256925

C’est bien plus simple à lire, et vous pourriez même rendre cette commande encore plus claire en l’écrivant sur plusieurs lignes :

# assurez-vous que l'opérateur soit à la fin de la ligne
us_state_populations_import$population%>%
    sqrt%>%
    sum%>%
    mean
## [1] 1256925

Notez que les vecteurs ou les tableaux que crée l’opérateur pipe sont supprimés lorsque le processus est achevé. Si vous souhaitez les conserver, vous devrez en faire de nouvelles variables :

permanent_sqrt_and_sum_state_populations_vector <- us_state_populations_import$population%>%sqrt%>%sum%>%mean
permanent_sqrt_and_sum_state_populations_vector
## [1] 1256925

Il nous faut un nouveau jeu de données

Maintenant que nous comprenons comment fonctionne le pipe, nous sommes en mesure de commencer à examiner et manipuler des données. Malheureusement, pour les historiens, il n’y a que peu de jeux de données disponibles ; peut-être pourriez-vous contribuer à ce que cela change en diffusant vos propres données ! Nous allons partir du paquet de données historiques créé par Lincoln Mullen

Allons-y, installons et chargeons ce paquet :

Ce paquet contient un échantillon de données historiques sur les Etats-Unis. Les données de recensement qu’on a utilisées plus tôt font partie de cet échantillon. Jusqu’à la fin de ce tutoriel, on va particulièrement travailler avec le jeu de données early_colleges qui contient des données sur les universités (colleges en américains) fondées avant 1848. Commençons par charger les données et y jeter un coup d’oeil :

# Vérifiez avant d'exécuter ce code que le paquet historydata a bien été installé et chargé

data(early_colleges)
early_colleges
## # A tibble: 65 × 6
##    college                original_name      city  state established sponsorship
##    <chr>                  <chr>              <chr> <chr>       <int> <chr>      
##  1 Harvard                <NA>               Camb… MA           1636 Congregati…
##  2 William and Mary       <NA>               Will… VA           1693 Anglican   
##  3 Yale                   <NA>               New … CT           1701 Congregati…
##  4 Pennsylvania, Univ. of <NA>               Phil… PA           1740 Nondenomin…
##  5 Princeton              College of New Je… Prin… NJ           1746 Presbyteri…
##  6 Columbia               King's College     New … NY           1754 Anglican   
##  7 Brown                  <NA>               Prov… RI           1765 Baptist    
##  8 Rutgers                Queen's College    New … NJ           1766 Dutch Refo…
##  9 Dartmouth              <NA>               Hano… NH           1769 Congregati…
## 10 Charleston, Coll. Of   <NA>               Char… SC           1770 Anglican   
## # ℹ 55 more rows

Comme vous pouvez l’observer, ce jeu de données contient le nom actuel de chaque université, son nom à l’origine, la ville et l’État dans lequel il a été fondé, la date de sa fondation et l’organisation qui le parraine. Comme on l’a vu plus haut, avant de commencer à travailler sur ce jeu de données, il est important de penser à la façon dont on va organiser ces données. Voyons si certaines de nos données ne se trouveraient pas dans un format “impropre”. Voyez-vous des cellules qui ne répondraient pas aux trois critères que remplissent les données “propres” ?

Si vous avez répondu le parrainage de Harvard, vous avez la bonne réponse. En plus de mentionner le premier parrainage de cette université, la cellule comporte l’information de son changement de parrainage en 1805. Habituellement, on veut conserver dans nos données autant d’information que possible, mais pour rester dans la perspective de ce tutoriel, nous allons modifier la colonne pour ne conserver que les parrainages lors de la fondation.

early_colleges[1,6] <- "congregational"
early_colleges
## # A tibble: 65 × 6
##    college                original_name      city  state established sponsorship
##    <chr>                  <chr>              <chr> <chr>       <int> <chr>      
##  1 Harvard                <NA>               Camb… MA           1636 congregati…
##  2 William and Mary       <NA>               Will… VA           1693 Anglican   
##  3 Yale                   <NA>               New … CT           1701 Congregati…
##  4 Pennsylvania, Univ. of <NA>               Phil… PA           1740 Nondenomin…
##  5 Princeton              College of New Je… Prin… NJ           1746 Presbyteri…
##  6 Columbia               King's College     New … NY           1754 Anglican   
##  7 Brown                  <NA>               Prov… RI           1765 Baptist    
##  8 Rutgers                Queen's College    New … NJ           1766 Dutch Refo…
##  9 Dartmouth              <NA>               Hano… NH           1769 Congregati…
## 10 Charleston, Coll. Of   <NA>               Char… SC           1770 Anglican   
## # ℹ 55 more rows

A présent que nos données se présentent dans un format propre, nous pouvons leur donner forme avec le paquet dplyr.

Qu’est-ce que Dplyr ?

Dplyr est un autre élément du tidyverse qui met à votre disposition des fonctions utiles pour manipuler et transformer des données. Parce que nous gardons nos données “propres”, nous n’avons besoin que d’un nombre réduit d’outils pour les explorer. Comparé à R seul, utiliser dplyr est souvent plus rapide et vous garantit que si les données en entrée sont propres, les données transformées le seront aussi, et ce qui est peut-être encore plus important, dplyr facilite la lecture de votre code et utilise des “verbes” qui sont intuitifs la plupart du temps. Chaque fonction dans dplyr correspond à l’un de ces verbes, dont les plus importants sont : filtrer(filter), sélectionner(select), arranger(arrange), muter(mutate) et récapituler(summarise, avec le s de l’orthographe britannique). Parcourons-les un à un pour voir comment ils fonctionnent dans la pratique.

select

Si on regarde les données comprises dans early_colleges, on peut observer qu’il y a un grand nombre de “NA” dans la colonne des noms originaux. NA (Not Available) signifie qu’on n’a aucune donnée correspondante et qu’on pourrait vouloir visualiser nos données en soustrayant cette colonne. la fonction select de dplyr nous donne la possibilité de le faire. On prend le tableau de données qu’on veut manipuler comme le premier argument, suivi d’une liste qui indique quelles colonnes on souhaite conserver :

# supprime la colonne des noms originaux en utiliser select()
# Notez que vous n'avez pas à préfixer le nom de la colonne par un $
# dplyr traite automatiquement la virgule comme un AND

select(early_colleges, college, city, state, established, sponsorship)
## # A tibble: 65 × 5
##    college                city          state established sponsorship      
##    <chr>                  <chr>         <chr>       <int> <chr>            
##  1 Harvard                Cambridge     MA           1636 congregational   
##  2 William and Mary       Williamsburg  VA           1693 Anglican         
##  3 Yale                   New Haven     CT           1701 Congregational   
##  4 Pennsylvania, Univ. of Philadelphia  PA           1740 Nondenominational
##  5 Princeton              Princeton     NJ           1746 Presbyterian     
##  6 Columbia               New York      NY           1754 Anglican         
##  7 Brown                  Providence    RI           1765 Baptist          
##  8 Rutgers                New Brunswick NJ           1766 Dutch Reformed   
##  9 Dartmouth              Hanover       NH           1769 Congregational   
## 10 Charleston, Coll. Of   Charleston    SC           1770 Anglican         
## # ℹ 55 more rows

Allons encore plus loin et voyons cpmment on peut écrire ceci en utilisant l’opérateur pipe (%>%) :

early_colleges%>%
    select(college, city, state, established, sponsorship)
## # A tibble: 65 × 5
##    college                city          state established sponsorship      
##    <chr>                  <chr>         <chr>       <int> <chr>            
##  1 Harvard                Cambridge     MA           1636 congregational   
##  2 William and Mary       Williamsburg  VA           1693 Anglican         
##  3 Yale                   New Haven     CT           1701 Congregational   
##  4 Pennsylvania, Univ. of Philadelphia  PA           1740 Nondenominational
##  5 Princeton              Princeton     NJ           1746 Presbyterian     
##  6 Columbia               New York      NY           1754 Anglican         
##  7 Brown                  Providence    RI           1765 Baptist          
##  8 Rutgers                New Brunswick NJ           1766 Dutch Reformed   
##  9 Dartmouth              Hanover       NH           1769 Congregational   
## 10 Charleston, Coll. Of   Charleston    SC           1770 Anglican         
## # ℹ 55 more rows

Devoir référencer toutes les colonnes qu’on veut conserver juste pour se débarrasser d’une seule est un peu fastidieux. Nous pouvons à la place utiliser le symbole moins ( - ) pour signifier que nous voulons enlever une colonne.

early_colleges%>%
  select(-original_name)
## # A tibble: 65 × 5
##    college                city          state established sponsorship      
##    <chr>                  <chr>         <chr>       <int> <chr>            
##  1 Harvard                Cambridge     MA           1636 congregational   
##  2 William and Mary       Williamsburg  VA           1693 Anglican         
##  3 Yale                   New Haven     CT           1701 Congregational   
##  4 Pennsylvania, Univ. of Philadelphia  PA           1740 Nondenominational
##  5 Princeton              Princeton     NJ           1746 Presbyterian     
##  6 Columbia               New York      NY           1754 Anglican         
##  7 Brown                  Providence    RI           1765 Baptist          
##  8 Rutgers                New Brunswick NJ           1766 Dutch Reformed   
##  9 Dartmouth              Hanover       NH           1769 Congregational   
## 10 Charleston, Coll. Of   Charleston    SC           1770 Anglican         
## # ℹ 55 more rows

filter

La fonction filter() réalise la même chose que la fonction select() à ceci près qu’au lieu de choisir le nom d’une colonne, on peut utiliser filter() pour filtrer les lignes qui réalisent une certaine condition. Par exemple, on peut visualiser toutes les universités qui ont existé avant la fin du 18ème siècle.

early_colleges%>%
  filter(established < 1800)
## # A tibble: 20 × 6
##    college                  original_name    city  state established sponsorship
##    <chr>                    <chr>            <chr> <chr>       <int> <chr>      
##  1 Harvard                  <NA>             Camb… MA           1636 congregati…
##  2 William and Mary         <NA>             Will… VA           1693 Anglican   
##  3 Yale                     <NA>             New … CT           1701 Congregati…
##  4 Pennsylvania, Univ. of   <NA>             Phil… PA           1740 Nondenomin…
##  5 Princeton                College of New … Prin… NJ           1746 Presbyteri…
##  6 Columbia                 King's College   New … NY           1754 Anglican   
##  7 Brown                    <NA>             Prov… RI           1765 Baptist    
##  8 Rutgers                  Queen's College  New … NJ           1766 Dutch Refo…
##  9 Dartmouth                <NA>             Hano… NH           1769 Congregati…
## 10 Charleston, Coll. Of     <NA>             Char… SC           1770 Anglican   
## 11 Hampden-Sydney           <NA>             Hamp… VA           1775 Presbyteri…
## 12 Transylvania             <NA>             Lexi… KY           1780 Disciples …
## 13 Georgia, Univ. of        <NA>             Athe… GA           1785 Secular    
## 14 Georgetown               <NA>             Wash… DC           1789 Roman Cath…
## 15 North Carolina, Univ. of <NA>             Chap… NC           1789 Secular    
## 16 Vermont, Univ. of        <NA>             Burl… VT           1791 Nondenomin…
## 17 Williams                 <NA>             Will… MA           1793 Congregati…
## 18 Tennessee, Univ. of      Blount College   Knox… TN           1794 Secular    
## 19 Union College            <NA>             Sche… NY           1795 Presbyteri…
## 20 Marietta                 <NA>             Mari… OH           1797 Congregati…

mutate

La commande mutate vous permet d’ajouter une commande à votre tableau de données. Ici nous avons la ville et l’État qui se trouvent dans deux colonnes séparées. Nous pouvons utiliser la commande “coller” pour combiner ces deux chaînes de caractères en une seule tout en gardant un séparateur. Plaçons ces deux informations dans une seule et même colonne intitulée “location”.

early_colleges%>%mutate(location=paste(city,state,sep=","))
## # A tibble: 65 × 7
##    college            original_name city  state established sponsorship location
##    <chr>              <chr>         <chr> <chr>       <int> <chr>       <chr>   
##  1 Harvard            <NA>          Camb… MA           1636 congregati… Cambrid…
##  2 William and Mary   <NA>          Will… VA           1693 Anglican    William…
##  3 Yale               <NA>          New … CT           1701 Congregati… New Hav…
##  4 Pennsylvania, Uni… <NA>          Phil… PA           1740 Nondenomin… Philade…
##  5 Princeton          College of N… Prin… NJ           1746 Presbyteri… Princet…
##  6 Columbia           King's Colle… New … NY           1754 Anglican    New Yor…
##  7 Brown              <NA>          Prov… RI           1765 Baptist     Provide…
##  8 Rutgers            Queen's Coll… New … NJ           1766 Dutch Refo… New Bru…
##  9 Dartmouth          <NA>          Hano… NH           1769 Congregati… Hanover…
## 10 Charleston, Coll.… <NA>          Char… SC           1770 Anglican    Charles…
## # ℹ 55 more rows

Encore une fois, il faut vous rappeler que dplyr ne conserve pas les données ni ne manipule le document original. A la place, il crée un tableau de données temporaire à chaque étape. Si vous souhaitez le conserver, vous devez lui associer une variable permanente.

early_colleges_with_location <- early_colleges%>%mutate(location=paste(city,state, sep=","))

# Voir le nouveau tableau avec la colonne "location" ajoutée
early_colleges_with_location
## # A tibble: 65 × 7
##    college            original_name city  state established sponsorship location
##    <chr>              <chr>         <chr> <chr>       <int> <chr>       <chr>   
##  1 Harvard            <NA>          Camb… MA           1636 congregati… Cambrid…
##  2 William and Mary   <NA>          Will… VA           1693 Anglican    William…
##  3 Yale               <NA>          New … CT           1701 Congregati… New Hav…
##  4 Pennsylvania, Uni… <NA>          Phil… PA           1740 Nondenomin… Philade…
##  5 Princeton          College of N… Prin… NJ           1746 Presbyteri… Princet…
##  6 Columbia           King's Colle… New … NY           1754 Anglican    New Yor…
##  7 Brown              <NA>          Prov… RI           1765 Baptist     Provide…
##  8 Rutgers            Queen's Coll… New … NJ           1766 Dutch Refo… New Bru…
##  9 Dartmouth          <NA>          Hano… NH           1769 Congregati… Hanover…
## 10 Charleston, Coll.… <NA>          Char… SC           1770 Anglican    Charles…
## # ℹ 55 more rows

arrange

La fonction arrange() nous permet d’ordonner nos colonnes d’une autre façon. Pour l’instant, les universités sont organisées par année de fondation en ordre croissant. Plaçons les par ordre décroissant. Dans notre cas, à partir de la fin de la Guerre américano-mexicaine :

early_colleges%>%
  arrange(desc(established))
## # A tibble: 65 × 6
##    college               original_name city        state established sponsorship
##    <chr>                 <chr>         <chr>       <chr>       <int> <chr>      
##  1 Wisconsin, Univ. of   <NA>          Madison     WI           1848 Secular    
##  2 Earlham               <NA>          Richmond    IN           1847 Quaker     
##  3 Beloit                <NA>          Beloit      WI           1846 Congregati…
##  4 Bucknell              <NA>          Lewisburg   PA           1846 Baptist    
##  5 Grinnell              <NA>          Grinnell    IA           1846 Congregati…
##  6 Mount Union           <NA>          Alliance    OH           1846 Methodist  
##  7 Louisiana, Univ. of   <NA>          New Orleans LA           1845 Secular    
##  8 U.S. Naval Academy    <NA>          Annapolis   MD           1845 Secular    
##  9 Mississipps, Univ. of <NA>          Oxford      MI           1844 Secular    
## 10 Holy Cross            <NA>          Worchester  MA           1843 Roman Cath…
## # ℹ 55 more rows

Summarise

La dernière fonction-clé de dplyr est summarise() (n’oubliez pas, avec un s comme dans la forme britannique). Summarise() occupe une fonction ou une opération et est habituellement utilisé pour créer un tableau de données qui contient des données statistiques récapitulatives destinées à fournir des graphiques. Nous allons l’utiliser pour calculer la date de fondation moyenne des colleges avant 1848

early_colleges%>%summarise(mean(established))
## # A tibble: 1 × 1
##   `mean(established)`
##                 <dbl>
## 1               1810.

Et si nous compilions ces fonctions ?

Maintenant que nous avons parcouru les cinq principaux verbes de dplyr, nous pouvons les utiliser pour créer rapidement une visualisation de nos données. Allons-y, créons un graphique en barres pour afficher le nombre d’universités laïques ou religieuses fondées avant la guerre de 1812:

secular_colleges_before_1812<-early_colleges%>%
  filter(established < 1812)%>%
  mutate(`est laïque`=ifelse(sponsorship!="Secular", "non", "oui"))

ggplot(secular_colleges_before_1812) +
  geom_bar(aes(x=`est laïque`, fill=`est laïque`))+
  labs(x="est-ce que l'université est laïque ?") +
  ylab("nombre d'établissements")

Noter ici que la variable est laïque est mise entre apostrophes arrières (backtick). Cela permet à la fois de gérer le fait qu’elle occupe au lieu d’un seul deux termes séparés par une espace, ainsi que le i trema présent dans le mot “laïque”, caractère qui ne fait pas partie des 128 présents dans la table ASCII et peut donc poser problème dans l’exécution de certains programmes.

Encore une fois, en n’apportant qu’une modification rapide à notre code, nous pouvons aussi visualiser le nombre de colleges laïques par rapport au nombre d’universités religieuses fondées depuis le début de la Guerre de 1812 :

secular_colleges_after_1812<-early_colleges%>%
  filter(established > 1812)%>%
  mutate(`est laïque`=ifelse(sponsorship!="Secular", "non", "oui"))

ggplot(secular_colleges_after_1812) +
  geom_bar(aes(x=`est laïque`, fill=`est laïque`))+
  labs(x="Est-ce que l'université est laïque ?")+
  ylab("nombre d'établissements")

Conclusion

Ce tutoriel devrait vous mettre sur la bonne voie pour bien concevoir l’organisation et la manipulation de vos données avec R. Plus tard, vous souhaiterez sans doute progresser en visualisation de vos données. Je vous recommande de regarder le paquet ggplot2 pour trouver des outils qui fonctionneront bien avec dplyr. De plus vous pouvez être tenté d’examiner quelques autres fonctions accessibles dans dplyr pour affiner vos compétences. Dans les deux cas, ce guide vous permet de disposer d’une bonne base pour aller plus loin et couvrir les problèmes courants que vous pourriez rencontrer dans la gestion de données.


Sur l’auteur

Nabeel Siddiqui est un Professeur Assistant en médias numériques à l’Université de Susquehanna


Citation suggérée

Nabeel Siddiqui, “Gestion et manipulation des données avec R”, traduit par Damien Belvèze, Programming Historian en français 2 (2024),