« Programmer en R/Manipuler un tableau de données » : différence entre les versions

Contenu supprimé Contenu ajouté
rédaction
Ligne 1 :
En R, les données tabulaires sont généralement modélisées dans des tableaux de données (<code>data.frame</code>). Un tableau de données est une liste dont tous les éléments sont des vecteurs de même taille.
 
La librairie tibble introduit une nouvelle classe pour les tableaux de données. Les tibbles se comportent exactement comme les data.frame. Les tibbles se comportent exactement comme les data.frame mais leurs options d'impression par défaut sont différentes<ref>http://r4ds.had.co.nz/tibbles.html#tibbles-vs.data.frame</ref>.
La librarie <code>dplyr</code> contient en ensemble de fonction pour manipuler les tableaux de données.
 
Développée par Hadley Wickham, la librarie <code>dplyr</code> a pour objectif de définir une grammaire pour la manipulation de données. Cette grammaire repose sur quelques verbes simples :
Dans cette section, nous prenons comme exemple le fichier des députés déposé par l'association [[w:Wikimédia France|Wikimédia France]] sur la plateforme [[w:data.gouv.fr|data.gouv.fr]]<ref>http://www.data.gouv.fr/fr/datasets/listes-de-personnalites-issues-de-wikidata-1/</ref>. Ce fichier est au format CSV. Pour l'importer, on utilise la fonction <code>read_csv()</code> de la librairie <code>readr</code>. Pour en savoir plus sur l'import des fichiers CSV, on peut consulter la page [[Programmation statistiques avec R/Importer un fichier CSV|Importer un fichier CSV]].
* select() permet de sélectionner les colonnes d'un jeu de données ;
* filter() permet de filter les lignes en fonction de conditions logiques (par exemple sélectionner les lignes où telle variable est supérieure à telle valeur, etc) ;
* rename() permet de renommer les variables ;
* summarise() permet de résumer ou synthétiser un jeu de données ;
* mutate() permet de définir de nouvelles variables ;
* arrange() permet de trier le tableau de données.
 
La librairie dplyr contient aussi la fonction group_by() qui permet d'effectuer chaque opération sur des sous-groupes du jeu de données.
 
La librairie tidyr permet de mettre en forme un jeu de données en passant notamment des données dont les valeurs sont réparties sur plusieurs colonnes dans un format long de type clé-valeur et inversement des données sous forme clé-valeur dans un format large<ref>http://vita.had.co.nz/papers/tidy-data.html</ref>. La librarie tidyr contient donc essentiellement deux fonctions :
* la fonction gather pour passer en mode clé-valeur
* la fonction spread pour passer en mode large
 
== Pré-requis ==
 
Pour cette section, il faut avoir installerinstallé <code>dplyr</code> et avoir importé la table des députés.
 
<source lang="rsplus">
library(tibble)
install.packages(c("dplyr", "readr"))
library(tidyr)
library(dplyr)
</source>
 
=== Examples ===
 
Dans cette section, nous prenons comme exemple le fichier des députés déposé par l'association [[w:Wikimédia France|Wikimédia France]] sur la plateforme [[w:data.gouv.fr|data.gouv.fr]]<ref>http://www.data.gouv.fr/fr/datasets/listes-de-personnalites-issues-de-wikidata-1/</ref>. Ce fichier est au format CSV. Pour l'importer, on utilise la fonction <code>read_csv()</code> de la librairie <code>readr</code>. Pour en savoir plus sur l'import des fichiers CSV, on peut consulter la page [[Programmation statistiques avec R/Importer un fichier CSV|Importer un fichier CSV]].
 
<source lang="rsplus">
library(readr)
table_deputes <- read_csv("data/deputes.csv")
Ligne 23 ⟶ 43 :
 
<source>
> table_deputes %>%
+ glimpse()
Observations: 575
Ligne 49 ⟶ 69 :
== Filtrer les lignes ==
 
La fonction <code>filter()</code> permet de filtrer la table en fonction d'une condition logique.
 
Par exemple, sur la table des députés, on peut filtrer la table pour ne garder que les députés de genre féminin :
 
<source lang="rsplus">
> table_deputes %>%
+ filter(genre == "féminin")
# A tibble: 150 × 10
Ligne 77 ⟶ 97 :
<source lang="rsplus">
library(lubridate)
> table_deputes %>%
+ filter(genre == "féminin", year(date_naissance) >= 1976)
# A tibble: 9 × 10
Ligne 121 ⟶ 141 :
 
<source>
table_deputes %>%
select(nom_famille, prenom, genre)
</source>
 
On peut aussi utiliser des fonctions pour sélectionner rapidement plusieurs colonnes.
 
* La fonction <code>starts_with()</code> sélectionne toutes les colonnes dont les noms commencent par une chaîne de caractères donnée.
Ligne 132 ⟶ 152 :
 
<source>
> table_deputes %>%
+ select(starts_with("nom")) %>%
+ head(n = 2)
# A tibble: 2 × 2
Ligne 140 ⟶ 160 :
1 François Fillon Fillon
2 François de Rugy de Rugy
>
> table_deputes %>%
+ select(ends_with("naissance")) %>%
+ head(n = 2)
# A tibble: 2 × 2
Ligne 149 ⟶ 169 :
1 1954-03-04 Le Mans
2 1973-12-06 Nantes
>
> table_deputes %>%
+ select(contains("nom")) %>%
+ head(n = 2)
# A tibble: 2 × 3
Ligne 166 ⟶ 186 :
<source>
> table_deputes %>% names()
[1] "nom" "genre" "prenom" "nom_famille" "date_naissance"
[6] "lieu_naissance" "circonscription" "sycomore_id" "wikidata" "frwiki"
</source>
 
Ligne 174 ⟶ 194 :
 
<source>
> table_deputes %>%
+ rename(frwikipedia = frwiki) %>%
+ names()
[1] "nom" "genre" "prenom" "nom_famille" "date_naissance"
[6] "lieu_naissance" "circonscription" "sycomore_id" "wikidata" "frwikipedia" </source>
 
Ligne 183 ⟶ 203 :
 
La fonction <code>arrange()</code> permet de trier le tableau de données en fonction des valeurs d'une ou plusieurs variables.
Par exemple, on peut trier le jeu de données des députés en fonction de la date de naissance des députés :
 
<source>
> table_deputes %>%
+ arrange(date_naissance) %>%
+ head()
# A tibble: 6 × 10
Ligne 204 ⟶ 224 :
 
<source>
> table_deputes %>%
+ arrange(desc(date_naissance)) %>%
+ head()
# A tibble: 6 × 10
Ligne 218 ⟶ 238 :
# ... with 4 more variables: circonscription <chr>, sycomore_id <int>, wikidata <chr>, frwiki <chr>
</source>
 
== Définir de nouvelles variables ==
 
La fonction mutate() permet de définir de nouvelles variables.
 
== Synthétiser un tableau de données ==
 
La fonction summarise() permet de synthétiser un jeu de données.
 
== Comprendre les opérations par sous-groupe ==
 
La librairie dplyr permet de définir des opérations sur des sous-groupes.
 
La fonction group_by() permet de définir les sous-groupes et la fonction ungroup() de revenir à un tableau de données non groupé.
 
La fonction group_by() peut être combiné avec mutate() et summarise().
 
 
== Voir aussi ==
 
* {{en}} : [https://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html Introduction to dplyr] par Hadley Wickham]
* {{en}} : [http://r4ds.had.co.nz/transform.html Data transformation] dans l'ouvrage ''R for Data Science'' de Garrett Grolemund et Hadley Wickham
Ligne 226 ⟶ 264 :
 
== Notes et références ==
 
<references/>