Introduction aux méthodes quantitatives avec

Chapitre 2: manipuler des données structurées

Chapitre introductif

Note

  • Exercices associés à ce chapitre ici

Introduction

  • centré autour du dataframe
  • Mais manipulations parfois un peu lourdes :
    • df$var: un peu lourd
    • df[,]: un peu trop calqué sur les matrices
  • Données textuelles: une base perfectible
    • Des outputs alambiqués
    • Des fonctionnalités manquantes par rapport à Python

La réponse: le tidyverse !

L’écosystème du tidyverse

La réponse: le tidyverse !

Un ensemble de packages développés par RStudio qui facilite :

  • La lecture (readr) et la manipulation de bases de données (dplyr)
  • L’exploitation de données textuelles (stringr), temporelles (lubridate) ou catégorielles (forcats)
  • La création de graphiques (ggplot2)
  • La programmation à partir de dataframes (purrr)
  • Et bien d’autres choses…

Le concept de données tidy

  • Chaque variable possède sa propre colonne ;
  • Chaque observation possède sa propre ligne ;
  • Une valeur, matérialisant une observation d’une variable, se trouve sur une unique cellule.

Note

Concept popularisé par Hadley Wickham.

readr

  • Le package pour lire des fichiers plats (.csv, .txt…)
  • Permet d’obtenir un tibble, le dataframe augmenté du tidyverse

dplyr

  • Le package central de l’écosystème de manipulation de données ;
  • Manipulation de données et statistiques descriptives ;

dplyr

Principaux verbes

On travaille sur un tibble (dataframe augmenté)

  • select() : sélectionner des variables par leur nom ;
  • rename() : renommer des variables ;
  • filter() : sélectionner des observations selon une ou plusieurs conditions ;
  • arrange() : trier la table selon une ou plusieurs variables ;
  • mutate() : ajouter des variables qui sont fonction d’autres variables ;
  • summarise() : calculer une statistique à partir de données ;
  • group_by() : faire des opérations par groupe.- `

dplyr

Manipulation de données

On enchaine des séquences avec les pipe (%>%)

library(doremifasol)
library(dplyr)

base_publique_equipements <- telechargerDonnees("BPE_ENS")
base_publique_equipements %>%
1  as_tibble() %>%
2  filter(TYPEQU == "B316") %>%
3  mutate(x = paste0(AN, "_", NB_EQUIP))
1
On convertit le dataframe standard en tibble
2
On ne garde que les stations services (valeurs B316 de TYPEQU)
3
On crée une nouvelle colonne en faisant référence à celles existantes (sans guillemets!)


Note

Plus de détails dans utilitR

dplyr

Statistiques agrégées

  • Logique du split-apply-combine avec groupby
Illustration du split-apply-combine
library(doremifasol)
library(dplyr)

base_publique_equipements <- telechargerDonnees("BPE_ENS")
base_publique_equipements %>%
1  as_tibble() %>%
2  filter(TYPEQU == "B316") %>%
3  group_by(DEP) %>%
4  summarise(nombre_station_serv = sum(NB_EQUIP, na.rm = TRUE))
1
On convertit le dataframe standard en tibble
2
On ne garde que les stations services (valeurs B316 de TYPEQU)
3
On définit DEP comme une variable de stratification pour définir des groupes
4
On résume les données en faisant la somme des stations services dans chaque groupe

ggplot

  • Le package indispensable pour faire des graphiques ❤️ ;
  • Approche cohérente et flexible basée sur la grammaire des graphiques
    • Objet d’un chapitre dédié

stringr, forcats et lubridate

  • Plein de fonctions facilitant la manipulation:
    • Données textuelles: stringr
    • Données catégorielles: forcats
    • Données temporelles: lubridate

Les formats de données

Généralités

  • Données peuvent être stockées dans de nombreux formats différents
    • Standards différents
    • Manières d’importer différentes
  • Fonctionnalités de limitées:
    • Packages spécialisés pour certains formats
    • Objectif: applatir l’information dans un dataframe

Note

On verra les formats géographiques, et leurs enjeux, ultérieurement

Le CSV

  • Format de fichier plat avec des colonnes délimitées:
    • Standard: , en délimitateur, . en décimale ;
    • Variante européenne 😮‍💨: ; en délimitateur, , en décimale
  • Format universel, simple d’utilisation (quelques limites)

Le CSV

  • Lecture avec la fonction read_csv du package readr!
1library(readr)
2read_csv("dossier_donnees/nom_fichier.csv")
1
On importe la librairie readr pour avoir accès à la fonction read_csv
2
On utilise read_csv pour lire les données stockées dans le chemin relatif dossier_donnees/nom_fichier.csv

Note

  • CSV avec délimitateur ;: fonction read_csv2.
  • Formats plats plus exotiques (.txt par exemple): read_delim

Plus de détails dans la documentation utilitR

Le JSON

  • Le format du web, notamment des API
    • API: on verra ça plus tard

Le JSON

  • Importé comme une liste hiérarchisée
  • Objectif: transformer cette information dans un dataframe tidy
    • Pas toujours évident !
1library(jsonlite)
2df <- fromJSON(file="dossier_donnees/nom_fichier.json")
1
On importe la librairie jsonlite pour avoir accès à la fonction fromJSON
2
On utilise fromJSON pour lire les données stockées dans le chemin relatif dossier_donnees/nom_fichier.csv

Les formats Excel

Les formats Excel

  • Format propriétaire

  • Mélange mise en forme et données brute

    • Pas approprié pour l’analyse de données
    • Dangereux pour la reproductibilité et la transparence
  • Plus de détails sur utilitR

Le pipe magrittr (%>%)

Le pipe magrittr (%>%)

Une manière de chaîner les opérations

library(dplyr)
library(doremifasol)

df <- filter(
  as_tibble(telechargerDonnees("BPE_ENS")),
  TYPEQU == "B316"
)

summarise(
  group_by(df, DEP),
  nombre_station_serv = sum(NB_EQUIP, na.rm = TRUE)
)
library(dplyr)
library(doremifasol)

telechargerDonnees("BPE_ENS") %>%
  as_tibble() %>%
  filter(TYPEQU == "B316") %>% 
  group_by(DEP) %>% 
  summarise(nombre_station_serv = sum(NB_EQUIP, na.rm = TRUE))