Premières analyses de données

L3 économie-finance

Elias Bouacida

Université Paris 8

15 octobre 2024

Premier travail avec les données

Données d’exemple

Nous utiliserons dans ce cours des données issues de l’INSEE : la base “Histoires de vie 2003

La base est disponible dans la librairie questionr. Il faut donc d’abord installer la librairie questionr, puis la charger à l’aide de la commande library(questionr).

install.packages("questionr")
library(questionr)

Pour dire à R de l’utiliser, on utilise la fonction data :

data(hdv2003)

Visualiser les données

Vous pouvez voir dans l’onglet “Environment” que la base de donnée comprend 2000 observations, et 21 variables.

Si vous souhaitez voir le contenu de la base, vous pouvez utiliser la commande View() :

View(hdv2003)

Cette base de donnée est un data.frame : un tableau de valeurs

Assignation

Un data.frame est une valeur comme une autre, on peut donc l’assigner :

d <- hdv2003

Exploration des données

Structure du tableau

Un tableau étant un objet comme un autre, on peut lui appliquer des fonctions. Par exemple, nrow() et ncol() retournent le nombre de lignes et de colonnes du tableau. dim() renvoie les deux :

nrow(d)
[1] 2000
ncol(d)
[1] 20
dim(d)
[1] 2000   20

Nom des colonnes

La fonction names() retourne les noms des colonnes du tableau, c’est-à-dire la liste des variables.

names(d)
 [1] "id"            "age"           "sexe"          "nivetud"      
 [5] "poids"         "occup"         "qualif"        "freres.soeurs"
 [9] "clso"          "relig"         "trav.imp"      "trav.satisf"  
[13] "hard.rock"     "lecture.bd"    "peche.chasse"  "cuisine"      
[17] "bricol"        "cinema"        "sport"         "heures.tv"    

Enfin, la fonction str() renvoie un descriptif plus détaillé de la structure du tableau. Elle liste les différentes variables, indique leur type et affiche les premières valeurs.

str(d)
'data.frame':   2000 obs. of  20 variables:
 $ id           : int  1 2 3 4 5 6 7 8 9 10 ...
 $ age          : int  28 23 59 34 71 35 60 47 20 28 ...
 $ sexe         : Factor w/ 2 levels "Homme","Femme": 2 2 1 1 2 2 2 1 2 1 ...
 $ nivetud      : Factor w/ 8 levels "N'a jamais fait d'etudes",..: 8 NA 3 8 3 6 3 6 NA 7 ...
 $ poids        : num  2634 9738 3994 5732 4329 ...
 $ occup        : Factor w/ 7 levels "Exerce une profession",..: 1 3 1 1 4 1 6 1 3 1 ...
 $ qualif       : Factor w/ 7 levels "Ouvrier specialise",..: 6 NA 3 3 6 6 2 2 NA 7 ...
 $ freres.soeurs: int  8 2 2 1 0 5 1 5 4 2 ...
 $ clso         : Factor w/ 3 levels "Oui","Non","Ne sait pas": 1 1 2 2 1 2 1 2 1 2 ...
 $ relig        : Factor w/ 6 levels "Pratiquant regulier",..: 4 4 4 3 1 4 3 4 3 2 ...
 $ trav.imp     : Factor w/ 4 levels "Le plus important",..: 4 NA 2 3 NA 1 NA 4 NA 3 ...
 $ trav.satisf  : Factor w/ 3 levels "Satisfaction",..: 2 NA 3 1 NA 3 NA 2 NA 1 ...
 $ hard.rock    : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
 $ lecture.bd   : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
 $ peche.chasse : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 2 2 1 1 ...
 $ cuisine      : Factor w/ 2 levels "Non","Oui": 2 1 1 2 1 1 2 2 1 1 ...
 $ bricol       : Factor w/ 2 levels "Non","Oui": 1 1 1 2 1 1 1 2 1 1 ...
 $ cinema       : Factor w/ 2 levels "Non","Oui": 1 2 1 2 1 2 1 1 2 2 ...
 $ sport        : Factor w/ 2 levels "Non","Oui": 1 2 2 2 1 2 1 1 1 2 ...
 $ heures.tv    : num  0 1 0 2 3 2 2.9 1 2 2 ...

Accéder aux variables

On se réfère aux variables (au sein du tableau) à l’aide de l’opérateur $, qui permet d’accéder aux colonnes du tableau. On utilisera la syntaxe nom_de_la_base$nom_de_la_variable pour désigner une variable particulière d’une base de données.

Par exemple, on peut utiliser la fonction head() pour afficher les premières valeurs de la variable age de la base stockée dans l’objet hdv2003.

head(d$age)
[1] 28 23 59 34 71 35
head(d$age, 10)
 [1] 28 23 59 34 71 35 60 47 20 28

Le deuxième argument, permet d’indiquer le nombre de valeurs à afficher.

Création de variables

On peut aussi utiliser l’opérateur $ pour créer une nouvelle variable dans notre base : pour cela, il suffit de lui assigner une valeur.

Par exemple, la variable heures.tv contient le nombre d’heures passées quotidiennement devant la télé.

head(d$heures.tv)
[1] 0 1 0 2 3 2

On peut vouloir créer une nouvelle variable dans notre tableau qui contienne la même durée convertie en minutes.

On va donc créer une nouvelle variables minutes.tv de la manière suivante :

d$minutes.tv <- d$heures.tv * 60

On peut alors constater, qu’une nouvelle variable (une nouvelle colonne) a bien été ajoutée à la base de données.

head(d$minutes.tv)
[1]   0  60   0 120 180 120

Analyse univariée

Variable quantitative

Une variable quantitative est une variable de type numérique (un nombre) qui peut prendre un grand nombre de valeurs. On en a plusieurs dans notre jeu de données, notamment l’âge (variable age) ou le nombre d’heures passées devant la télé (heures.tv).

Indicateurs simples de centralités

On peut obtenir (et, si on le souhaite, sauver dans un objet) les valeurs de chaque élément avec les fonction min(), max(), median(), mean() et quantile() :

min(d$age)
[1] 18
max(d$age)
[1] 97
mean(d$age)
[1] 48.157
median(d$age)
[1] 48

Indicateurs de dispersion

Les indicateurs de dispersion permettent de mesurer si les valeurs sont plutôt regroupées ou au contraire plutôt dispersées.

L’indicateur le plus simple est l’étendue de la distribution, qui décrit l’écart maximal observé entre les observations :

max(d$age) - min(d$age)
[1] 79

Les indicateurs de dispersion les plus utilisés sont la variance ou, de manière équivalente, l’écart-type. On obtient la première avec la fonction var, et le second avec sd (abréviation de standard deviation).

var(d$age)
[1] 287.0249
sd(d$age)
[1] 16.94181

Quartiles

Une autre manière de mesurer la dispersion est de calculer les quartiles :

  • le premier quartile est la valeur pour laquelle on a 25% des observations en dessous et 75% au dessus ;
  • le deuxième quartile est la valeur pour laquelle on a 50% des observations en dessous et 50% au dessus (c’est donc la médiane) ;
  • le troisième quartile est la valeur pour laquelle on a 75% des observations en dessous et 25% au dessus.

On peut les calculer avec la fonction quantile :

## Premier quartile
quantile(d$age, prob = 0.25)
25% 
 35 
## Troisième quartile
quantile(d$age, prob = 0.75)
75% 
 60 

quantile prend deux arguments principaux : le vecteur dont on veut calculer le quantile, et un argument prob qui indique quel quantile on souhaite obtenir. prob prend une valeur entre 0 et 1 : 0.5 est la médiane, 0.25 le premier quartile, 0.1 le premier décile, etc.

Indicateurs numériques

Pour obtenir un résumé concis d’une variable, on peut utiliser la commande summary() :

summary(d$heures.tv)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  0.000   1.000   2.000   2.247   3.000  12.000       5 
summary(d$age)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  18.00   35.00   48.00   48.16   60.00   97.00 

summary() donne le minimum, le maximum, la moyenne, les premier second (médiane) et troisième quartile de la distribution. La dernière valeur donne, s’il y en a, le nombre de valeurs manquantes (NA) pour la variable.

Valeurs manquantes

Si la variable examinée contient des valeurs manquante, il convient d’inclure l’option na.rm=TRUE dans l’appel de la fonction :

mean(d$heures.tv)
[1] NA
mean(d$heures.tv, na.rm=TRUE)
[1] 2.246566

Variables qualitatives

Variable qualitative

Une variable qualitative est une variable qui ne peut prendre qu’un nombre limité de valeurs, appelées modalités. Dans notre jeu de données on trouvera par exemple le sexe (sexe), le niveau d’études (nivetud), la catégorie socio-professionnelle (qualif)…

À noter qu’une variable qualitative peut tout-à-fait être numérique, et que certaines variables peuvent être traitées soit comme quantitatives, soit comme qualitatives : c’est le cas par exemple du nombre d’enfants ou du nombre de frères et sœurs.

Tri à plat

L’outil le plus utilisé pour représenter la répartition des valeurs d’une variable qualitative est le tri à plat : il s’agit simplement de compter, pour chacune des valeurs possibles de la variable (pour chacune des modalités), le nombre d’observations ayant cette valeur. Un tri à plat s’obtient sous R à l’aide de la fonction table.

table(d$sexe)

Homme Femme 
  899  1101 

Ce tableau nous indique donc que parmi nos enquêtés on trouve 899 hommes et 1101 femmes.

table(d$qualif)

      Ouvrier specialise         Ouvrier qualifie               Technicien 
                     203                      292                       86 
Profession intermediaire                    Cadre                  Employe 
                     160                      260                      594 
                   Autre 
                      58 

Tri

Un tableau de ce type peut être affiché ou stocké dans un objet, et on peut à son tour lui appliquer des fonctions. Par exemple, la fonction sort permet de trier le tableau selon la valeur de l’effectif.

tab <- table(d$qualif)
sort(tab)

                   Autre               Technicien Profession intermediaire 
                      58                       86                      160 
      Ouvrier specialise                    Cadre         Ouvrier qualifie 
                     203                      260                      292 
                 Employe 
                     594 

Avertissement

Attention, par défaut la fonction table n’affiche pas les valeurs manquantes (NA). Si on souhaite les inclure il faut utiliser l’argument useNA = "always", soit : table(d$qualif, useNA = "always").

Summary

À noter qu’on peut aussi appliquer summary à une variable qualitative. Le résultat est également le tri à plat de la variable, avec en plus le nombre de valeurs manquantes éventuelles.

summary(d$qualif)
      Ouvrier specialise         Ouvrier qualifie               Technicien 
                     203                      292                       86 
Profession intermediaire                    Cadre                  Employe 
                     160                      260                      594 
                   Autre                     NA's 
                      58                      347 

Analyse bivariée

Croisement de deux variables qualitatives

Faire une analyse bivariée, c’est étudier la relation entre deux variables : sont-elles liées ? les valeurs de l’une influencent-elles les valeurs de l’autre ? ou sont-elles au contraire indépendantes ?

On étudie les corrélations entre variables.

Tableaux croisés

Quand on veut croiser deux variables qualitatives, on fait un tableau croisé. Comme pour un tri à plat ceci s’obtient avec la fonction table de R, mais à laquelle on passe cette fois deux variables en argument. Par exemple, si on veut croiser la catégorie socio-professionnelle et le sexe des enquêtés :

table(d$qualif, d$sexe)
                          
                           Homme Femme
  Ouvrier specialise          96   107
  Ouvrier qualifie           229    63
  Technicien                  66    20
  Profession intermediaire    88    72
  Cadre                      145   115
  Employe                     96   498
  Autre                       21    37

Pour pouvoir interpréter ce tableau on doit passer du tableau en effectifs au tableau en pourcentages ligne ou colonne. Pour cela, on peut utiliser les fonctions lprop et cprop de l’extension questionr, qu’on applique au tableau croisé précédent.

Pour calculer les pourcentages ligne :

tab <- table(d$qualif, d$sexe)
lprop(tab)
                          
                           Homme Femme Total
  Ouvrier specialise        47.3  52.7 100.0
  Ouvrier qualifie          78.4  21.6 100.0
  Technicien                76.7  23.3 100.0
  Profession intermediaire  55.0  45.0 100.0
  Cadre                     55.8  44.2 100.0
  Employe                   16.2  83.8 100.0
  Autre                     36.2  63.8 100.0
  All                       44.8  55.2 100.0

Et pour les pourcentages colonne :

cprop(tab)
                          
                           Homme Femme All  
  Ouvrier specialise        13.0  11.7  12.3
  Ouvrier qualifie          30.9   6.9  17.7
  Technicien                 8.9   2.2   5.2
  Profession intermediaire  11.9   7.9   9.7
  Cadre                     19.6  12.6  15.7
  Employe                   13.0  54.6  35.9
  Autre                      2.8   4.1   3.5
  Total                    100.0 100.0 100.0