
Boîte à moustache et dispersion statistique
Bonjour à tous ! Aujourd’hui, je vais parler boîte à moustaches et nuage de points. L’idée est de faire une feuille de calcul avec diverses informations sur la répartition statistique de vos données en prenant la base de donnée « Exemple Hypermarché » pour exemple (fournie avec Tableau Desktop).
Comme vous le voyez, nous avons une vue des ventes pour chaque client avec un nuage de points. Nous avons appliqué une boîte à moustache pour donner les médianes, quartiles et déciles de notre dataset. Pour terminer, il est possible de grouper les clients par ventes pour obtenir une agrégation par milliers par exemple.
Je vais vous décrire les étapes permettant d’atteindre ce résultat ! Alors c’est parti !
1/ Les Expressions par Niveau de détail
Afin de travailler plus simplement avec mes données, je vais utiliser les Expressions par Niveau de détail pour calculer les [Ventes par client], les [Catégories de ventes] et le [Nombre de clients par catégorie].
Puisque je souhaite donner la possibilité à l’utilisateur de changer la taille des catégories de ventes, je commence par créer un paramètre de type entier [Taille Catégorie]. Personnellement, je lui autorise les valeurs 1000, 2000, 3000, 5000 et 10000 mais vous êtes libres de choisir ce que vous voulez.
Pour obtenir le nombre de ventes pour un client, on « FIXE » la dimension à [Nom du client] et on calcule la somme du [Montant des ventes]. Vous êtes libres d’utiliser des « INCLUDE » ou des « EXCLUDE » si vous avez d’autres dimensions sur votre feuilles.
Ensuite, je calcule dans quelle « classe » se trouve un client en divisant Ventes par client par [Taille Catégorie] puis en prenant le plus petit entier approchant.
Pour clarifier le calcul, je rajoute un champ calculé que je nomme [Libellé Catégorie Ventes par client] qui indique simplement entre quelles valeurs se situe l’enregistrements.
Ce champ nous donnera des légendes plus compréhensibles du style « 1000<x<1999 ».
Pour terminer, je calcule le nombre de clients présents dans une catégorie donnée [Nombre de clients par catégorie] avec un deuxième calcul par Niveau de détails.
Voici le résultat que nous pouvons obtenir à l’issue de cette première partie :
2/ Nuage de points et boîte à moustaches
Pour obtenir un effet de nuage de points quand on n’a qu’une seule mesure, il faut arriver à espacer les points de manière aléatoire. Tableau offre la fonction RANDOM() mais je vais faire ma propre fonction Random. En effet, je voudrais pouvoir placer les points sur l’axe 0 des ordonnées s’il n’y a qu’un point. Nous verrons que ce comportement sera utile pour combiner deux niveaux d’agrégation en un seul graphe.
Je vais donc créer un paramètre entier [Seed] que je vais fixer à 12 par exemple. Je rajoute ensuite un champ calculé [Random] en utilisant les champs déjà calculés. L’idée est la suivante : si la catégorie ne contient qu’un seul client, alors je place le point à zéro. Sinon, je divise la valeur des ventes par le paramètre [Seed] et je soustrait l’entier le plus proche (ROUND) de cette valeur.
Le résultat de ce calcul est compris entre -0,5 et 0,5 si [Seed] est choisi suffisamment petit par rapport aux Valeurs des ventes par client.
NB : Attention, si vos données sont des entiers, Seed devra également être choisi suffisamment grand pour donner l’effet d’un nuage. Il y a donc un juste milieu qui dépend de vos données.
Sur une nouvelle feuille de calcul, glissez ATTR([Random]) sur les colonnes et MIN([Ventes par client]) sur les lignes. Ajoutez [Nom du client] sur les repères et [Libellé Catégorie Ventes par client] sur la légende de couleur.
Il ne vous reste plus qu’à glisser une boîte à moustache sur votre dashboard (en sélectionnant MIN([Ventes par client]) comme montré ci-dessous).
NB : Il faut savoir que la fonction ATTR est en réalité un MIN et un MAX . Elle ne renvoie de valeur que si le MIN et le MAX sont égaux. C’est un bon moyen pour vous de vérifier la bonne agrégation des données.
Cependant, si vous êtes certains de l’agrégation de vos données, l’utilisation de la fonction MIN (ou MAX) permet d’économiser un calcul et peut donc rendre votre dashboard légèrement plus rapide. Nous verrons plus loin pourquoi je suis forcé d’utiliser ATTR pour les colonnes.
3/ Combinaison avec axe double
Maintenant que nous avons fait nos deux dashboards, il ne nous reste plus qu’à combiner les deux dashboards ensembles. Je vais utiliser la fonctionnalité Axe Double de Tableau pour combiner l’agrégation au niveau le plus fin avec que l’agrégation par Catégorie. Je vais simplement calculer l’ordonnée des agrégations pour placer les points à la médiane des Catégories.
Typiquement, si la catégorie est 2000<x<2999, alors je place le point à 2500. Mais vous êtes libres de le placer à 2000 si vous préférez bien entendu. Je nomme ce calcul [Ordonnée] par manque d’inspiration en cette fin de semaine :
Ensuite, les étapes à suivre sont les suivantes :
-
- Glisser Ordonnée sur les lignes
- Supprimer [Nom du client] des repères pour [Ordonnée]
- Glisser [Nombre de client par catégorie] sur Taille des repères pour [Ordonnée]
- Sélectionner Axe double pour [Ordonnée dans les lignes]
- Sélectionner Synchroniser l’axe sur l’axe de droite
- Décocher l’option Afficher l’en-tête sur l’axe de droite
- Faire des ajustements esthétiques (transparence, taille des éléments)
Voici ce que cela donne en images :
Et voilà ! Comme à mon habitude, je laisse un lien de téléchargement pour les impatients parmi vous et je vous souhaite une bonne journée ! 🙂 (avec un meme en prime :P)
j’adore ton post ! Je n’avais jamais pensé à faire un axe double comme cela pour les boites à moustache. Par contre, pourquoi n’as tu pas utilisé la fonction index pour la dispersion des points ? index%[seed]
Merci ! 🙂 En fait, je voulais avoir un cercle placé en 0 s’il n’y avait qu’un seul enregistrement dans la catégorie, d’où l’utilisation de la fonction IIF. Il se trouve que les niveaux d’agrégation de la fonction INDEX() ne fonctionnent plus dans cette configuration, tu peux essayer… Par ailleurs, INDEX() est un calcul de table qui peut être cher en temps de calcul suivant les données concernées 🙂