Introduction
Le package santoku et ses fonctions chop_xxx permettent de discretiser une variable numerique, comme la fonction usuelle cut mais avec plus de fonctionnalites, cf le recapitulatif https://hughjonesd.github.io/santoku/tutorials/00-visualintroduction.html.
Le vecteur x qu’on va decouper dans les exemples ci-dessous prend ses valeurs entre 4.3
et 7.9
.
library("santoku")
affiche = function(w) {
# pour afficher le nom reel du vecteur w passe en argument de la fonction, purement esthetique
nom = deparse(substitute(w))
# table de contingence de la variable discretisee
knitr::kable(as.data.frame(table(w, useNA = "ifany", dnn = nom)))
}
x = iris$Sepal.Length
range(x)
[1] 4.3 7.9
Les options de chop
Etiquettes
On peut personnaliser les labels de plusieurs manieres :
res_lab = chop(x, 3:5, labels = c("Low", "Medium", "High"))
affiche(res_lab)
res_dash = chop(x, 3:5, lbl_dash())
affiche(res_dash)
res_to = chop(x, 3:5, lbl_format("%s to %s"))
affiche(res_to)
res_lab
|
Freq
|
Medium
|
22
|
High
|
128
|
res_dash
|
Freq
|
4 - 5
|
22
|
5 - 7.9
|
128
|
res_to
|
Freq
|
4 to 5
|
22
|
5 to 7.9
|
128
|
Gestion des depassements
On peut empecher chop d’etendre le dernier intervalle pour retrouver le comportement de la fonction cut.
res_extend = chop(x, 3:5, extend = FALSE)
affiche(res_extend)
res_extend
|
Freq
|
[4, 5)
|
22
|
NA
|
128
|
Classes ponctuelles
On peut reduire une classe a un seul point.
res_point = chop(x, c(3,4,5,5))
affiche(res_point)
res_point
|
Freq
|
[4, 5)
|
22
|
{5}
|
10
|
(5, 7.9]
|
118
|
Table de contingence
Le package contient une fonction tab basee sur table :
x
[4, 5) [5, 7.9]
22 128
Les differents choix de decoupage de chop_xxx
Choix disponibles pour les intervalles
- width pour la largeur des intervalles
- evenly pour le nombre d’intervalles
- n pour le nombre de points dans les intervalles
- equally pour le nombre de quantiles
- quantiles pour les valeurs des quantiles
res_large = chop_width(x, 1)
affiche(res_large)
res_nb_int = chop_evenly(x, 6)
affiche(res_nb_int)
res_nb_points = chop_n(x, 50)
affiche(res_nb_points)
res_nb_quantiles = chop_equally(x, 4)
affiche(res_nb_quantiles)
res_val_quantiles = chop_quantiles(x, c(0.2, 0.5, 0.7))
affiche(res_val_quantiles)
res_large
|
Freq
|
[4.3, 5.3)
|
45
|
[5.3, 6.3)
|
54
|
[6.3, 7.3)
|
43
|
[7.3, 8.3)
|
8
|
res_nb_int
|
Freq
|
[4.3, 4.9)
|
16
|
[4.9, 5.5)
|
36
|
[5.5, 6.1)
|
37
|
[6.1, 6.7)
|
33
|
[6.7, 7.3)
|
21
|
[7.3, 7.9]
|
7
|
res_nb_points
|
Freq
|
[4.3, 5.4)
|
46
|
[5.4, 6.3)
|
53
|
[6.3, 7.9]
|
51
|
res_nb_quantiles
|
Freq
|
[0%, 25%)
|
32
|
[25%, 50%)
|
41
|
[50%, 75%)
|
35
|
[75%, 100%]
|
42
|
res_val_quantiles
|
Freq
|
[0%, 20%)
|
22
|
[20%, 50%)
|
51
|
[50%, 70%]
|
35
|
(70%, 100%]
|
42
|
Fonction de decoupage personnalisee avec knife
On decoupe en quartiles et on personnalise les etiquettes d’intervalles.
chop_by_quartiles <- knife(
breaks = brk_quantiles(c(0.25, 0.5, 0.75)),
labels = lbl_dash()
)
res_perso = chop_by_quartiles(x)
affiche(res_perso)
res_perso
|
Freq
|
0% - 25%
|
32
|
25% - 50%
|
41
|
50% - 75%
|
35
|
75% - 100%
|
42
|
retour au debut du document