## Vous pouvez faire un don au Programming Historian

# Programming Historian en français

## Vous pouvez faire un don !

Les tutoriels de qualité en accès libre ont un coût de production. Vous pouvez rejoindre celles et ceux qui soutiennent le Programming Historian et contribuer au libre partage des savoirs.

## Contenus

- Prérequis

- Objectifs de la leçon

- Introduction

- Un exemple du fonctionnement de dplyr

- L’opérateur Pipe

- Il nous faut un nouveau jeu de données

- Qu’est-ce que dplyr ? select filter mutate arrange summarise

- Et si nous compilions ces fonctions ?

- Conclusion

## Prérequis

Cette leçon nécessite quelques prérequis sur votre compréhension de R. Si vous n’avez pas été au bout de la leçon sur les 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 excellentes leçons de Programming Historian sur Python.

## Objectifs de la leçon

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

- Comprendre comment organiser vos données pour qu’elles soient « propres », et pourquoi c’est important.

- Comprendre le paquet (« package » en anglais) dplyr et l’utiliser pour manipuler et administrer les données.

- Se familiariser avec l’opérateur pipe dans R et observer comment il peut vous aider à créer du code plus lisible.

- 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 rencontrerez « dans la nature » sont rarement présentées dans un format qui rend possible une analyse. Vous aurez donc à les traiter avant d’explorer les questions qui vous intéressent. Ce traitement peut prendre plus de temps que l’analyse elle-même ! Dans cette leçon, nous apprendrons quelques techniques de base pour manipuler, gérer et administrer nos données dans R. Nous nous fonderons notamment 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 :

- Chaque observation dans une ligne.

- Chaque variable dans une colonne.

- 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 :

- Les entêtes de colonnes sont des valeurs et pas des noms de variables.

- Plusieurs variables sont stockées dans une même colonne.

- Des variables sont présentes à la fois dans les colonnes et dans les lignes.

- Plusieurs unités d’observation sont présentes dans une même table.

- Une même unité d’observation est présente dans plusieurs tables.

Un avantage peut-être encore plus important est de garder nos données dans ce format propre, qui nous permet d’utiliser une galerie de paquets dans le « tidyverse », spécifiquement conçus pour fonctionner avec des données bien structurées. En nous assurant que nos données en entrée et en sortie sont bien structurées, nous n’aurons qu’un nombre limité d’outils à utiliser pour répondre à un grand nombre de questions. De plus, nous pourrons combiner, manipuler et séparer des jeux de données comme bon nous semble.

Dans cette leçon, nous nous intéresserons particulièrement au paquet dplyr du tidyverse. Mais cela vaut la peine de mentionner brièvement quelques autres paquets que nous utiliserons :

- magittr : donne accès à l’opérateur pipe et rend le code plus facile à lire.

- ggplot2 : utilise la « grammaire des graphiques » permettant de réaliser des visualisations simples de vos données.

- readr : met à disposition un import plus rapide et intuitif de données tabulées, comme des fichiers CSV.

- tibble : donne accès à une nouvelle conceptualisation des tableaux de données qui seront plus simples à traiter et à imprimer.

Si vous ne l’avez pas déjà fait, vous devez 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 (Windows, Mac OS, Linux).

Copiez le code ci-dessous dans la zone d’édition de fichiers de Rstudio. Pour l’exécuter, il faut mettre ces lignes en surbrillance et appuyer sur Ctrl+enter (ou Cmd+enter sur Mac OS) :

## Un exemple du fonctionnement de dplyr

Utilisons un exemple pour voir comment dplyr peut aider les historien·nes, ainsi que les autres chercheur·euses en sciences humaines et sociales : importez les données de recensement décennal des États-Unis entre 1790 et 2010. Téléchargez les données depuis le dépot de Programming Historian et placez le fichier téléchargé dans le dossier que vous utiliserez pour traiter les exemples présentés dans cette leçon.

Comme les données sont stockées dans un fichier CSV, utilisez la commande read_CSV() incluse dans le paquet readr du tidyverse.

La fonction read_csv() doit comporter le chemin d’un fichier qu’on veut importer en tant que variable, par conséquent il faut s’assurer que ce chemin soit correctement renseigné :

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, nous voulons visualiser 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. Nous allons 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 nous aurons recours à ggplot2 pour visualiser cette information. Cet exercice a pour but 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 :

<figure><img src="image_1.png" /><figcaption>Figure 1. Vue graphique de la population de la Californie et de l’État de New York.</figcaption></figure>

Comme nous pouvons le voir, la population de la Californie a augmenté de façon considérable si nous la comparons à celle de l’État de New York. Cet exemple en particulier peut sembler évident au regard de l’histoire des migrations aux États-Unis, mais le code en lui-même nous fournit une base pour poser de nombreuses questions similaires. Ainsi, avec une modification rapide du code, on peut créer un graphique équivalent pour deux autres États comme le Mississippi et la Virginie.

<figure><img src="image_2.png" /><figcaption>Figure 2. Vue graphique de la population du Mississippi et de la Virginie.</figcaption></figure>

La possibilité de faire des changements rapides dans le code et de visualiser 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. L’AED fournit aux historien·nes et aux spécialistes des sciences humaines et sociales un moyen simple de déterminer quand approfondir un sujet ou quand prendre du recul, et c’est un domaine dans lequel R excelle.

## L’opérateur Pipe

Avant d’aborder 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, connu pour son œuvre « La trahison des images » où l’on peut voir une pipe accompagnée de la légende « ceci n’est pas une pipe ».

L’opérateur pipe nous permet déclarer ce qui est à gauche du pipe comme le premier élément de la fonction qui est indiquée à droite. Cela peut sembler étrange au premier abord, mais une fois appris, vous trouverez qu’il rend votre code plus lisible en évitant l’imbrication des opérations. Ne vous inquiétez pas si tout cela vous semble encore confus pour le moment ; cela deviendra plus clair progressivement avec des exemples.

Supposons que nous souhaitions calculer la racine carrée de la population de chaque État, puis en calculer la somme et enfin la moyenne. À l’évidence, cette mesure ne nous sert à rien, mais elle permet de montrer à quel point un code réalisé avec R peut rapidement devenir difficile à lire. Normalement, nous pourrions imbriquer ces opérations :

Comme on peut le voir, l’utilisation de commandes imbriquées rend 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.

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 pour vous. Voici le même code, mais avec l’opérateur pipe :

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

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 :

## Il nous faut un nouveau jeu de données

Maintenant que nous comprenons comment fonctionne le pipe, nous sommes en mesure d’examiner et manipuler des données. Heureusement, aujourd’hui, de plus en plus de jeux de données sont mis à la disposition des historien·nes et des spécialistes des sciences humaines et sociales. 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 États-Unis. Les données de recensement que nous avons utilisées précédemment font partie de cet échantillon. Jusqu’à la fin de cette leçon, nous allons surtout travailler avec un jeu de données en particulier : early_colleges, qui contient des données sur les universités (« colleges » dans le monde anglophone) fondées avant 1848. Commençons par charger les données et les observer :

Comme vous pouvez le remarquer, 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 cette leçon, nous allons modifier la colonne pour ne conserver que les parrainages lors de la fondation.

À 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 à 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é au langage R de base, 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. 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), recoder(mutate) et résumer(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. On pourrait donc vouloir visualiser nos données en soustrayant cette colonne. La fonction select() de dplyr nous donne la possibilité de le faire. Nous prenons le tableau de données que nous voulons manipuler comme premier argument, suivi d’une liste qui indique quelles colonnes on souhaite conserver :

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

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.

### filter

La fonction filter() réalise une opération similaire à la fonction select() à ceci près qu’au lieu de choisir une colonne, on peut utiliser filter() pour sélectionner les lignes qui remplissent une certaine condition. Par exemple, on peut visualiser toutes les universités qui ont existé avant la fin du 18e siècle.

### mutate

La commande mutate vous permet d’ajouter une colonne à 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 paste (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 (localisation).

Rappelez-vous que dplyr ne conserve pas les données ni ne transforme le document original. À 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.

### arrange

La fonction arrange() permet de changer l’ordre des colonnes. Pour l’instant, les universités sont organisées par année de fondation en ordre croissant. Plaçons-les par ordre décroissant (descending en anglais). Dans notre cas, à partir de la fin de la guerre américano-mexicaine :

### summarise

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

## Et si nous compilions ces fonctions ?

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

<figure><img src="image_3.png" /><figcaption>Figure 3. Nombre d’universités religieuses et laïques avant la guerre de 1812.</figcaption></figure>

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

<figure><img src="image_4.png" /><figcaption>Figure 4. Nombre d’universités religieuses et laïques après la guerre de 1812.</figcaption></figure>

## Conclusion

Cette leçon 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 fonctions qui seront efficaces avec dplyr. De plus, vous pouvez être tenté d’examiner quelques autres fonctions accessibles dans dplyr pour améliorer vos compétences. Dans les deux cas, ce guide vous fournit une base pour approfondir vos connaissances et vous permet de couvrir les problèmes courants que vous pourriez rencontrer dans la gestion de données.

## À propos de l'auteur(e)

Nabeel Siddiqui est professeur adjoint de médias numériques à l'Université de Susquehanna.

## Pour citer

Nabeel Siddiqui, « Gestion et manipulation des données avec R », traduction par Damien Belvèze, Programming Historian en français 7 (2025), https://doi.org/10.46430/phfr0035.

## Vous pouvez faire un don !

Les tutoriels de qualité en accès libre ont un coût de production. Vous pouvez rejoindre celles et ceux qui soutiennent le Programming Historian et contribuer au libre partage des savoirs.