Série 9 – Diagrammes à tige et à feuille
Introduction
Le but de cette série est d'ajouter au tableur ultra-simplifié du cours la possibilité de dessiner des diagrammes à tige et à feuille pour un certain nombre de cellules, et d'utiliser cette possibilité pour visualiser les résultats de l'examen intermédiaire.
Un diagramme à tige et à feuille (stem-and-leaf plot ou parfois stemplot en anglais) permet de visualiser la distribution d'un ensemble de valeurs entières. Il est similaire à un histogramme à barres horizontales, mais dont les barres sont les chiffres des unités des valeurs elle-mêmes.
Par exemple, admettons l'existence d'une équipe de 14 jeunes sportifs dont la taille en centimètres est { 152, 152, 154, 160, 161, 161, 162, 163, 163, 173, 173, 175, 175, 178 }. Pour créer un diagramme à tige et à feuille à partir de ces données, on commence par séparer chaque valeur en une tige, composée de tous les chiffres sauf celui des unités, et une feuille, le chiffre des unités. Par exemple, la valeur 152 a pour tige 15 et pour feuille 2, tandis que la valeur 154 a également 15 comme tige mais 4 comme feuille. Cette séparation faite, on produit le diagramme en affichant une ligne par tige possible entre la plus petite et la plus grande tige trouvées dans les données. Chaque ligne est composée de la tige qui lui correspond, suivie d'une barre verticale et de toutes les feuilles ayant cette tige, triées en ordre croissant. Pour les valeurs données plus haut, on obtient le diagramme suivant :
15|224 16|011233 17|33558
Un tel diagramme permet d'une part de visualiser la distribution des données, puisque la longueur de chaque ligne est proportionnelle au nombre de valeurs ayant la tige correspondant à la ligne, et d'autre part de connaître précisément les valeurs présentes dans les données. Ainsi, au moyen du diagramme ci-dessus, il est trivial de reconstituer la totalité des données.
Pour démarrer, nous vous fournissons une archive Zip contenant :
- trois fichier de données nommés
data.txt
,data_IN.txt
etdata_SC.txt
, le premier contenant les points obtenus lors de l'examen intermédiaire du cours par les 234 étudiant(e)s l'ayant effectué (la première ligne donne le nombre d'entrées, les suivantes donnent les points), les deux autres donnant les mêmes informations mais séparées par section, - une version simplifiée du « tableur » décrit dans le cours, dont la classe
SumCell
, inutile ici, a été supprimée, et les classesCell
etValueCell
ont été fusionnées, - une classe
Main
qui construit autant de cellules qu'il y a de valeurs dans le fichierdata.txt
, construit ensuite une instance deStemAndLeafPlot
pour les afficher et finalement lit les données du fichier pour les placer dans les cellules successives, - un squelette à compléter de classe
StemAndLeafPlot
, qui dessine sur la console (System.out
) un diagramme à tige et à feuille pour les valeurs contenues dans une liste de cellules.
Exercice 1 – Diagramme unidirectionnel
Complétez la classe StemAndLeafPlot
qui modélise un diagramme à tige et à feuille dont les données proviennent de cellules du tableur. Cette classe doit utiliser le fait que les cellules sont observables pour se mettre à jour (c-à-d se dessiner à nouveau sur la console) chaque fois que la valeur d'une des cellules change.
Notez qu'utiliser le patron Observer ici n'est pas vraiment judicieux mais prendrait tout son sens si SteamAndLeafPlot
modélisait effectivement un diagramme dans un tableur interactif, car celui-ci devrait alors se mettre à jour automatiquement lors d'un changement des données représentées.
Conseil : utilisez judicieusement les collections que vous connaissez ainsi que les méthodes de la bibliothèque Java. En particulier, sachez qu'il est possible de calculer la valeur maximum ou minimum d'une collection au moyen des méthodes min
et max
de Collections
, et qu'il est possible de trier une liste au moyen de la méthode sort
de la même classe.
Exercice 2 – Digramme bidirectionnel
Ecrivez une classe StemAndLeafBiPlot
similaire à la classe StemAndLeafPlot
mais qui modélise un diagramme à tige et à feuille bidirectionnel, permettant d'afficher (et de comparer) deux ensembles de valeurs.
Par exemple, admettons que les hauteurs des jeunes sportifs soit celles de 8 filles de hauteurs { 152, 152, 160, 161, 163, 173, 175, 175 } et 6 garçons de hauteurs { 154, 161, 162, 163, 173, 178 }. On peut représenter ces deux ensembles de données au moyen du diagramme bidirectionnel suivant, les filles étant à gauche et les garçons à droite :
22|15|4 310|16|123 553|17|38
Une fois la classe StemAndLeafBiPlot
terminée, modifiez la classe Main
afin qu'elle affiche un tel diagramme bidirectionnel avec les résultats des deux sections, obtenus des fichiers data_IN.txt
et data_SC.txt
.
Conseil : la méthode format
de String
permet de spécifier la longueur minimale que doit occuper une chaîne de caractères, ce qui permet de facilement en aligner plusieurs. Par exemple, les appels suivants :
System.out.println(String.format("<%20s>", "Bonjour,")); System.out.println(String.format("<%20s>", "comment")); System.out.println(String.format("<%20s>", "allez")); System.out.println(String.format("<%20s>", "vous ?"));
affichent les différentes chaînes avec une longueur de 20 caractères, en les alignant à droite au moyen d'espaces si nécessaire. L'affichage obtenu est donc :
< Bonjour,> < comment> < allez> < vous ?>