4 nouvelles fonctions pour la description de vos données

analyse descriptive avec R

Un petit post pour vous parler de 4 nouvelles fonctions que j’ai découvertes récemment, et qui sont géniales pour faire de la description de  données. Ces quatre fonctions appartiennent au package funModeling, développé par Pablo Casas, qui est aussi l’auteur du livre “Data Science Live Book: An intuitive and practical approach to data analysis, data preparation and machine learning, suitable for all ages!”

Le livre est vraiment très bien, il contient de bonnes explications et de nombreux exemples pour appliquer les fonctions du package, (qui s’intègrent au tidyverse) et il ne coûte que 5.64 euros en version kindle !

Table des matières

Les data

Pour illustrer ces quatre fonctions utiles à la description, je vais utiliser le jeu de données “heart_disease“, contenu dans le package “funModeling”.


library(funModeling)
    head(heart_disease)
    ##   age gender chest_pain resting_blood_pressure serum_cholestoral
    ## 1  63   male          1                    145               233
    ## 2  67   male          4                    160               286
    ## 3  67   male          4                    120               229
    ## 4  37   male          3                    130               250
    ## 5  41 female          2                    130               204
    ## 6  56   male          2                    120               236
    ##   fasting_blood_sugar resting_electro max_heart_rate exer_angina oldpeak
    ## 1                   1               2            150           0     2.3
    ## 2                   0               2            108           1     1.5
    ## 3                   0               2            129           1     2.6
    ## 4                   0               0            187           0     3.5
    ## 5                   0               2            172           0     1.4
    ## 6                   0               0            178           0     0.8
    ##   slope num_vessels_flour thal heart_disease_severity exter_angina
    ## 1     3                 0    6                      0            0
    ## 2     2                 3    3                      2            1
    ## 3     2                 2    7                      1            1
    ## 4     3                 0    3                      0            0
    ## 5     1                 0    3                      0            0
    ## 6     1                 0    3                      0            0
    ##   has_heart_disease
    ## 1                no
    ## 2               yes
    ## 3               yes
    ## 4                no
    ## 5                no
    ## 6                no 

La fonction df_status()

La première fonction de description qui m’a particulièrement plu, c’est “df_status” qui permet d’obtenir :

  • le nombre de valeurs nulles (q_zeros) et son pourcentage (p_zeros)
  • le nombre de valeurs manquantes (q_na) et son pourcentage (p_na)
  • le nombre de valeur infinies (q_inf) et son pourcentage (p_inf)
  • le type des variables : facteur, character, numeric, entier, etc. – le nombre de valeurs uniques.

Je trouve que c’est très intéressant d’avoir ces informations en un clin d’œil

df_status(heart_disease)
                 variable q_zeros p_zeros q_na p_na q_inf p_inf    type unique
1                     age       0    0.00    0 0.00     0     0 integer     41
2                  gender       0    0.00    0 0.00     0     0  factor      2
3              chest_pain       0    0.00    0 0.00     0     0  factor      4
4  resting_blood_pressure       0    0.00    0 0.00     0     0 integer     50
5       serum_cholestoral       0    0.00    0 0.00     0     0 integer    152
6     fasting_blood_sugar     258   85.15    0 0.00     0     0  factor      2
7         resting_electro     151   49.83    0 0.00     0     0  factor      3
8          max_heart_rate       0    0.00    0 0.00     0     0 integer     91
9             exer_angina     204   67.33    0 0.00     0     0 integer      2
10                oldpeak      99   32.67    0 0.00     0     0 numeric     40
11                  slope       0    0.00    0 0.00     0     0 integer      3
12      num_vessels_flour     176   58.09    4 1.32     0     0 integer      4
13                   thal       0    0.00    2 0.66     0     0  factor      3
14 heart_disease_severity     164   54.13    0 0.00     0     0 integer      5
15           exter_angina     204   67.33    0 0.00     0     0  factor      2
16      has_heart_disease       0    0.00    0 0.00     0     0  factor      2 

La fonction profiling_num()

La deuxième fonction de description est “profiling_num”, qui calcule tous les paramètres classiquement utilisés pour faire de la description de données numériques : la moyenne, la médiane, l’écart type, le coefficient de variation, les 1er et 3ème quartile, etc… ainsi les valeurs de kurtosis et de skewness pour juger de la présence d’outlier et de la symétrie de donnés.

Un des points que j’apprécie, c’est qu’on n’a pas besoin de faire un subset préalable du jeu de données pour sélectionner uniquement les variables numériques. On donne en entrée le jeu de données dans sa globalité, et la fonction se débrouille !

> profiling_num(heart_disease)
                variable        mean    std_dev variation_coef   p_01  p_05  p_25  p_50
1                    age  54.4389439  9.0386624      0.1660330  35.00  40.0  48.0  56.0
2 resting_blood_pressure 131.6897690 17.5997477      0.1336455 100.00 108.0 120.0 130.0
3      serum_cholestoral 246.6930693 51.7769175      0.2098840 149.00 175.1 211.0 241.0
4         max_heart_rate 149.6072607 22.8750033      0.1529004  95.02 108.1 133.5 153.0
5            exer_angina   0.3267327  0.4697945      1.4378558   0.00   0.0   0.0   0.0
6                oldpeak   1.0396040  1.1610750      1.1168436   0.00   0.0   0.0   0.8
7                  slope   1.6006601  0.6162261      0.3849825   1.00   1.0   1.0   2.0
8      num_vessels_flour   0.6722408  0.9374383      1.3944978   0.00   0.0   0.0   0.0
9 heart_disease_severity   0.9372937  1.2285357      1.3107265   0.00   0.0   0.0   0.0
   p_75  p_95   p_99   skewness kurtosis  iqr        range_98       range_80
1  61.0  68.0  71.00 -0.2080241 2.465477 13.0        [35, 71]       [42, 66]
2 140.0 160.0 180.00  0.7025346 3.845881 20.0      [100, 180]     [110, 152]
3 275.0 326.9 406.74  1.1298741 7.398208 64.0   [149, 406.74] [188.8, 308.8]
4 166.0 181.9 191.96 -0.5347844 2.927602 32.5 [95.02, 191.96]   [116, 176.6]
5   1.0   1.0   1.00  0.7388506 1.545900  1.0          [0, 1]         [0, 1]
6   1.6   3.4   4.20  1.2634255 4.530193  1.6        [0, 4.2]       [0, 2.8]
7   2.0   3.0   3.00  0.5057957 2.363050  1.0          [1, 3]         [1, 2]
8   1.0   3.0   3.00  1.1833771 3.234941  1.0          [0, 3]         [0, 2]
9   2.0   3.0   4.00  1.0532483 2.843788  2.0          [0, 4]         [0, 3] 

La fonction plot_num()

La fonction plot_num permet d’obtenir une visualisation des distributions de ces variables, là encore en un clin d’oeil !

description des variables

La fonction freq()

La quatrième fonction de description dont je voulais parler est la fonction “freq” qui permet d’obtenir les paramètres descriptifs des variables catégorielles ou facteurs.

Pour chaque facteur, la fonction renvoie :

  • la fréquence, le pourcentage et le pourcentage cumulé de chaque modalité
  • un barplot avec les modalités ordonnées.
gender frequency percentage cumulative_perc
1   male       206      67.99           67.99
2 female        97      32.01          100.00

  thal frequency percentage cumulative_perc
1    3       166      54.79           54.79
2    7       117      38.61           93.40
3    6        18       5.94           99.34
4 <NA>         2       0.66          100.00

[1] "Variables processed: gender, thal" 
Fréquence des variables catégorielles
description des variables catégorielles

Voilà, j’espère que ces quatre fonctions vous plairont également ! En ce qui me concerne, je les ai intégré dans mes routines d’analyses.

Si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee 🙏

Poursuivez votre lecture

 

Note : je touche une petite commission (entre 3 et 6%) si vous passez par le liens Amazon de cet article pour acheter le livre mentionné, cela m’aide à entretenir ce blog, merci si vous le faites ! 😉 

Crédit photo : StartupStockPhotos

9 réponses

  1. Bonjour Claire.
    Je ne cesserai pas de te dire merci, franchement, pour tout ce que tu entreprends dans le but de nous simplifier la tâche dans nos analyses statistiques et bien d’autres.

  2. Bonjour,
    Merci beaucoup pour tous vos articles qui me sont très utiles.

    Une question : le package reshape a semble-t-il été remplacé par le package reshape2, et je n’arrive pas à faire fonctionner la fonction plot_num_density. Savez-vous si cette fonction que vous avez crée existe toujours?
    merci pour votre aide,
    Cordialement,
    Elsa

    1. Bonjour,

      je viens d’essayer et cela fonctionne toujours. J’utilise R version 3.6.2 (2019-12-12), funModeling_1.9.3,reshape2_1.4.3, ‘reshape’ version 0.8.8.
      J’espère que cela vous aide.
      Bonne continuation.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.