4 nouvelles fonctions pour la description de vos données

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 !

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"


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
- Comment utiliser ggplot dans une boucle ou dans une fonction ?
- Comparaison de moyennes : indiquez la significativité des différences sur le graph
- Comment retrouver sous R une couleur employée avec Excel ?
- Comment jouer à Mario, Pacman, Tetris et autres… avec R et R Studio ?
- Choisissez et modifiez très facilement les couleurs de vos graphs R avec Colour Picker
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
Super !! Trop bien cet article. Merci.
Trop génial ton article. Il va beaucoup m’aider. Merci infiniment.
Bonjour Dio,
ravie de vous aider. Bonne continuation.
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.
Merci beaucoup pour ces fonctions !
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
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.
Bonjour, le livre existe-t-il en format numérique différent de “Kindle” (j’ai une liseuse kobo) ?
Merci
Bonjour,
j’ai l’impression que non …