JSL : Aide pour accéder aux informations du rapport : Xpath ou structure arborescente ?Bonjour les scénaristes,
J'ai des difficultés à accéder à certaines informations d'un rapport provenant de la plateforme complémentaire XGBoost. J'utilise un programme JSL qui génère un tableau de différents modèles XGB (profondeurs, taux d'apprentissage, itérations, etc.). Ce code exécute la plateforme XGBoost, puis extrait les informations du rapport XGB pour les stocker dans une table de données de sortie.
La difficulté que je rencontre est d'essayer de généraliser une partie du code pour extraire des informations à l'aide des commandes Outline box() et NumberColBox(). Vous trouverez ci-joint un exemple de rapport et une capture d'écran.

Je souhaite extraire des données de quatre colonnes numériques (encadrées en rouge dans la capture d'écran). Normalement, j'écrirais un code JSL comme celui-ci pour définir les numéros de la zone de contour et de la colonne, puis j'extrairais les données et les stockais dans une liste, que je pouvais ensuite affecter aux colonnes de ma table de sortie.
o_box = 1;
t_ncol_box = 35;
n_ncol_box = 36;
Tconfrates_ncol_box1 = 28;
Tconfrates_ncol_box2 = 29;
Tdata = w[Outline Box( o_box ), Number Col Box( t_ncol_box )] << Get;
NT = w[Outline Box( o_box ), Number Col Box( n_ncol_box )] << Get;
TConfR1 = w[Outline Box( o_box ), Number Col Box( Tconfrates_ncol_box1 )] << Get;
TConfR2 = w[Outline Box( o_box ), Number Col Box( Tconfrates_ncol_box2 )] << Get;
Ce JSL fonctionne très bien avec les sorties suivantes :
Tdonnées = {0,92503341611747, 0,937048078393258, 0,0137071818977882, 0,0387471836917961,
0,012822908993725, 0}
NT = {6253}
TConfR1 = {1, 0}
TConfR2 = {0, 1}
Je sais que je peux également obtenir certaines données en référençant spécifiquement la zone de contour et la zone de colonne numérique comme :
Tdata = w[Outline Box( "Fit Details" ), Number Col Box( "Training" )] << Get;
Cependant, en raison de l'organisation du rapport, le nombre de lignes utilisées dans l'ensemble de données n'est pas indiqué (la colonne suivante, avec la valeur 6253 dans cet exemple, est manquante). De plus, comment référencer les taux de la matrice de confusion (réussite/réussite, réussite/échec) de cette manière ? Un code similaire est utilisé pour les taux de la matrice de confusion.
TConfR1 = w[Outline Box( "Training" ), Number Col Box( "Pass" )] << Get;
TConfR2 = w[Outline Box( "Training" ), Number Col Box( "Fail" )] << Get;
obtiendra les nombres de la matrice de confusion, pas les taux (certes, je peux calculer les taux à partir des nombres, mais accéder immédiatement aux informations serait plus facile).
Cependant, lorsque le code exécute l'itération suivante dans la table (avec des paramètres de modèle différents), les valeurs des cases de la colonne numérique changent pour les mêmes données du rapport. Par exemple, t_ncol_box n'est plus 35 la deuxième fois, mais 43.
Malheureusement, il semble que la méthode « standard » de référencement du rapport et des boîtes de contour ne fonctionne pas vraiment. Je n'ai pas rencontré ce problème avec d'autres plateformes de modélisation dans JMP, telles que Boosted Trees, Neural Net, Bootstrap Forest, etc. J'envisageais d'y accéder via XPath, mais je ne le maîtrise pas suffisamment pour extraire correctement les valeurs qui m'intéressent, notamment lorsque la valeur de la boîte de colonne numérique change. De plus, la boîte de colonne numérique n'a pas toujours de titre exploitable. Par exemple, le nombre de points de données dans l'ensemble d'entraînement N correspond simplement à l'itération suivante dans la boîte de colonne numérique à partir des détails d'ajustement d'entraînement (Entropy RSquare, RASE, etc.).
Je pensais pouvoir contourner l'ancienne méthode ou la méthode traditionnelle avec une instruction logique modifiant la valeur des variables de la boîte de la colonne numérique si le pas du modèle == 1 ou !=1, mais après 16 modèles, les valeurs ont changé à nouveau, et encore à 34. Il doit exister un moyen plus efficace d'accéder aux données sans avoir à inclure d'instructions logiques pour des valeurs de pas de modèle spécifiques, comme à i=16 ou i=34. Ce n'est pas si simple lorsque la valeur de la boîte de la colonne numérique peut changer, sans que l'on comprenne pourquoi.
J'apprécierais grandement vos suggestions sur la manière de procéder, avec une méthode plus flexible pour adapter la valeur de la case de numérotation du rapport, et pour les colonnes sans titre. J'aimerais une solution aussi généralisable que possible, car la colonne Y que je modélise pourrait être de type ordinal/nominal à deux niveaux, ordinal/nominal à trois niveaux ou de type continu.
Merci!,
DS
Automatisation et scriptsAccès aux donnéesPersonnalisation de masseRe : JSL : Aide pour accéder aux informations du rapport : Xpath ou structure arborescente ?Vous pouvez facilement obtenir une référence aux boîtes de contour avec quelque chose comme ceci
ob_cm = rep[OutlineBox("Confusion Matrices")];
puis explorez ce qui se trouve en dessous, dans ce cas, la case col span pourrait être une bonne référence
Show(cpb[1] << get, cpb[2] << get);
ou prendre la deuxième table box
tb = rep[OutlineBox("Confusion Matrices"), Table Box(2)];
cpb << get as matrix;
Les détails de l'ajustement sont accessibles avec une idée similaire, mais vous pouvez simplement utiliser le nom de la boîte de numéro de colonne (comme vous l'avez déjà fait)
tb_val = rep[OutlineBox("Fit Details"), Table Box(1), Number Col Box("Training")] << Get;
show(tb_val);
</CODE></P>
<BR />
</LINGO-BODY>
<LINGO-SUB id="lingo-sub-890752" slang="en-US" mode="CREATE">Re : JSL : Aide pour accéder aux informations du rapport : Xpath ou structure arborescente ?</LINGO-SUB>
<LINGO-BODY id="lingo-body-890752" slang="en-US" mode="CREATE">
<P>Je ne suis pas sûr que cela vous soit utile. Mais si vous ou quelqu'un d'autre souhaitez voir des exemples XPath, voici une série d'exemples auxquels je me réfère lorsque j'utilise XPath. Vous le savez peut-être déjà, mais sinon, la page « Édition > Propriétés » affiche l'arborescence, avec une interactivité lorsque vous survolez et cliquez sur des zones du rapport. Vous pouvez ainsi cliquer sur la zone qui vous intéresse (numéro, colonne, etc.) et les informations associées s'affichent dans le volet des propriétés. Vous pouvez développer la zone de contour « Chemin de la boîte » dans le volet des propriétés : le code de l'arborescence ou le code XPath s'affiche selon le choix du menu déroulant, et vous pouvez généraliser à partir de là. L'icône la plus à droite dans la zone de chemin de la boîte copie le code.</P>
<BR />
<P>Vous pouvez exécuter le tout, mais passez aux 20 dernières lignes environ et utilisez un tableau associatif sur la sortie des derniers bits de xpath.<BR /><BR /> Je suppose que vous pouvez utiliser quelque chose de similaire à cela et rechercher « Formation » ou « Taux prévu », puis, comme le dit Jarmo, explorer les résultats.</P>
<BR />
<P>Tout ce qui est commenté ne fonctionne pas. Je n'ai pas corrigé cela depuis des années et je ne me souviens même pas si cette partie est valide.:)</img></P>
<BR />
<PRE><CODE class=" language-jsl">// This is a file containing some examples of xpath, which is useful for traversing display trees (outline boxes and other display boxes) and getting data from these reports. For example, getting mean and st dev from the summary stats section of a distribution report window, or an Rsquare from a fit y by x. both of these are shown below.
//Tip: go to Edit -> Properties from a report output. Expand the 'Box Path' outline box in the properties pane. Switch between Subscript and Xpath to see the different paths. and change the root to whatever is convenient. Right most icon here is copy, so you can copy / paste the code.
//below focuses on xpath.
names default to here(1);
open("$SAMPLE_DATA\Semiconductor Capability.jmp");
myDist = Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :NPN1 ),
Customize Summary Statistics(
Robust Mean( 1 ),
Robust Std Dev( 1 )
),
Capability Analysis( 1 )
),
Continuous Distribution(
Column( :PNP1 ),
Customize Summary Statistics(
Robust Mean( 1 ),
Robust Std Dev( 1 )
),
Capability Analysis( 1 )
),
Continuous Distribution(
Column( :PNP2 ),
Customize Summary Statistics(
Robust Mean( 1 ),
Robust Std Dev( 1 )
),
Capability Analysis( 1 )
)
);
reportObj=myDist<
<XPATH>
0 & StdIndx > 0, mean = statList[MnIndx]; std = statList[StdIndx]; , mean = -999; std = -999; ); show(mean, std); /*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ reportObj=myDist<
<XPATH></XPATH>
</XPATH>
<BR /> <BR />
Re : JSL : Aide pour accéder aux informations du rapport : Xpath ou structure arborescente ?Salut @jthi ,
Merci pour votre réponse rapide et vos suggestions. Elles m'ont été utiles et j'ai pu accéder aux données correctes en modifiant légèrement vos suggestions. J'ai finalement opté pour cette solution, mais vos suggestions étaient la bonne solution. Merci !
Tdata = w[Outline Box( "Fit Details" ), Number Col Box( "Training" )] << Get;
NT = w[Outline Box( "Fit Details" ), ColStackBox( 1 ), Number Col Box( 2 )] << Get;
TConfR1 = w[Outline Box( "Confusion Matrices" ), Table Box( 2 ), Number Col Box( y_levels[1] )] << Get;
TConfR2 = w[Outline Box( "Confusion Matrices" ), Table Box( 2 ), Number Col Box( y_levels[2] )] << Get;
Il fallait juste que je m'assure que j'accédais à la bonne ColStackBox et à la bonne Table Box sous la Outline Box respective.
Merci encore pour l'aide !,
DS
Re : JSL : Aide pour accéder aux informations du rapport : Xpath ou structure arborescente ?Salut @mikedriscoll ,
Waouh, vraiment génial ! Je connais les options Édition > Afficher l'arborescence et Afficher les propriétés depuis le clic droit sur le triangle gris, mais je ne connaissais pas le chemin de la boîte et les options associées. C'est TRÈS utile, merci. Je l'utiliserai certainement à l'avenir pour obtenir les informations XPath et Indice pour les rapports. Cela facilite grandement la généralisation à partir du seul rapport d'arborescence, qui semble manquer d'informations. Ce serait bien qu'il y ait une option pour afficher simultanément les informations sur l'arborescence et les propriétés. Merci pour la suggestion, et je pense que c'est une autre solution valable, donc je la note également. Merci également pour l'exemple de code XPath. Je pense qu'il sera utile de l'étudier et de commencer à me familiariser avec l'utilisation correcte de XPath.
Merci!,
DS
Re : JSL : Aide pour accéder aux informations du rapport : Xpath ou structure arborescente ?Heureux de pouvoir vous aider!
@SDF1 a écrit :
Ce serait bien s'ils avaient une option pour afficher simultanément les informations sur la structure de l'arborescence et les propriétés.
Cela semble désormais possible. Je ne vois pas l'option « Modifier > Afficher l'arborescence » dans ma version de JMP, mais voici comment procéder.
1. À partir de la sortie du rapport dont les propriétés ne sont pas affichées, développez la fenêtre vers la droite afin qu'il y ait au moins un « nouvel » espace vide au-delà de la valeur par défaut créée par JMP lors de la création de la fenêtre de rapport.
2. ctrl+shift + clic droit dans ce « nouvel » espace vide, puis cliquez sur « afficher l'arborescence » (j'ai essayé cela avec les propriétés affichées et j'ai obtenu des résultats différents une fois, je ne suis pas sûr)
3. À partir de la fenêtre du rapport d'origine (et non de la fenêtre de l'arborescence), accédez à Modifier -> Afficher les propriétés