Section 2 Manipulation de la base

On peut maintenant regarder à quoi ressemble la table principale, celle des données.

RP %>% head() %>% gt()
COMMUNE ARM IRIS ACHL AEMM AEMMR AGEMEN8 ANEM ANEMR ASCEN BAIN BATI CATIRIS CATL CHAU CHFL CHOS CLIM CMBL CUIS DEROU DIPLM EAU EGOUL ELEC EMPLM GARL HLML ILETUDM ILTM IMMIM INAIM INEEM INP11M INP15M INP17M INP19M INP24M INP3M INP60M INP65M INP5M INP75M INPAM INPER INPER1 INPER2 INPOM INPSM IPONDL IRANM METRODOM NBPI RECHM REGION SANI SANIDOM SEXEM STAT_CONJM STOCD SURF TACTM TPM TRANSM TRIRIS TYPC TYPL VOIT WC
75056 75101 751010101 B12 2006 9 20 10 3 1 Z Z H 1 Z 3 Z Z 4 Z Z 17 Z Z Z ZZ 2 1 3 Z 2 1 2 0 1 1 2 2 0 0 0 0 0 1 3 2 1 1 2 2.7933037 1 M 02 9 11 2 ZZ 1 3 22 4 22 Z Z 750011 3 2 1 Z
75056 75101 751010101 B11 2015 9 25 1 0 2 Z Z H 1 Z 3 Z Z 4 Z Z 17 Z Z Z ZZ 2 2 Z Z 1 6 0 1 1 1 2 1 1 0 0 1 0 2 3 1 2 1 1 1.2335216 9 M 03 1 11 2 ZZ 2 1 21 4 12 Z Z 750011 3 2 0 Z
75056 75101 751010101 C115 0 0 YY 999 99 Y Z Z H 3 Z Y Z Z Y Z Z YY Z Z Z YY Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y 1.2335042 Y M YY Y 11 Y ZZ Y Y 0 Y YY Y Y 750011 Y 2 X Z
75056 75101 751010101 C115 2016 9 25 0 0 2 Z Z H 1 Z 2 Z Z 2 Z Z 18 Z Z Z 16 2 2 Z 1 2 3 0 0 0 0 2 0 0 0 0 0 0 2 2 1 1 1 0 1.2335216 5 M 02 Z 11 2 ZZ 1 2 21 2 11 1 5 750011 3 2 1 Z
75056 75101 751010101 C115 2015 9 20 1 0 2 Z Z H 1 Z 3 Z Z 4 Z Z 15 Z Z Z ZZ 2 1 1 Z 2 2 1 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 1 1.2335216 5 M 01 0 11 2 ZZ 2 6 22 1 22 Z Z 750011 3 2 0 Z
75056 75101 751010101 A11 2013 9 25 3 1 1 Z Z H 1 Z 1 Z Z 4 Z Z 17 Z Z Z 22 2 1 Z 1 1 6 0 1 1 1 2 1 1 0 0 1 0 2 3 1 2 2 0 0.8138559 1 M 03 Z 11 2 ZZ 1 1 22 4 11 1 6 750011 3 2 0 Z

La fonction str() ou son équivalent en langage dplyr la fonction glimpse nous donne la liste des variables avec cette fois leur format et leurs modalités (les premières seulement s’il y en a beaucoup).

# str(RP)
RP %>% glimpse()
Rows: 2,850,830
Columns: 69
$ COMMUNE    <int> 75056, 75056, 75056, 75056, 75056, 75056, 75056, 75056, 750~
$ ARM        <fct> 75101, 75101, 75101, 75101, 75101, 75101, 75101, 75101, 751~
$ IRIS       <fct> 751010101, 751010101, 751010101, 751010101, 751010101, 7510~
$ ACHL       <fct> B12, B11, C115, C115, C115, A11, A11, A11, A11, A11, A11, A~
$ AEMM       <int> 2006, 2015, 0, 2016, 2015, 2013, 2013, 2013, 2014, 2013, 20~
$ AEMMR      <int> 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7, 9,~
$ AGEMEN8    <fct> 20, 25, YY, 25, 20, 25, 55, 55, 40, 80, 40, 25, 25, 40, 25,~
$ ANEM       <int> 10, 1, 999, 0, 1, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 12, 3, 3, 2~
$ ANEMR      <int> 3, 0, 99, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 4, 0~
$ ASCEN      <fct> 1, 2, Y, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,~
$ BAIN       <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~
$ BATI       <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~
$ CATIRIS    <fct> H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H,~
$ CATL       <int> 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,~
$ CHAU       <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~
$ CHFL       <fct> 3, 3, Y, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 3, 3,~
$ CHOS       <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~
$ CLIM       <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~
$ CMBL       <fct> 4, 4, Y, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 2, 4, 4, 2, 4, 4,~
$ CUIS       <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~
$ DEROU      <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~
$ DIPLM      <fct> 17, 17, YY, 18, 15, 17, 13, 13, 12, 13, 01, 17, 17, 14, 17,~
$ EAU        <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~
$ EGOUL      <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~
$ ELEC       <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~
$ EMPLM      <fct> ZZ, ZZ, YY, 16, ZZ, 22, ZZ, ZZ, ZZ, ZZ, 16, 16, 16, 16, 16,~
$ GARL       <fct> 2, 2, Y, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,~
$ HLML       <fct> 1, 2, Y, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2,~
$ ILETUDM    <fct> 3, Z, Y, Z, 1, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~
$ ILTM       <fct> Z, Z, Y, 1, Z, 1, Z, Z, Z, Z, 1, 3, 3, 1, 3, Z, 1, Z, 1, 1,~
$ IMMIM      <fct> 2, 1, Y, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 2, 1, 2, 2, 2, 2, 2,~
$ INAIM      <fct> 1, 6, Y, 3, 2, 6, 1, 1, 1, 1, 6, 6, 6, 1, 6, 1, 6, 2, 1, 2,~
$ INEEM      <fct> 2, 0, Y, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,~
$ INP11M     <fct> 0, 1, Y, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 2, 0, 0, 0, 1, 0, 0,~
$ INP15M     <fct> 1, 1, Y, 0, 0, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 0, 0, 2, 0, 0,~
$ INP17M     <fct> 1, 1, Y, 0, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 0, 0, 1, 2, 0, 0,~
$ INP19M     <fct> 2, 2, Y, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1,~
$ INP24M     <fct> 2, 1, Y, 0, 1, 1, 0, 0, 2, 0, 2, 0, 0, 2, 0, 0, 2, 2, 0, 1,~
$ INP3M      <fct> 0, 1, Y, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,~
$ INP60M     <fct> 0, 0, Y, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0,~
$ INP65M     <fct> 0, 0, Y, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0,~
$ INP5M      <fct> 0, 1, Y, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,~
$ INP75M     <fct> 0, 0, Y, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
$ INPAM      <fct> 1, 2, Y, 2, 0, 2, 0, 0, 1, 0, 1, 1, 1, 2, 1, 0, 2, 1, 1, 1,~
$ INPER      <fct> 3, 3, Y, 2, 1, 3, 1, 1, 3, 1, 4, 1, 1, 4, 1, 1, 3, 3, 2, 1,~
$ INPER1     <fct> 2, 1, Y, 1, 0, 1, 1, 1, 2, 0, 3, 0, 0, 2, 0, 0, 0, 0, 1, 0,~
$ INPER2     <fct> 1, 2, Y, 1, 1, 2, 0, 0, 1, 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1,~
$ INPOM      <fct> 1, 1, Y, 1, 0, 2, 0, 0, 0, 0, 1, 1, 1, 2, 1, 0, 1, 0, 1, 1,~
$ INPSM      <fct> 2, 1, Y, 0, 1, 0, 0, 0, 2, 0, 2, 0, 0, 1, 0, 0, 2, 2, 0, 0,~
$ IPONDL     <dbl> 2.7933037, 1.2335216, 1.2335042, 1.2335216, 1.2335216, 0.81~
$ IRANM      <fct> 1, 9, Y, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4,~
$ METRODOM   <fct> M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M,~
$ NBPI       <fct> 02, 03, YY, 02, 01, 03, 01, 01, 03, 02, 04, 02, 02, 03, 02,~
$ RECHM      <fct> 9, 1, Y, Z, 0, Z, 9, 9, 2, 0, Z, Z, Z, Z, Z, 0, Z, 1, Z, Z,~
$ REGION     <int> 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,~
$ SANI       <fct> 2, 2, Y, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,~
$ SANIDOM    <fct> ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ,~
$ SEXEM      <fct> 1, 2, Y, 1, 2, 1, 1, 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 2, 1, 2,~
$ STAT_CONJM <fct> 3, 1, Y, 2, 6, 1, 6, 6, 6, 4, 1, 6, 6, 1, 6, 5, 6, 6, 1, 6,~
$ STOCD      <int> 22, 21, 0, 21, 22, 22, 22, 22, 22, 21, 22, 22, 22, 22, 22, ~
$ SURF       <fct> 4, 4, Y, 2, 1, 4, 1, 1, 4, 2, 4, 2, 2, 4, 2, 4, 3, 3, 5, 1,~
$ TACTM      <fct> 22, 12, YY, 11, 22, 11, 21, 21, 12, 21, 11, 11, 11, 11, 11,~
$ TPM        <fct> Z, Z, Y, 1, Z, 1, Z, Z, Z, Z, 1, 1, 1, 1, 1, Z, 1, Z, 1, 1,~
$ TRANSM     <fct> Z, Z, Y, 5, Z, 6, Z, Z, Z, Z, 6, 6, 6, 2, 6, Z, 6, Z, 5, 6,~
$ TRIRIS     <fct> 750011, 750011, 750011, 750011, 750011, 750011, 750011, 750~
$ TYPC       <fct> 3, 3, Y, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,~
$ TYPL       <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,~
$ VOIT       <fct> 1, 0, X, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,~
$ WC         <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z,~

Les variables sont en format, soit ‘int’ (“integer” -nombres entiers), soit ‘fct’ (“factor”), ou encore ‘dbl’ (“double” - nombres réels).
On remarque que la plupart des variables ont des modalités en chiffres et/ou lettres, ce qui signifie qu’il faudra probablement recoder ces modalités pour leur donner des libellés dans nos analyses descriptives (tableaux ou graphiques).

Par ailleurs, certaines variables ont été laissées en format ‘integer’ bien que l’on avait mis l’option stringsAsFactors=TRUE lors du chargement des données, or ces chiffres correspondent bien à des modalités d’une variable catégorielle, il faudra donc le corriger ultérieurement.

Dernière remarque, si on avait eu des valeurs manquantes sur certaines variables, elles se seraient ici affichées avec la modalité NA, cela ne semble pas le cas, à vérifier par la suite.

2.1 Format des données - WIDE ou LONG

La question du format de la table de données est importante, on distingue généralement le format wide du format long :

  • le premier renvoie au cas où chaque ligne correspond a un et un seul individu (ou autre niveau de l’analyse : une entreprise, un ménage, un logement, etc.), et toutes les informations le concernant sont données en colonnes (ce qui peut augmenter rapidement le nombre de colonnes), c’est l’exemple d’une information que l’on a sur plusieurs années, chaque colonne correspondant à l’information de l’année en question ;
  • le second, au contraire, multiplie les lignes pour un seul individu, mais il y a alors moins de colonnes, à partir du même exemple précédent, il y aura cette fois une colonne indiquant l’année et une colonne contenant l’information.

Ici, chaque ligne correspond à un logement auquel est associé un ménage (ou le contraire si vous préférez) ; on est bien dans un format wide.

En revanche, si on considère que notre niveau d’analyse est la commune, on voit alors qu’on dispose de plusieurs lignes par commune et si l’on veut garder quelques informations à ce niveau en n’ayant plus qu’une ligne par commune, on peut changer de format.

Le package tidyverse contient deux fonctions qui permettent de passer d’un format à un autre : pivot_longer() et pivot_wider() présentés en détails ici. Nous aurons l’occasion de les utiliser ultérieurement dans ce cours.

2.2 Sélectionner un champ réduit de la base, séparer les données

Manipuler une base de données, c’est aussi travailler ou créer une table réduite, surtout quand on a des données volumineuses comme ici : c’est donc choisir un champ particulier de la base.

On peut par exemple ici choisir un champ géographique plus réduit au sein de l’Île-de-France, à partir de la commune.

On peut aussi choisir de séparer les données en créant 2 tables selon l’information donnée : le logement ou la personne de référence du ménage.

Comme vous le savez très probablement, dans le langage tidyverse, pour faire des sélections sur les lignes ou observations dans une table de données, on utilise la fonction filter() ; pour faire des sélections sur les colonnes ou variables, on utilise la fonction select() ; pour supprimer des variables, on utilise également select() avec un “-” devant la (ou les) variable(s) à supprimer (dans le langage R de base, on peut aussi utiliser la fonction subset()).

EXERCICES :
Créer trois nouvelles bases selon les indications suivantes :

  • la première que vous nommerez “RP_Paris” et qui rassemblera les données pour le seul département de Paris ;
  • la deuxième que nous nommerez “RP_menage” et qui comprendra les données pour les seules variables relatives à la personne de référence du ménage ;
  • la troisième que vous nommerez “RP_log_Paris” et qui rassemblera les données pour le seul département de Paris et comprendra toutes les variables sauf celles relatives à la personne de référence du ménage.
RP_Paris <- RP %>% filter(COMMUNE == "75056")

RP_menage <- RP %>% select("AEMM", "AEMMR", "AGEMEN8", "ANEM", "ANEMR", "DIPLM", 
                           "EMPLM", "ILETUDM", "ILTM", "IMMIM", "INAIM", "IRANM",
                           "RECHM", "SEXEM", "STAT_CONJM", "TACTM", "TPM", "TRANSM")
  
RP_log_Paris <- RP %>% filter(COMMUNE == "75056") %>% 
                        select(-c("AEMM", "AEMMR", "AGEMEN8", "ANEM", "ANEMR", "DIPLM", 
                           "EMPLM", "ILETUDM", "ILTM", "IMMIM", "INAIM", "IRANM",
                           "RECHM", "SEXEM", "STAT_CONJM", "TACTM", "TPM", "TRANSM"))