4 super 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 packages, (qui s’intègrent au tidyverse) et il ne coûte que 5.64 euros en version kindle !
Pour illustrer ces quatre fonctions utile à la description, je vais utiliser le jeu de données “heart_disease“, contenu dans le package “funModeling”.
Personnellement, je préfère le plot des densités, alors j’ai crée la fonction “plot_num_density”. Pour la faire tourner vous aurez besoin du package “reshape”.
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</pre>
1. 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.
df_status(heart_disease)
## variable q_zeros p_zeros q_na p_na q_inf p_inf type ## 1 age 0 0.00 0 0.00 0 0 integer ## 2 gender 0 0.00 0 0.00 0 0 factor ## 3 chest_pain 0 0.00 0 0.00 0 0 factor ## 4 resting_blood_pressure 0 0.00 0 0.00 0 0 integer ## 5 serum_cholestoral 0 0.00 0 0.00 0 0 integer ## 6 fasting_blood_sugar 258 85.15 0 0.00 0 0 factor ## 7 resting_electro 151 49.83 0 0.00 0 0 factor ## 8 max_heart_rate 0 0.00 0 0.00 0 0 integer ## 9 exer_angina 204 67.33 0 0.00 0 0 integer ## 10 oldpeak 99 32.67 0 0.00 0 0 numeric ## 11 slope 0 0.00 0 0.00 0 0 integer ## 12 num_vessels_flour 176 58.09 4 1.32 0 0 integer ## 13 thal 0 0.00 2 0.66 0 0 factor ## 14 heart_disease_severity 164 54.13 0 0.00 0 0 integer ## 15 exter_angina 204 67.33 0 0.00 0 0 factor ## 16 has_heart_disease 0 0.00 0 0.00 0 0 factor ## unique ## 1 41 ## 2 2 ## 3 4 ## 4 50 ## 5 152 ## 6 2 ## 7 3 ## 8 91 ## 9 2 ## 10 40 ## 11 3 ## 12 4 ## 13 3 ## 14 5 ## 15 2 ## 16 2
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 ## 1 age 54.44 9.04 0.17 35 40 48 ## 2 resting_blood_pressure 131.69 17.60 0.13 100 108 120 ## 3 serum_cholestoral 246.69 51.78 0.21 149 175 211 ## 4 max_heart_rate 149.61 22.88 0.15 95 108 134 ## 5 exer_angina 0.33 0.47 1.44 0 0 0 ## 6 oldpeak 1.04 1.16 1.12 0 0 0 ## 7 slope 1.60 0.62 0.38 1 1 1 ## 8 num_vessels_flour 0.67 0.94 1.39 0 0 0 ## 9 heart_disease_severity 0.94 1.23 1.31 0 0 0 ## p_50 p_75 p_95 p_99 skewness kurtosis iqr range_98 ## 1 56.0 61.0 68.0 71.0 -0.21 2.5 13.0 [35, 71] ## 2 130.0 140.0 160.0 180.0 0.70 3.8 20.0 [100, 180] ## 3 241.0 275.0 326.9 406.7 1.13 7.4 64.0 [149, 406.74] ## 4 153.0 166.0 181.9 192.0 -0.53 2.9 32.5 [95.02, 191.96] ## 5 0.0 1.0 1.0 1.0 0.74 1.5 1.0 [0, 1] ## 6 0.8 1.6 3.4 4.2 1.26 4.5 1.6 [0, 4.2] ## 7 2.0 2.0 3.0 3.0 0.51 2.4 1.0 [1, 3] ## 8 0.0 1.0 3.0 3.0 1.18 3.2 1.0 [0, 3] ## 9 0.0 2.0 3.0 4.0 1.05 2.8 2.0 [0, 4] ## range_80 ## 1 [42, 66] ## 2 [110, 152] ## 3 [188.8, 308.8] ## 4 [116, 176.6] ## 5 [0, 1] ## 6 [0, 2.8] ## 7 [1, 2] ## 8 [0, 2] ## 9 [0, 3]
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 !plot_num(heart_disease)

library(reshape) ## Warning: package 'reshape' was built under R version 3.5.1 plot_num_density <- function (data, path_out = NA) { wide_data = suppressMessages(melt(data)) p = ggplot(data = wide_data, aes(x = value)) + geom_density( na.rm = T) + facet_wrap(~variable, scales = "free") + aes(fill = variable) + guides(fill = FALSE) if (!is.na(path_out)) { export_plot(p, path_out, "density") } plot(p) } plot_num_density(heart_disease)

4. 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.
freq(heart_disease, c("gender", "thal"))

## gender frequency percentage cumulative_perc ## 1 male 206 68 68 ## 2 female 97 32 100

## thal frequency percentage cumulative_perc ## 1 3 166 54.79 55 ## 2 7 117 38.61 93 ## 3 6 18 5.94 99 ## 4 <NA> 2 0.66 100 ## [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 🙏 👉 Cliquez ici pour soutenir le blog Statistiques et Logiciel R 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
Retrouvez ici d’autres articles “astuce” :
- 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
Étiqueté astucedescription
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 …