Les programmes analytiques nécessitent des données structurées en lignes et en colonnes, chaque ligne étant généralement considérée comme une observation indépendante. Le diagramme de causes et effets organise ces lignes de manière hiérarchique, selon des relations parent-enfant. Conçue initialement pour documenter les résultats de séances de brainstorming en gestion de la qualité, cette plateforme s'avère un outil puissant pour visualiser d'autres structures.
Les structures de données génériques en JSL sont les tableaux associatifs et les listes. Leurs éléments peuvent être des valeurs, des listes ou des tableaux associatifs, offrant ainsi un cadre pour la gestion rapide et efficace de structures de données complexes. Les interfaces JSON, largement utilisées dans la communication système, constituent un autre exemple de structures de données hiérarchiques. Si des éléments sont traités de différentes manières et que divers paramètres sont mesurés après traitement, les combinaisons réelles peuvent être documentées de la même façon.
Cette présentation décrit une fonction JSL qui parcourt une liste ou un tableau et place son contenu dans une table de données. Le diagramme de cause à effet illustre graphiquement ce contenu. Des exemples d'application mettent en évidence la polyvalence et la puissance de ce concept.
Bienvenue ! Je vous invite à me suivre dans les méandres des structures hiérarchiques complexes. Commençons par un tableau de données. Voici la mise en page idéale : une grille complète, sans espaces vides ni valeurs manquantes. Or, en examinant ce tableau, on constate la présence de valeurs dupliquées pour la mise en page et l’identifiant de la plaquette. Ceci révèle l’existence d’une hiérarchie.
Commençons par quelque chose de plus simple et utilisons JSL, le langage de script JMP, pour comprendre ce que sont une hiérarchie et des structures. Voici une liste. Les listes sont entre accolades et leurs éléments sont évalués par position. Ici, le deuxième élément est mon nom de famille, Heinen.
Il s'agit du même contenu, mais sous forme de tableau associatif. Les tableaux associatifs sont délimités par des crochets et leurs éléments ont des noms. Cet élément est appelé « fn » pour « prénom », et ses données sont liées. Le contenu de « prénom » est lié.
Il existe deux manières différentes de structurer les données. Ces structures peuvent s'empiler et donner lieu à des transformations combinées comme celles-ci. On observe de nombreuses accolades et crochets, et à la fin, deux crochets et des accolades fermées. Il est assez difficile de s'y retrouver dans une telle structure.
Mais il est important de le savoir car, notamment dans les interfaces REST où les ordinateurs communiquent avec les services Internet, les données sont échangées sous forme de structures JSON, lesquelles combinent listes et tableaux associatifs. Il est donc essentiel de savoir où se trouve chaque élément.
Faire cela manuellement est un peu fastidieux. Il existe un programme qui le fait pour vous. Je l'ai écrit et je le mets à votre disposition. Vous n'avez pas besoin de grandes connaissances en programmation. Seules deux instructions sont importantes : `for` et `recurse`.
« For » signifie qu'il s'agit d'une boucle. Tout ce qui se trouve entre parenthèses est répété plusieurs fois. La récursivité est un concept intéressant. Elle indique à JMP de se souvenir de l'endroit où l'on se trouve dans le programme et d'exécuter à nouveau l'application entière. Une fois l'exécution terminée, on revient à cet endroit et on continue. Par nature, la récursivité peut être répétée un nombre quelconque de fois.
Que fait ce programme ? Il prend en entrée la structure complète et demande si l’on a une liste ou un tableau associatif. Si c’est le cas, on lui attribue le rôle de parent. Lorsqu’on pense aux hiérarchies, on peut envisager les générations : grand-parent, parent, enfants, petits-enfants, etc. Il s’agit ici de la première génération, la génération parentale.
On prend le premier élément, son premier enfant, on incrémente la pile (on est donc à la deuxième génération), puis on recommence le processus jusqu'à la fin. La fin est toujours un élément de données.
Ensuite, nous conservons toutes les informations relatives à cet élément de données, nous remontons d'une génération et nous revenons à la génération précédente. Nous sommes dans la génération des petits-enfants ; nous revenons donc à la génération précédente et nous nous demandons : « Y a-t-il des frères et sœurs dans cette génération ? » Si oui, nous prenons le frère ou la sœur suivant(e) et le processus recommence jusqu'à ce qu'il n'y ait plus de frère ou sœur, ce qui se produit finalement à la génération des grands-parents. Nous créons alors le résultat.
Dans ce cas, ou voici un exemple, dans les comparaisons entre pièces, des pièces standardisées sont envoyées à des laboratoires où elles sont testées avec différents analyseurs, et ceux-ci produisent différents groupes de valeurs de mesure.
Ces données sont ensuite analysées et affichées dans ce tableau. On y voit une colonne parent et une colonne enfant, que j'ai légèrement colorées pour faciliter la compréhension. Voici le premier chemin descendant vers le premier élément de données, puis tous ses frères et sœurs, un niveau au-dessus, et là, on constate que c'est déjà la fin, sans autres enfants, puis encore un niveau au-dessus pour arriver à l'élément de structure suivant.
Comme nous avons également enregistré les données, nous savons précisément de quoi il s'agit à chaque étape : d'un laboratoire, d'une pièce, d'un groupe de valeurs de mesure issues de l'analyse de laboratoire. Ici, en bas, vous avez une valeur appelée CV, pour coefficient de variation.
Que faire avec un tableau de données comme celui-ci ? Nous voulons créer ce diagramme. Il se trouve dans le menu Analyser, Analyser, Qualité et Processus, Diagramme. Je l'ai déjà fait, donc je peux le remplir automatiquement. Ce n'est vraiment pas compliqué.
Le diagramme par défaut est un diagramme en arêtes de poisson. Tout à la fin, nous avons l'ensemble complet ici. C'est difficile à lire. Un clic droit, un clic droit ici, nous permet de changer le type en hiérarchie. Nous voyons maintenant une hiérarchie pouvant comporter jusqu'à sept niveaux, et c'est ici que commence l'ensemble complet, et ainsi de suite. Nous avons des tableaux associatifs. Nous avons également des listes.
Comment naviguer dans ces groupes ? On commence par l’ensemble complet, bien sûr. Ensuite, on descend d’un niveau dans un tableau associatif des pièces, puis d’un niveau encore plus bas, au premier tour. Vous voyez, la ligne s’étend loin vers la droite, il y a donc de nombreux tours, voire plus. Prenons l’un des analyseurs, E2 dans ce cas. Nous avons ce groupe de valeurs de mesure dans une liste, et le troisième élément de la liste est le point de données dont la valeur est six.
Voici précisément comment un programmeur accéderait à cette donnée. C'est beaucoup plus simple à trouver et à suivre que de se repérer dans une structure de ce type. Nous disposons d'un programme qui effectue l'analyse. Nous avons des applications, des interfaces JSON, des interfaces REST et des structures JSON, pour lesquelles cette méthode s'avère très utile.
Tout est parfait ? Le script part du principe que la structure est déjà une structure JSL. Il serait peut-être judicieux de disposer d'une interface utilisateur permettant de dire : « Voici mon tableau de données. Voici la hiérarchie de mes colonnes. Veuillez générer un graphique comme celui-ci. » Le programme se chargerait alors de le générer.
En manipulant ce diagramme, vous constaterez peut-être qu'il n'est pas entièrement intégré à JMP, contrairement aux plateformes modernes. Il semble provenir des versions 2 ou 3 de JMP. Si un membre de l'équipe de développement de JMP nous lit, merci de bien vouloir mettre à jour cette plateforme.
Vous pouvez télécharger le script sur la page web de ma présentation Discovery. Si vous êtes curieux, si vous avez des questions, ou si vous souhaitez me rencontrer au Discovery Summit le jeudi 7 mars, vous me trouverez dans la salle de bal, stand 2. J'y serai.