Quand quelqu’un vient me demander des conseils pour débuter, ou effectuer une tâche particulière sous R, une des premières choses que je fais (outre lui conseiller la lecture de mon blog, bien sûr -rire machiavélique-) est de l’aiguiller sur quelques packages que je juge incontournables. En effet, s’il existe des points d’entrée plus généraux dans l’usage de R, avoir quelques points de repère quant aux packages qui simplifient vraiment son usage permet de gagner du temps dans son apprentissage en limitant l’étendue des possibles (dans un premier temps tout du moins!).
A toutes fins utiles, donc, voici la liste de mes incontournables. Il va sans dire que c’est une liste qui est susceptible d’évoluer, non seulement au gré de mes apprentissages, mais aussi au gré des développements de R! D’ailleurs, si vous avez vous-même des packages chouchous que vous n’y voyez pas, n’hésitez pas à me l’indiquer en commentaire!!
Manipulation de données
dplyr
: manipulation des tableaux de données
Je l’utilise pour tout ce qui est opération sur les tableaux (c’est-à-dire, tout le temps: quel que soit la nature de mon projet, il implique, à un moment ou un autre, de manipuler un tableau). D’ailleurs, j’avais déjà écrit un billet sur ce package ici (sélectionner des colonnes, filtrer des lignes, faire des tris, faire des regroupements) et là (réaliser des jointures).
tidyr
: restructuration des tableaux de données
J’utilise tidyr
de manière moins systématique, mais il réapparaît tout de même assez régulièrement dans mes scripts pour deux raisons en particulier:
- les pivots, réalisés à l’aide des fonctions
gather()
etspread()
(désormais remplacées par les plus explicitespivot_longer()
etpivot_wider()
, respectivement) pour modifier la structure des données. J’avais écrit un paragraphe sur ces fonctions à la fin de ce billet. Vous pouvez aller voir le très bon billet de ThinkR sur le sujet ici. - les fonctions
nest()
etunnest()
pour créer des listes-colonnes de jeux de données (une fonctionnalité que j’utilise souvent en conjonction avec le packagepurrr
et la programmation fonctionnelle)
readr
: lecture des tableaux de données
Pour lire des tableaux de données depuis des fichiers .csv ou .txt, j’utilise le plus souvent le package readr
. Pour vous dire toute la vérité, même: la plupart du temps, si je constate que le fichier que j’essaie d’importer est un peu “spécial”, j’utilise la fonctionnalité “Import Dataset” de RStudio pour explorer les options et me générer la ligne de commande ad hoc (“bouh! la tricheuse!” entends-je certains se récrier dans l’audience), et c’est cette fonctionnalité qui (le plus souvent) me suggère l’usage de readr
…
Manipulation de données particulières
stringr
: Manipulation de chaînes de caractères
Pour tout ce qui est manipulation de chaînes de caractères (qui vont au-delà de paste0()
), j’utilise le package stringr
. J’avais déjà écrit un billet de blog sur ce package ici ainsi qu’un billet le complétant sur le sujet des expressions régulières ici.
tidytext
pour le traitement du langage naturel
Pour traiter du langage naturel (des phrases, des paragraphes, des tweets, etc.) dans des traitements de type lexicométrie, j’utilise le package tidytext
. J’y ai consacré un petit paragraphe du “Descriptoire” (un livre en ligne traitant de l’analyse de textes avec R) mais si vous n’avez rien contre une ressource anglophone, les vignettes associées au package (et notamment l’introduction) sont très très bien faites…
lubridate
: opérations sur des dates, temps, heures
Ce package permet de gérer (sans trop transpirer) toutes les opérations sur les données de type date, heure, temps, etc. (Lecture, conversion, arrondis, séquences de dates, opérations de type addition-soustraction, etc.). J’ai écrit un billet sur ce sujet ici.
forcats
: opérations sur les facteurs (variables catégorielles)
Pour travailler avec les variables catégorielles et notamment pour modifier les noms des différents niveaux (c’est peut-être un détail pour vous, mais pour moi ça veut dire beaucoup), j’utilise forcats
. Voici le billet que j’avais écrit à ce sujet.
Graphiques
ggplot2
: réalisation des graphiques
Pour la réalisation des graphiques, bien sûr, je ne jure plus que par ggplot2
. J’avais écrit (cela commence à faire un moment) un billet sur le sujet. En plus récent et plus complet, il y a aussi un de mes supports de cours ici, ici, et là.
patchwork
: combinaison de graphiques
Pour combiner plusieurs graphiques en… patchworks, plus ou moins complexes, selon une syntaxe très intuitive (voir la vignette ici).
Données géographiques et cartographie
sf
: données géographiques vectorielles
Pour tout ce qui est manipulation de données géographiques de type données vectorielles, le package sf
est non seulement une mine d’or mais il est en plus tidyverse-friendly, c’est-à-dire qu’il fonctionne bien, notamment, avec les packages dplyr et ggplot2… J’ai un (très succinct) support de cours à son sujet ici. En plus détaillé, vous pouvez aller jeter un coup d’oeil à cet article de StatnMap sur le sujet!
raster
: données raster, grid
C’est (comme son nom l’indique) le package incontournable pour travailler avec des données de type raster (ou grid). Il est un peu plus ancien que sf et de ce fait les opérations croisant données raster et vectorielles qu’il propose sont plutôt compatibles avec le package sp
(le prédecesseur de sf
).
tmap
: réalisation de cartes
C’est un package qui permet de réaliser des cartes qui sont, au choix, statiques ou interactives. C’est aussi un package qui s’inscrit dans la logique “tidyverse” (malgré quelques différences de syntaxe par rapport à ggplot2). C’est de ce fait le package de cartographie que j’en suis venue à privilégier (parmi de nombreux choix possibles). Cependant, il m’arrive encore de faire appel à d’autres packages (comme leaflet par exemple) quand tmap ne répond pas à un besoin particulier. Par exemple, l’intégration d’une carte produite par tmap dans une appli shiny requiert l’utilisation de commandes que je ne comprends pas trop (mais que je suis malgré tout en mesure d’utiliser, par la grâce de Stack Overflow et du copier-coller ;-)). Or utiliser des choses sans les comprendre, cela me gêne un peu dans certains contextes (par exemple, quand je donne cours!).
Rapports et applications
J’aime partager le fruit de mon dur labeur dans des documents et applications qui permettent à mes interlocuteurs d’explorer les données/rendus/résultats des modèles de manière documentée, explicitée, et parfois interactive… Voilà les outils que j’utilise:
rmarkdown
et knitr
: rapports tricotés
Pour produire des rapports (c’est-à-dire des documents mêlant un plan, du code R, du texte, des résultats issus de R, des graphiques, etc.), j’utilise les packages rmarkdown
et knitr
… Vous pouvez consulter ce tutoriel de Claire Della Vedova pour vous aider à vous lancer…
shiny
: applications interactives
Pour construire des applications, bien sûr, shiny
est le must… Il y a beaucoup de tutos en ligne (à vous de choisir, selon vos préférences, un tuto anglophone/francophone/autre, un support sous forme de video/document/exercices en ligne…), mais à toutes fins utiles, j’ai moi-même un petit support de cours disponible ici -je m’en sers pour donner cours “en vrai” donc c’est plus un aide-mémoire qu’un guide de démarrage, réellement-…
Pour l’instant en tant que “développeuse shiny occasionnelle” je m’en tiens essentiellement à shiny
(avec quelquefois quelques additions par exemple colourpicker
qui propose un widget pour choisir une couleur) mais je suis très intéressée par le package golem
de ThinkR qui permet de modulariser les applis (car, oui, une appli, ça peut vite devenir gros, compliqué et bordélique) et que j’aimerais bien incorporer à mon “workflow” la prochaine fois que j’aurai l’occasion de développer une appli shiny… En plus, chouette, ils ont plein de doc pour s’y mettre…
Itérations
Je ne sais pas trop dans quelle rubrique classer purrr
, mais il figure parmi mes nouveaux incontournables depuis maintenant 2 ou 3 ans. J’avais écrit un billet à ce sujet ici De fait, quand on travaille très régulièrement avec dplyr (et des “tibbles”), l’usage de purrr pour remplacer les traditionnelles boucles for est le bienvenu… L’usage de purrr
s’accompagne aussi d’un changement de pratiques pour moi puisque j’en viens de plus en plus à écrire mon code “en fonctions”!…
Graphes
Pour analyser des réseaux et produire des graphes (attention, j’ai bien dit graphes, et non graphiques!) j’utilise deux packages de Thomas Lin Pederson:
tidygraph
: description et analyse de réseaux
J’en parle succinctement dans ce billet(en promettant un article très prochainement. C’était il y a six mois. Gloups.): tidygraph
permet de traiter des données en réseau (qui sont par conséquent structurés d’une manière différente des données “tidy” telles qu’on les connaît, où une ligne=un individu et une colonne=une variable). Ce package s’inscrit très largement dans les principes et la syntaxe du tidyverse.
ggraph
: représentation de réseaux en graphes
J’en parle dans ce billet. Ce package permet de représenter des réseaux en graphe en reprenant les principes et les éléments de syntaxe de ggplot2.
Analyses factorielles
Entre FactoMineR
et ade4
, mon coeur balance… Pourtant, j’aimerais bien être en mesure de trancher une fois pour toute, car pour moi, utiliser deux packages qui font “un peu la même chose mais pas exactement”, ça veut dire que je n’arrive jamais à me rappeler les commandes ni de l’un ni de l’autre.
Cependant, je pense que je n’arriverai jamais à trancher, car si je trouve FactoMineR
un peu plus clair, je trouve aussi ade4
un peu plus complet. Quelque part, on retrouve la “patte” des disciplines qui les a vus émerger: plus agronomique (culture méthodique et maîtrisée) côté FactoMineR
, plus écologique (écosystème foisonnant et en évolution) côté ade4
… (Que les auteurs de ces packages me pardonnent ces clichés, c’est juste comme ça que je m’explique mon “feeling” vis-à-vis de l’un ou de l’autre 😉 ). D’ailleurs, j’ai fait mes études dans une école d’ingénieur agronome, et mon doctorat dans un laboratoire d’écologie, et vous comprendrez donc pourquoi, même d’un point de vue disciplinaire, j’ai du mal à faire mon choix entre ces deux packages…
5 Comments
Maëlle
"(mais que je suis malgré tout en mesure d’utiliser, par la grâce de Stack Overflow et du copier-coller ;-)). Or utiliser des choses sans les comprendre, cela me gêne un peu dans certains contextes (par exemple, quand je donne cours!)."
C'est tellement bien dit !
Merci pour cet article !
lvaudor
Ha ha merci 🙂
Ben oui, j'ai tenté l'explication "C'est comme ça et pis c'est tout" à mes étudiants mais ça les a moyennement convaincus 😉
Guillaume
Merci pour votre blog.
Quelque chose dans les tuyaux sur le package tweenr ?
Bon confinement
lvaudor
Bonjour! Merci 🙂
Hmm non je ne connais pas ce package... (Je vais aller voir ce que c'est du coup!)
Marco
Bonjour merci pour ce petit rappel. Un autre incontournable que je rajouterai est le package XTS qui est idéal pour traiter des séries temporelles.