Premier travail sur les données

Installer et charger les packages nécessaires à l’analyse

Afin de réaliser l’exercice proposé ici, nous allons utiliser 4 packages:

  • readr : plusieurs fonctions pour importer des fichiers plats (formats .txt, .csv, .tsv) ;
  • tidyverse : ensemble de packages R proposant une syntaxe cohérente qui facilitent l’utilisation de R pour la lecture, la gestion, la manipulation et la visualisation des données ;
  • questionr : fonctions utiles pour le traitement et l’analyse des données d’enquête. Le package propose notamment une interface graphique facilitant le recodage des variables ;
  • esquisse : addin-R qui permet de créer des graphiques ggplot2 de façon interactive, en “cliquer-glisser”.

Addin-R
Un addin-R est une extension de R Studio, qui s’installe comme un package, et qui permet de simplifier certaines manipulations.

Chacun de ces packages doit être téléchargés une seule fois (1), puis chargés à chaque démarrage de R (2).

  1. Pour télécharger ces packages, vous pouvez soit utiliser l’assistant d’installation de package Rstudio déjà présenté auparavant, soit écrire une ligne de commande. C’est cette dernière option que nous employons ici :
install.packages(c("readr", "tidyverse", "questionr", "esquisse"), dependencies = TRUE, repo="http://cran.rstudio.com/")
  1. Le code suivant permet ensuite de charger ces packages dans notre session :
library(readr) ; library(tidyverse) ; library(questionr) ; library(esquisse) 

Importer les données

R offre un grand nombre de fonctions et de packages pour importer des données depuis plusieurs formats qu’ils soient ouverts (.csv, .txt) ou propriétaires (.xlsx, .sasb7dat, .dta, etc). Après avoir réalisé quelques vérifications et modifications sur le fichier de données d’origine, la première étape avant l’importation est de repérer le format des données : données en texte brut (généralement .txt, .csv) ou données dans un format binaire, généralement propres à un logiciel spécifique (R: .RData, SAS : .sasb7dat, STATA : .dta, etc).

Vérifications à réaliser sur le fichier de données avant l’importation dans l’environnement R

Il est préférable de réaliser un certain nombre de vérifications, et le cas échéant de modifications, sur le fichier de données d’origine avant de l’importer dans l’environnement R :

  • chaque ligne devrait correspondre à une observation et chaque colonne à une variable (“tidy” data) ;
  • chaque cellule (croisement entre les colonnes et les lignes) devrait représenter une et une seule valeur (“tidy” data) ;
  • le libellé (nom) des variables ne doit pas comporter d’espace, d’accent, ou de caractères spéciaux et il ne doit pas commencer par un chiffre ;
  • le libellé de chacune des variables apparaît uniquement sur la première ligne ;
  • les données manquantes devraient être notées NA ou vide ;
  • pour les dates: dans les fichiers .xlsx, elles devraient suivre le format YYYY-MM-DD et être correctement typée au format “Date”. Pour les fichiers .csv, elles devraient suivre le format YYYY-MM-DD et être de type “Texte”.

Ici notre fichier de données nommé “ERFI1_FPA.csv” présent dans le sous-dossier data de notre projet ERFI1 est au format .csv.

Pour l’importation, nous allons utiliser l’interface RStudio permettant d’importer un fichier de données de manière interactive. Pour y accéder, allez dans l’onglet Environment, cliquez sur le bouton Import Dataset et sélectionnez "From Text (readr)".


Une nouvelle fenêtre s’affiche. Dans le champ File/URL tout en haut de cette fenêtre, vous devez renseigner l’emplacement du fichier à importer.


Un aperçu s’ouvre ensuite dans la partie Data Preview. Il vous permet de vérifier si l’import est correct (données correctement réparties dans les différentes colonnes, noms des variables sur une ligne, etc.) et de récupérer le code R permettant l’import de vos données. Il vous suffit ensuite de copier ce code, de cliquer sur Cancel dans l’assistant d’importation puis de coller le code d’importation au début de votre script (vous pouvez supprimer la ligne commençant par View).


library(readr)
ERFI1_FPA <- read_csv("materiel/ERFI1_FPA.csv")

Il est ensuite important de vérifier que l’importation a correctement été réalisée. L’objet dans lequel vous avez stocké les données (ici ERFI1_FPA) doit apparaître dans l’onglet Environment (quadrant supérieur droit). En double cliquant sur le nom de l’objet “ERFI1_FPA” un tableur s’ouvre dans la partie édition (quadrant supérieur gauche), avec des fonctions de filtre et de tri. Vous pouvez aussi taper dans la console la fonction View(ERFI1_FPA)qui permet de visualiser le contenu de votre tableau de données.

Quelle fonction d’importation utiliser en fonction du format du fichier de données?
  • Pour les fichiers .RData (format R), on utilise la fonction load()
  • Pour les fichiers au format «texte brut» (.csv, .txt), on utilise la famille de fonctions read.. L’utilisation d’une fonction en particulier dépend du format exact des données.
  • Pour les autres formats, consulter les packages foreign (fichier dBase), haven (fichier SAS, STATA, SPSS) et readxl (fichier Excel).

Description sommaire des données

Une fois l’importation correctement réalisée, plusieurs fonctions peuvent être utilisées pour inspecter notre jeu de données de classe data frame. Les plus connues sont :

  • dim(): renvoie le nombre de lignes (individus) et de colonnes (variables) d’un data frame ;
  • head(): affiche les 6 premières lignes d’un data frame ;
  • str(): fournit la classe de chacune des variables (numérique, catégorielle/facteur) ;
  • levels(): renseigne sur les modalités des différentes variables qualitatives ;
  • summary(): fournit quelques statistiques descriptives. Pour les variables de type numérique: minimum, premier quartile, médiane, moyenne, troisième quartile, maximum et nombre de valeurs manquante (NA pour Not Available). Pour les variables catégorielles, la fonction renvoie le nombre de données pour chaque modalité et le nombre données manquantes.

Les fonctions str, levels et summary peuvent être appliquées sur un jeu de données entier ou seulement sur une variable spécifique d’un jeu de données.

dim(ERFI1_FPA)
[1] 10079    86

Notre jeu de données comprend 10 079 lignes et 86 colonnes.

head(ERFI1_FPA)
# A tibble: 6 × 86
     id EA_HAB EA_LIT EA_MAL EA_JOUE EA_AID EA_EMM EA_SATTACHE OA_VAISS OA_REPAS
  <dbl>  <dbl>  <dbl>  <dbl>   <dbl>  <dbl>  <dbl>       <dbl>    <dbl>    <dbl>
1     1     NA     NA     NA      NA     NA     NA          NA       NA       NA
2     2     NA     NA     NA      NA     NA     NA          NA       NA       NA
3     3     NA     NA     NA      NA     NA     NA          NA       NA       NA
4     4      8      8      4       3      2      7           8        5        5
5     5     NA     NA     NA      NA     NA     NA          NA       NA       NA
6     6     NA     NA     NA      NA     NA     NA          NA        3        4
# ℹ 76 more variables: OA_ALIME <dbl>, OA_LINGE <dbl>, OA_ASPIR <dbl>,
#   OA_BRICO <dbl>, OA_COMPT <dbl>, OA_INVIT <dbl>, OA_SATREP <dbl>,
#   OB_DACHQUO <dbl>, OB_DACHEX <dbl>, OB_DEDUC <dbl>, OB_DLOISIR <dbl>,
#   OB_GESTION <dbl>, OC_SATREL <dbl>, OC_DESTAC <dbl>, VA_MARIDEP <dbl>,
#   VA_COHAB <dbl>, VA_MARITJS <dbl>, VA_DIVORC <dbl>, VA_FEMENF <dbl>,
#   VA_HOMENF <dbl>, VA_DEUXPAR <dbl>, VA_MERSEUL <dbl>, VA_EFTAUTO <dbl>,
#   VA_DROITHOMO <dbl>, VA_GPOCCPE <dbl>, VA_PARAIDENF <dbl>, …
str(ERFI1_FPA)
spc_tbl_ [10,079 × 86] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ id              : num [1:10079] 1 2 3 4 5 6 7 8 9 10 ...
 $ EA_HAB          : num [1:10079] NA NA NA 8 NA NA NA NA 4 NA ...
 $ EA_LIT          : num [1:10079] NA NA NA 8 NA NA NA NA 3 NA ...
 $ EA_MAL          : num [1:10079] NA NA NA 4 NA NA NA NA 5 NA ...
 $ EA_JOUE         : num [1:10079] NA NA NA 3 NA NA NA NA 4 NA ...
 $ EA_AID          : num [1:10079] NA NA NA 2 NA NA NA NA 97 NA ...
 $ EA_EMM          : num [1:10079] NA NA NA 7 NA NA NA NA 5 NA ...
 $ EA_SATTACHE     : num [1:10079] NA NA NA 8 NA NA NA NA 8 NA ...
 $ OA_VAISS        : num [1:10079] NA NA NA 5 NA 3 NA 1 3 2 ...
 $ OA_REPAS        : num [1:10079] NA NA NA 5 NA 4 NA 1 3 2 ...
 $ OA_ALIME        : num [1:10079] NA NA NA 3 NA 3 NA 1 4 2 ...
 $ OA_LINGE        : num [1:10079] NA NA NA 5 NA 3 NA 1 2 1 ...
 $ OA_ASPIR        : num [1:10079] NA NA NA 5 NA 3 NA 1 3 2 ...
 $ OA_BRICO        : num [1:10079] NA NA NA 1 NA 2 NA 3 1 5 ...
 $ OA_COMPT        : num [1:10079] NA NA NA 3 NA 1 NA 1 4 3 ...
 $ OA_INVIT        : num [1:10079] NA NA NA 3 NA 3 NA 1 3 3 ...
 $ OA_SATREP       : num [1:10079] NA NA NA 8 NA 10 NA 6 7 5 ...
 $ OB_DACHQUO      : num [1:10079] NA NA NA 5 NA 3 NA 1 3 3 ...
 $ OB_DACHEX       : num [1:10079] NA NA NA 3 NA 3 NA 3 4 4 ...
 $ OB_DEDUC        : num [1:10079] NA NA NA 3 NA NA NA NA 4 NA ...
 $ OB_DLOISIR      : num [1:10079] NA NA NA 3 NA 3 NA 3 3 3 ...
 $ OB_GESTION      : num [1:10079] NA NA NA 3 NA 6 NA 1 3 4 ...
 $ OC_SATREL       : num [1:10079] NA NA 10 NA NA NA NA 8 9 8 ...
 $ OC_DESTAC       : num [1:10079] NA NA 1 1 NA 1 NA 2 2 3 ...
 $ VA_MARIDEP      : num [1:10079] 3 3 1 1 5 1 2 5 5 2 ...
 $ VA_COHAB        : num [1:10079] 3 3 1 1 3 1 2 2 1 2 ...
 $ VA_MARITJS      : num [1:10079] 3 2 5 1 3 5 4 1 2 2 ...
 $ VA_DIVORC       : num [1:10079] 2 2 1 1 1 1 2 1 2 1 ...
 $ VA_FEMENF       : num [1:10079] 3 3 5 3 3 5 4 1 1 2 ...
 $ VA_HOMENF       : num [1:10079] 3 3 2 3 3 5 4 2 1 2 ...
 $ VA_DEUXPAR      : num [1:10079] 2 2 2 1 3 2 2 2 1 2 ...
 $ VA_MERSEUL      : num [1:10079] 3 2 2 1 5 1 2 4 3 4 ...
 $ VA_EFTAUTO      : num [1:10079] 2 2 3 1 1 3 1 4 2 2 ...
 $ VA_DROITHOMO    : num [1:10079] 3 2 1 1 2 2 1 3 2 4 ...
 $ VA_GPOCCPE      : num [1:10079] 2 2 4 1 1 5 1 4 2 1 ...
 $ VA_PARAIDENF    : num [1:10079] 2 2 2 1 1 2 1 2 2 2 ...
 $ VA_PARENCH      : num [1:10079] 3 2 2 1 1 5 1 4 4 4 ...
 $ VA_ENRESPAR     : num [1:10079] 2 2 3 1 1 5 2 3 2 2 ...
 $ VA_ENFCH        : num [1:10079] 3 2 4 5 5 5 2 5 4 4 ...
 $ VA_FILLEFILS    : num [1:10079] 4 4 5 5 5 5 2 5 4 5 ...
 $ VA_ENFAIDPAR    : num [1:10079] 2 2 2 1 1 3 2 2 2 3 ...
 $ VA_ACCPAR       : num [1:10079] 2 2 5 1 1 5 2 2 2 2 ...
 $ VA_DIFFAGE      : num [1:10079] 3 3 3 5 5 5 3 4 3 5 ...
 $ VA_REVFE        : num [1:10079] 4 3 5 5 4 5 5 5 5 4 ...
 $ VA_DEPFE        : num [1:10079] 2 4 1 3 1 1 1 1 3 2 ...
 $ VA_FOYEPAN      : num [1:10079] 3 2 4 1 1 2 1 2 3 1 ...
 $ VA_HOMPOL       : num [1:10079] 3 3 5 5 5 5 4 4 3 4 ...
 $ VA_ENFMERAC     : num [1:10079] 2 3 4 4 1 1 1 1 3 1 ...
 $ VA_ENFPERAC     : num [1:10079] 2 3 4 5 1 2 3 1 4 2 ...
 $ VA_DIVGARD      : num [1:10079] 3 2 2 2 5 5 3 1 4 1 ...
 $ VA_HOMPRIO      : num [1:10079] 5 4 5 5 9 5 4 1 5 5 ...
 $ VA_PARPRIO      : num [1:10079] 2 4 3 5 2 2 4 1 3 1 ...
 $ VA_JEUPRIO      : num [1:10079] 3 4 3 1 5 5 3 3 4 2 ...
 $ VA_QPERSAGE     : num [1:10079] 3 3 2 5 3 4 2 5 3 3 ...
 $ VA_QENFPS       : num [1:10079] 4 4 4 5 5 5 4 4 4 2 ...
 $ VA_QENFSCO      : num [1:10079] 3 5 3 5 5 5 5 5 3 3 ...
 $ VA_QFINPERSA    : num [1:10079] 2 1 2 5 3 3 4 3 1 1 ...
 $ VA_QFINPAREN    : num [1:10079] 2 2 4 2 3 3 4 3 2 1 ...
 $ MA_AGEMQ        : num [1:10079] 10 7 4 8 7 10 14 11 8 6 ...
 $ MC_DIPLOME      : num [1:10079] 8 6 6 4 8 4 8 4 4 5 ...
 $ PF_PCSM8        : num [1:10079] NA 4 NA NA NA 5 2 NA NA NA ...
 $ PF_PCSP8        : num [1:10079] 3 1 6 NA NA 2 2 4 6 4 ...
 $ CA_DIPLOME      : num [1:10079] NA NA NA 1 NA 4 NA 3 5 5 ...
 $ EA_VERIFC       : num [1:10079] 2 2 2 1 2 1 2 1 1 1 ...
 $ poids12         : num [1:10079] 3038 2396 3064 3869 3489 ...
 $ PA_DURMTRA      : num [1:10079] 300 2 135 10 NA 15 NA 450 30 45 ...
 $ PB_DURMTRA      : num [1:10079] 300 2 135 NA 720 15 NA NA 30 10 ...
 $ MA_SEXE         : num [1:10079] 1 2 2 1 1 1 1 2 1 2 ...
 $ AH_CS8          : num [1:10079] 3 5 8 6 4 5 7 8 5 5 ...
 $ PF_AGEDEPFOY_rec: num [1:10079] 23 30 18 24 8 22 20 20 30 21 ...
 $ PF_AVECQUI_rec  : num [1:10079] 1 1 1 2 6 1 1 1 1 3 ...
 $ PE_NBFSV_rec    : num [1:10079] 2 1 1 5 5 NA 1 5 3 3 ...
 $ PA_VERIFCOH_rec : num [1:10079] 4 4 4 4 4 4 4 4 4 4 ...
 $ PA_FQAVM_rec    : num [1:10079] 1 2 1 2 NA 1 NA 1 2 1 ...
 $ PB_FQAVP_rec    : num [1:10079] 1 2 1 NA 1 1 NA NA 2 2 ...
 $ PA_MEREBV_rec   : num [1:10079] 1 1 1 1 2 1 2 1 1 1 ...
 $ PB_PEREBV_rec   : num [1:10079] 1 1 1 2 1 1 2 2 1 1 ...
 $ TYPFAM3_rec     : num [1:10079] 1 1 1 4 1 3 1 3 4 3 ...
 $ EA_ADULT16_rec  : num [1:10079] 2 2 2 2 2 2 2 2 2 2 ...
 $ NBENF14_rec     : num [1:10079] 2 2 2 1 2 2 2 2 1 2 ...
 $ NBENF3_rec      : num [1:10079] 2 2 2 2 2 2 2 2 1 2 ...
 $ MA_ACT_rec      : num [1:10079] 2 2 2 2 2 2 2 2 2 2 ...
 $ NBENFTOTM_rec   : num [1:10079] 0 0 0 2 0 0 0 0 2 0 ...
 $ EA_AUTPERS_rec  : num [1:10079] NA NA NA 1 NA NA NA NA 3 NA ...
 $ OA_AUTPERS_rec  : num [1:10079] NA NA NA 1 NA 3 NA 3 3 3 ...
 $ MA_AGEM_rec     : num [1:10079] 48 34 19 36 31 48 66 50 37 28 ...
 - attr(*, "spec")=
  .. cols(
  ..   id = col_double(),
  ..   EA_HAB = col_double(),
  ..   EA_LIT = col_double(),
  ..   EA_MAL = col_double(),
  ..   EA_JOUE = col_double(),
  ..   EA_AID = col_double(),
  ..   EA_EMM = col_double(),
  ..   EA_SATTACHE = col_double(),
  ..   OA_VAISS = col_double(),
  ..   OA_REPAS = col_double(),
  ..   OA_ALIME = col_double(),
  ..   OA_LINGE = col_double(),
  ..   OA_ASPIR = col_double(),
  ..   OA_BRICO = col_double(),
  ..   OA_COMPT = col_double(),
  ..   OA_INVIT = col_double(),
  ..   OA_SATREP = col_double(),
  ..   OB_DACHQUO = col_double(),
  ..   OB_DACHEX = col_double(),
  ..   OB_DEDUC = col_double(),
  ..   OB_DLOISIR = col_double(),
  ..   OB_GESTION = col_double(),
  ..   OC_SATREL = col_double(),
  ..   OC_DESTAC = col_double(),
  ..   VA_MARIDEP = col_double(),
  ..   VA_COHAB = col_double(),
  ..   VA_MARITJS = col_double(),
  ..   VA_DIVORC = col_double(),
  ..   VA_FEMENF = col_double(),
  ..   VA_HOMENF = col_double(),
  ..   VA_DEUXPAR = col_double(),
  ..   VA_MERSEUL = col_double(),
  ..   VA_EFTAUTO = col_double(),
  ..   VA_DROITHOMO = col_double(),
  ..   VA_GPOCCPE = col_double(),
  ..   VA_PARAIDENF = col_double(),
  ..   VA_PARENCH = col_double(),
  ..   VA_ENRESPAR = col_double(),
  ..   VA_ENFCH = col_double(),
  ..   VA_FILLEFILS = col_double(),
  ..   VA_ENFAIDPAR = col_double(),
  ..   VA_ACCPAR = col_double(),
  ..   VA_DIFFAGE = col_double(),
  ..   VA_REVFE = col_double(),
  ..   VA_DEPFE = col_double(),
  ..   VA_FOYEPAN = col_double(),
  ..   VA_HOMPOL = col_double(),
  ..   VA_ENFMERAC = col_double(),
  ..   VA_ENFPERAC = col_double(),
  ..   VA_DIVGARD = col_double(),
  ..   VA_HOMPRIO = col_double(),
  ..   VA_PARPRIO = col_double(),
  ..   VA_JEUPRIO = col_double(),
  ..   VA_QPERSAGE = col_double(),
  ..   VA_QENFPS = col_double(),
  ..   VA_QENFSCO = col_double(),
  ..   VA_QFINPERSA = col_double(),
  ..   VA_QFINPAREN = col_double(),
  ..   MA_AGEMQ = col_double(),
  ..   MC_DIPLOME = col_double(),
  ..   PF_PCSM8 = col_double(),
  ..   PF_PCSP8 = col_double(),
  ..   CA_DIPLOME = col_double(),
  ..   EA_VERIFC = col_double(),
  ..   poids12 = col_double(),
  ..   PA_DURMTRA = col_double(),
  ..   PB_DURMTRA = col_double(),
  ..   MA_SEXE = col_double(),
  ..   AH_CS8 = col_double(),
  ..   PF_AGEDEPFOY_rec = col_double(),
  ..   PF_AVECQUI_rec = col_double(),
  ..   PE_NBFSV_rec = col_double(),
  ..   PA_VERIFCOH_rec = col_double(),
  ..   PA_FQAVM_rec = col_double(),
  ..   PB_FQAVP_rec = col_double(),
  ..   PA_MEREBV_rec = col_double(),
  ..   PB_PEREBV_rec = col_double(),
  ..   TYPFAM3_rec = col_double(),
  ..   EA_ADULT16_rec = col_double(),
  ..   NBENF14_rec = col_double(),
  ..   NBENF3_rec = col_double(),
  ..   MA_ACT_rec = col_double(),
  ..   NBENFTOTM_rec = col_double(),
  ..   EA_AUTPERS_rec = col_double(),
  ..   OA_AUTPERS_rec = col_double(),
  ..   MA_AGEM_rec = col_double()
  .. )
 - attr(*, "problems")=<externalptr> 
Avertissement

Les variables catégorielles de notre jeu de données (par exemple MC_DIPLOME) qui sont codées avec des numéros pour chaque modalité sont identifiées par R en tant que variables numériques. Cela signifie que R appliquera par défaut sur ces variables, les fonctions et les opérations pour les variables de type numérique et non catégoriel.

Exemple avec la fonction summary qui calcule un certain nombre de statistiques descriptives en fonction du type des variables

summary(ERFI1_FPA$MC_DIPLOME)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.000   2.000   4.000   4.469   7.000   8.000 


La famille de fonctions as.*(nom_variable)

On peut convertir un vecteur (colonne/variable) d’un type/mode à un autre grâce la famille de fonctions as.*(nom_variable). Il est par exemple possible d’utiliser la fonction as.character(nom_variable) pour changer un vecteur en mode character, la fonction as.numeric(nom_variable) pour changer un vecteur en mode numeric ou encore as.logical(nom_variable) pour changer un vecteur en mode logique/booléen. Les valeurs qui ne peuvent pas être converties sont automatiquement transformées en NA.

Quelques exemples

Conversion d’une variable numérique en caractère
On utilise la fonction as.character(nom_variable). Chaque valeur numérique de df1$var1 devient alors une chaîne de caractères (1 devient “1”)

class (df1$var1)
[1] "integer"
print (df1$var1)
 [1]  1  2  3  4  5  6  7  8  9 10
#Numeric en character
df1$var1 <- as.character(df1$var1)
class(df1$var1)
[1] "character"

Conversion d’une variable logique en numérique
On utilise la fonction as.numeric(nom_variable). TRUE devient 1, FALSE devient 0.

class (df1$var3)
[1] "logical"
print (df1$var3)
 [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE
#Logical en numeric
df1$var3 <- as.numeric(df1$var3)
print(df1$var3)
 [1] 1 0 1 0 1 0 1 0 1 0