Manipuler un dataset en R avec le package Dplyr

Découvrez l'un des packages les plus utilisés et les plus rapides pour la manipulation de données en R

Lorsqu’on souhaite effectuer un traitement statistique sur des données, il est rare que nos données soient directement organisées de la bonne façon. Il est donc souvent indispensable de passer par une phase de pré-traitement (pre-processing) pour transformer notre ensemble de données brutes et le rendre plus pratique à manipuler.

Nous allons découvrir ici les principales fonctions du package dplyr, qui est l’un des plus utiles pour faire ce travail. Vous allez voir, c’est plutôt intuitif. :)

Pourquoi manipuler nos données et pourquoi dplyr ?

Il existe de nombreuses opérations qu’on peut souhaiter faire sur nos données. Nous allons les présenter dans cette section. Vous allez voir que dplyr fournit une fonction pour chaque opération, ce qui est plutôt pratique.

Supposons pour illustrer ces fonctions que l’on dispose d’un jeux de données de différents pays du monde, qui ait cette structure :

nom_pays pib_md_dollars
France 2546
Allemagne 3456
Canada 1532

Voyons quelles opérations de base nous pourrions vouloir faire subir à notre jeux de données et dans quel intérêt.

  • Renommer une colonne : Donner un nouveau nom à une colonne que celui d’origine.
  • Sélectionner certaines colonnes : Il est possible que notre jeux de données comprenne des colonnes qui ne nous intéressent pas, ou que l’on souhaite conduire une analyse en utilisant uniquement certaines variables. Il peut être alors utile de ne sélectionner que certaines colonnes.
  • Ajouter une colonne : Notre jeux de données ne comporte pas de colonne indiquant le PIB/habitant de chaque pays. Nous pourrions créer une colonne pour cela, en divisant simplement le PIB de chaque pays par son nombre d’habitants, qui sont deux données connues.
  • Filtrer les données : On peut ne vouloir travailler que sur certaines données. Par exemple on peut essayer de travailler uniquement sur les pays pays les plus pauvres et ne vouloir sélectionner que les pays qui ont un PIB/habitant inférieur à un certain montant.
  • Classer les données : Classer une colonne par ordre alphabétique ou par ordre croissant. Cela permet par exemple de classer directement les pays par PIB/hab du plus pauvre au plus riche.
  • Fusionner deux jeux de données : On dispose par exemple d’un nouveau jeux de données qui apporte des données sur l’éducation des filles dans chaque pays et on souhaite l’ajouter à notre jeux de données existant.

Pour chacune de ses opérations, le package dplyr va nous fournir une fonction très pratique et très rapide pour manipuler les données et obtenir le résultat souhaiter.

Pourquoi dplyr et pas un autre package ?

Il existe de nombreux packages en R pour manipuler les données, mais dplyr s’est imposé depuis quelques années comme le plus efficace et le plus utilisé par la communauté. Cela tient principalement à trois raisons :

  • Le package dplyr est très rapide. Il est en effet écrit principalement en C++ (via Rcpp) ce qui lui permet de manipuler en un clin d’œil de grands ensembles de données, un élément indispensable de nos jours. Il est ainsi presque aussi rapide que son rival data.frame, dédié lui aussi à la manipulation d’énormes ensembles mais moins pratique d’utilisation.
  • Dplyr est très facile à utiliser car sa syntaxe est claire et agréable,comme vous allez vite le voir. C’est pour cela qu’il est souvent privilégié à son concurrent data.frame, un peu moins "user friendly" et plutôt réservé aux userRs avertis qui ont vraiment besoin de performances de très très haut niveau.
  • Il fait parti de l’ensemble de packages tidyverse qui propose de nombreux packages très pratiques et qui fonctionnent bien ensemble, comme le célèbre ggplot pour la représentation graphique des données.

Maintenant que vous savez ce que nous voulons faire et pourquoi dplyr est le package idéale pour cela, on peut passer à la pratique ! ;)

Installer Dplyr()

On installe dplyr() comme n’importe quel package en R :

1
2
#on install dplyr() :
install.packages("dplyr")

On n’oublie pas de le lier à l’environnement de travail pour pouvoir appeler directement les fonctions du package sans devoir écrire à chaque fois le nom du package :

1
2
#on attache la librairie à l'environnement de travail
library(dplyr)

Attention à ne pas mettre de guillemets quand on utilise la fonction library, car même si le code fonctionnera cela peut entrainer des problèmes et cette pratique n’est pas du tout recommandée.

Notre librairie est installée et liée à l’environnement, on peut enfin commencer à travailler.

Les principales fonctions de dplyr()

Nous allons voir les principales fonctions que dplyr() met à notre disposition pour réaliser les différentes opérations que nous avons décrites précédemment. N’hésitez pas à consulter la documentation officielle pour en savoir plus !

select()

Select() permet de sélectionner les colonnes dans un dataframe de la façon suivante :

1
2
3
4
5
6
#on sélectionne des colonnes en indiquant leur nom :
select(dataframe, colonne1,colonne2)
#fonctionne aussi avec des guillemets :
select(dataframe, "colonne1","colonne2")
#On sélectionne une plage de colonne, en indiquant la colonne de début et de fin :
select(dataframe, colonne1:colonne10)

On peut toujours décider de ne pas sélectionner une valeur en ajoutant un - devant son nom. Ici on sélectionne toutes les colonnes sauf une :

1
2
3
#on sélectionne toutes les colonnes sauf une :
select(dataframe, -colonne10)
select(dataframe, -(colonne2:colonne10))
Mutate()

Mutate() permet de calculer de nouvelles variables à partir de variables existantes. Par exemple, calculer le PIB/habitant à partir des variables PIB et habitants existantes. Supposons un dataframe avec une colonne pib et une colonne hab, comme ceci :

1
2
3
4
5
6
7
#on crée un dataframe avec deux pays
nom_pays = c("France","Allemagne")
pib = c(2456000000000,3456000000000)
habitants = c(66900000,82670000)
dataframe = data.frame(nom_pays,pib,habitants)
#on ajoute une colonne PIB/hab avec mutate()
dataframe = mutate(dataframe, pib_hab = pib/habitants)
Rename()

La fonction rename(), comme son nom l’indique, permet de renommer une variable . Voici son fonctionnement :

1
2
#on renomme des colonnes
rename(dataset, "nouveauNom" = colonne1, "autreNom" = colonne2)

Plutôt simple non ? :)

Filtrer()

Cette fonction sert à sélectionner un groupe d’observations spécifiques. Ici nous allons sélectionner dans le dataset de base "iris" (fourni avec R) les différentes espèces de fleurs.

1
2
3
4
5
6
7
8
#on filtre les fleurs d'une certaine espèce :
iris_filtered = filter(iris, iris$species == "Virginica")
#écriture plus courte sans repéter le nom du dataset : 
iris_filtered = filter(iris, species == "Virginica")
#plusieurs fitres :
iris_filtered = filter(iris, species == "Virginica", Petal.Length < 5)
#Avec les opérateurs logiques :
iris_filtered = filter(iris, Species == "virginica" | Petal.Length < 5)
Arrange()

Arrange() permet de classer les données comme son nom l’indique. Les données numériques sont rangées par ordre croissant et les données numériques par ordre alphabétique. On peut inverser l’ordre via les paramètres.

1
2
3
4
5
6
#on range les fleurs par taille de pétale
iris_arranged = arrange(iris,Petal.Length)
#on range selon un critère, puis un autre en cas d'égalité selon le premier critère 
iris_arranged = arrange(iris,Petal.Length,Petal.Width)
#par ordre descendant :
iris_arranged = arrange(iris,desc(Petal.Length))
Fusionner des jeux de données avec left_join()

On peut fusionner deux jeux de données qui ont une variable en commun avec la fonction left_joint() qui fonctionne ainsi :

1
2
3
#on fusionne deux jeux de données par une valeur commune
left_join(dataset1,dataset2, by = variable_commune)
#remarque : on pourrait bien entendu fusionner plus de deux jeux de données avec la même fonction

Généralement, on fusionne les jeux de données par les identifiants ou une variable qui joue ce rôle et qui est commune aux deux jeux de données. Par exemple, si on a un jeux de données avec le numéro de sécurité sociale et le revenu des gens et un second avec le numéro de sécurité sociale et l’âge, on peut les fusionner par la variable commune "numéro de sécurité sociale".

Remarque : S’il n’y a pas de variable commune ou qu’elle n’est pas exprimée dans la même unité, on peut avoir intérêt à transformer cette variable dans un des deux jeux de données pour les rendre compatibles.

Autres fonctions de Dplyr

Nous allons présenter ici deux autres fonctions utiles de Dplyr, qui servent à comprendre la structure de vos données plus qu’à les manipuler à proprement parler. Elles n’en sont pas moins utiles pour vous vous faire une meilleure idée de l’organisation de vos données.

Group_by()

La fonction group_by() permet d’indiquer le nombre de valeurs possibles prises par une variable du jeux de données. Elle renvoie les dimensions nombre_observations*valeurs_possibles.

1
2
#on veut savoir combien d’espèces de fleurs différentes sont présentes dans le jeux de données
group_by(iris,Species)
Summarise()

Permet de créer un vecteur qui va contenir plusieurs informations calculées a partir d’un jeux de données. C’est pratique pour gagner du temps et avoir un vecteur qui rassemble toute l’information.

1
2
#on calcule la moyenne des longueurs et des largeurs des pétales 
summarise(iris,mean(Petal.Length),mean(Petal.Width))

Le résultat s’affiche sous forme d’un tableau :

Sortie sous R-studio

Conclusion :

Nous avons vu dans cet article les principales fonctions de la librairie dplyr pour manipuler rapidement et facilement vos jeux de données. Cette librairie est l’une des plus utilisée en R en raison de sa rapidité à traiter des gros ensembles de données et par sa syntaxe claire et accessible, ce qui en fait en librairie indispensable à connaitre quand on débute avec R. Maintenant, vous devriez pouvoir l’utiliser pour traiter rapidement et efficacement vos données au lieu de réinventer la roue à chaque fois !

Aucun commentaire

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte