# Programmer en R/Manipuler un tableau de données

* Introduction
** Faire ses premiers pas
** Installer R
** Choisir son environnement de travail
** Installer des librairies
** Se documenter
* Manipulation et mise en forme des données
** Manipuler les nombres
** Manipuler les vecteurs
** Manipuler les chaînes de caractères
** Manipuler les facteurs
** Manipuler les dates et les heures
** Manipuler un tableau de données
** Manipuler une liste
* Importation et exportation des données
** Importer un fichier CSV
** Résoudre les problèmes d'encodage des caractères
** Importer un fichier TSV
** Importer un fichier texte à largeur fixe
** Importer des données depuis un tableur
** Import un fichier JSON
** Extraire des données d'une page web
* Visualisation de données
** Comprendre la grammaire des graphiques
** Représenter une carte
** Visualiser une carte choroplèthe
* Modélisation statistique
** Estimer un modèle de régression linéaire
** Estimer un modèle de régression circulaire
* Communication
* Programmation avancée
** Programmer une boucle
** Programmer une fonction
* Outils mathématiques
** Optimiser une fonction
** Manipuler les matrices
** Les fonctions statistiques de base
** Les loi de probabilités, ajustement et test
* Introduction
** Faire ses premiers pas
** Installer R
** Choisir son environnement de travail
** Installer des librairies
** Se documenter
* Manipulation et mise en forme des données
** Manipuler les nombres
** Manipuler les vecteurs
** Manipuler les chaînes de caractères
** Manipuler les facteurs
** Manipuler les dates et les heures
** Manipuler un tableau de données
** Manipuler une liste
* Importation et exportation des données
** Importer un fichier CSV
** Résoudre les problèmes d'encodage des caractères
** Importer un fichier TSV
** Importer un fichier texte à largeur fixe
** Importer des données depuis un tableur
** Import un fichier JSON
** Extraire des données d'une page web
* Visualisation de données
** Comprendre la grammaire des graphiques
** Représenter une carte
** Visualiser une carte choroplèthe
* Modélisation statistique
** Estimer un modèle de régression linéaire
** Estimer un modèle de régression circulaire
* Communication
* Programmation avancée
** Programmer une boucle
** Programmer une fonction
* Outils mathématiques
** Optimiser une fonction
** Manipuler les matrices
** Les fonctions statistiques de base
** Les loi de probabilités, ajustement et test
[ Modifier le sommaire ]
En R, les données tabulaires sont généralement modélisées dans des tableaux de données (data.frame). 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 mais leurs options d'impression par défaut sont différentes.
Développée par Hadley Wickham, la librarie dplyr a pour objectif de définir une grammaire pour la manipulation de données. Cette grammaire repose sur quelques verbes simples :
* select permet de sélectionner les colonnes d'un jeu de données ;
* filter permet de filtrer 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. 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 installé dplyr.

### Exemples

Dans cette section, nous prenons comme exemple le fichier des députés déposé par l'association Wikimédia France sur la plateforme data.gouv.fr. Ce fichier est au format CSV. Pour l'importer, on utilise la fonction read_csv de la librairie readr. Pour en savoir plus sur l'import des fichiers CSV, on peut consulter la page Importer un fichier CSV.

## Afficher un aperçu

* La fonction glimpse permet d'afficher un aperçu du tableau de données avec le nombre d'observations, le nombre de variables, le nom, le type et les premières valeurs de chacune des colonnes.
* La fonction str produit un résultat similaire
* La fonction head permet d'afficher les premières lignes d'un tableau de données

## Parcourir les données

Pour parcourir les données, on utilise la fonction View.

## Filtrer les lignes

La fonction filter 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 :
On peut aussi combiner plusieurs conditions. Dans l'exemple suivant, on filtre les députés de genre féminin dont l'année de naissance est postérieure à 1976. On utilise la fonction year de la librairie lubridate pour extraire l'année de la date de naissance.
La fonction slice permet de filtrer un tableau de données en fonction des numéros de ligne.

## Sélectionner des variables

La fonction select permet de sélectionner les colonnes d'un tableau de données.
Par exemple, on peut sélectionner les colonnes "nom_famille", "prenom" et "genre" :
On peut aussi utiliser des fonctions pour sélectionner rapidement plusieurs colonnes.
* La fonction starts_with sélectionne toutes les colonnes dont les noms commencent par une chaîne de caractères donnée.
* La fonction ends_with sélectionne toutes les colonnes dont les noms se terminent par une chaîne de caractères donnée.
* La fonction contains sélectionne toutes les colonnes dont les noms comprennent une chaîne de caractère donnée.

## Renommer les variables

La fonction names permet d'afficher les noms de variables.
La fonction rename permet de renommer certaines variables d'un tableau de données. Par exemple, on peut renommer la variable frwiki en frwikipedia.

## Trier le tableau de données

La fonction arrange 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 :
Par défaut, la fonction arrange trie les valeurs par ordre ascendant. Pour trier les valeurs par ordre descendant, on peut combiner avec la fonction desc.

## Définir de nouvelles variables

La fonction mutate permet de définir de nouvelles variables.
Par exemple, sur la table des députés, on a la date de naissance. On peut calculer donc calculer l'âge des députés. Pour calculer l'âge, on utilise plusieurs fonction de la librairie lubridate. La fonction today donne la date d'aujourd'hui. La fonction interval permet de définir un intervalle de temps entre deux dates. Enfin, la fonction time_length permet de convertir un intervalle de temps en un nombre dans une unité donnée. Ici, on choisit d'exprimer l'âge en année. Dans l'exemple, on combine aussi avec les fonctions select et glimpse pour afficher un aperçu du nouveau jeu de données avec la nouvelle variable.

## Synthétiser un tableau de données

La fonction summarise permet de synthétiser un jeu de données.
On peut par exemple reprendre l'exemple précédent et calculer l'âge moyen des députés. Pour cela, il suffit de définir la variable age = mean(age) dans la fonction summarise.
On peut aussi calculer d'autres indicateurs comme l'écart-type, le minimum et le maximum :

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

* anglais : Introduction to dplyr par Hadley Wickham]
* anglais : Data transformation dans l'ouvrage R for Data Science de Garrett Grolemund et Hadley Wickham
* Listes et tableaux de données sur le site Introduction à l'analyse d'enquêtes avec R et RStudio
* anglais : Tibbles dans l'ouvrage R for Data Science de Garrett Grolemund et Hadley Wickham

## Notes et références

* ↑ http://r4ds.had.co.nz/tibbles.html#tibbles-vs.data.frame
* ↑ http://vita.had.co.nz/papers/tidy-data.html
* ↑ http://www.data.gouv.fr/fr/datasets/listes-de-personnalites-issues-de-wikidata-1/