JSL: Aiuto per l'accesso alle informazioni del report: XPath o struttura ad albero?Ciao sceneggiatori,
Ho qualche difficoltà ad accedere ad alcune informazioni in un report proveniente dalla piattaforma aggiuntiva XGBoost. Ho un programma JSL in cui genero una tabella di diversi modelli XGB, con diverse profondità, velocità di apprendimento, iterazioni, ecc. Questo codice esegue la piattaforma XGBoost e quindi estrae le informazioni dal report XGB per memorizzarle in una tabella di dati di output.
La difficoltà che sto riscontrando è cercare di generalizzare parte del codice per estrarre informazioni utilizzando i comandi Outline box() e NumberColBox(). In allegato un report di esempio e uno screenshot qui sotto.

Ci sono in totale 4 caselle di colonna numerate da cui voglio estrarre i dati, evidenziate in rosso nello screenshot. Normalmente, scriverei un codice JSL come il seguente per definire il numero della casella di contorno e il numero della casella di colonna numerata, per poi estrarre i dati e memorizzarli in un elenco, che posso poi assegnare alle colonne in base alle esigenze nella mia tabella di dati di output.
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;
Questo JSL funziona perfettamente con i seguenti output:
Tdati = {0,92503341611747, 0,937048078393258, 0,0137071818977882, 0,0387471836917961,
0,012822908993725, 0}
NT = {6253}
TConfR1 = {1, 0}
TConfR2 = {0, 1}
So che posso anche ottenere alcuni dati facendo riferimento in modo specifico alla casella di riepilogo e alla casella della colonna dei numeri, come:
Tdata = w[Outline Box( "Fit Details" ), Number Col Box( "Training" )] << Get;
Tuttavia, a causa dell'organizzazione del report, non include il numero di righe utilizzate nel set di dati, ovvero la casella della colonna con il numero successivo, con il valore 6253 in questo esempio (non c'è titolo). Inoltre, come potrei fare riferimento ai tassi della Matrice di Confusione, ovvero ai tassi di superamento/superamento, di superamento/fallimento, in questo modo? Un codice simile per i tassi della Matrice di Confusione.
TConfR1 = w[Outline Box( "Training" ), Number Col Box( "Pass" )] << Get;
TConfR2 = w[Outline Box( "Training" ), Number Col Box( "Fail" )] << Get;
otterrò i conteggi della matrice di confusione, non le tariffe (certo che posso calcolare le tariffe dai conteggi, ma sarebbe più facile accedere subito alle informazioni).
Tuttavia, quando il codice esegue l'iterazione successiva nella tabella (con parametri di modello diversi), i valori delle caselle di colonna numerica cambiano per gli stessi dati nel report. Ad esempio, t_ncol_box non è 35 la seconda volta, ma 43.
Sfortunatamente, sembra che il metodo "standard" di riferimento alle caselle di report e struttura non funzioni. Non ho riscontrato questo problema con altre piattaforme di modellazione in JMP, come Boosted Trees, Neural Net, Bootstrap Forest e altre. Stavo pensando di accedervi tramite XPath, ma non lo conosco abbastanza bene per sapere come estrarre correttamente i valori che mi interessano, soprattutto quando cambia il valore della casella della colonna numerica, e la casella della colonna numerica non ha sempre un titolo con cui lavorare, ad esempio il numero di punti dati nel set di training N, che è semplicemente l'iterazione successiva nella casella della colonna numerica a partire dai dettagli dell'adattamento di training (Entropy RSquare, RASE, ecc.).
Pensavo di poter aggirare il metodo "vecchio?" o "tradizionale?" con un'istruzione logica che modificasse il valore delle variabili della casella della colonna numerica se il passo del modello == 1 o !=1, ma dopo 16 modelli, i valori sono cambiati di nuovo, e di nuovo a 34. Deve esserci un modo più efficiente per accedere ai dati senza dover includere istruzioni logiche per valori specifici del passo del modello, come a i=16 o i=34. Non è così facile quando il valore della casella della colonna numerica può cambiare, e senza capirne il motivo.
Se avete suggerimenti su come farlo con un metodo più flessibile rispetto al modo in cui il report continua a modificare il valore della casella di colonna dei numeri, e per quelli senza titolo, ve ne sarei molto grato. Vorrei una soluzione il più generalizzabile possibile, dato che la colonna Y che sto modellando potrebbe essere un tipo di dati ordinale/nominale a 2 livelli, ordinale/nominale a 3 livelli o continuo.
Grazie!,
DS
Automazione e scriptingAccesso ai datiPersonalizzazione di massaRe: JSL: Aiuto per l'accesso alle informazioni del report: XPath o struttura ad albero?Puoi ottenere facilmente un riferimento alle caselle di contorno con qualcosa del genere
ob_cm = rep[OutlineBox("Confusion Matrices")];
quindi esplora cosa c'è sotto, in questo caso la casella col span potrebbe essere un buon riferimento
Show(cpb[1] << get, cpb[2] << get);
o prendi la seconda scatola del tavolo
tb = rep[OutlineBox("Confusion Matrices"), Table Box(2)];
cpb << get as matrix;
I dettagli di adattamento possono essere accessibili con un'idea simile, ma puoi semplicemente usare il nome della casella di testo (come hai già fatto)
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: Aiuto per l'accesso alle informazioni del report: XPath o struttura ad albero?</LINGO-SUB>
<LINGO-BODY id="lingo-body-890752" slang="en-US" mode="CREATE">
<P>Non so quanto questo possa essere utile. Ma nel caso in cui tu o qualcun altro vogliate vedere alcuni esempi di XPath, ecco una serie di esempi a cui faccio riferimento quando utilizzo XPath. Potresti già esserne a conoscenza, ma in caso contrario, la pagina Modifica -> Proprietà ti mostrerà la struttura ad albero, con interattività quando passi il mouse sopra e clicchi sulle aree del report. Quindi puoi cliccare sull'area di interesse (casella con colonna numerica, ecc.) e ti mostrerà le informazioni correlate nel riquadro delle proprietà. Puoi espandere la casella di struttura "percorso box" nel riquadro delle proprietà e ti mostrerà il codice della struttura ad albero o il codice XPath a seconda dell'opzione del menu a discesa, e puoi generalizzare da lì. L'icona più a destra nell'area del percorso box copierà il codice.</P>
<BR />
<P>È possibile eseguire l'intero comando, ma saltare alle ultime 20 righe circa e utilizzare un array associativo sull'output degli ultimi bit di xpath.<BR /><BR /> Immagino che si possa usare qualcosa di simile e cercare "Allenamento" o "Tasso previsto" e poi, come dice Jarmo, esplorare i risultati.</P>
<BR />
<P>Tutto ciò che è commentato non funziona. Non faccio debug da anni e non ricordo nemmeno se quella parte sia codice valido.:)</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: Aiuto per l'accesso alle informazioni del report: XPath o struttura ad albero?Ciao @jthi ,
Grazie per la tua rapida risposta e i tuoi suggerimenti. Mi sono stati utili e sono riuscito ad accedere ai dati corretti con alcune piccole modifiche ai tuoi suggerimenti. Alla fine ho optato per questa soluzione per il mio caso, ma i tuoi suggerimenti si sono rivelati la soluzione giusta, grazie!
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;
Dovevo solo assicurarmi di accedere al ColStackBox e al Table Box corretti sotto il rispettivo Outline Box.
Grazie ancora per l'aiuto!
DS
Re: JSL: Aiuto per l'accesso alle informazioni del report: XPath o struttura ad albero?Ciao @mikedriscoll ,
Wow, davvero fantastico! Conosco entrambe le opzioni "Modifica > Mostra struttura ad albero" e "Mostra proprietà" dal clic destro sul triangolo grigio, ma non conoscevo il "Percorso box" e le opzioni associate. È MOLTO utile, grazie. Lo userò sicuramente in futuro per ottenere informazioni su XPath e indice per i report. Questo semplifica notevolmente la generalizzazione partendo dal solo report sulla struttura ad albero, che sembra mancare di alcune informazioni. Sarebbe bello se ci fosse un'opzione per visualizzare contemporaneamente sia la struttura ad albero che le proprietà. Grazie per il suggerimento, e penso che questa sia sicuramente un'altra soluzione valida, quindi la segnalo. Grazie anche per l'esempio di codice XPath. Penso che sarà utile studiarlo e iniziare a familiarizzare con l'uso corretto di XPath.
Grazie!,
DS
Re: JSL: Aiuto per l'accesso alle informazioni del report: XPath o struttura ad albero?Lieto di aiutarla!
@SDF1 ha scritto:
Sarebbe bello se ci fosse un'opzione per visualizzare contemporaneamente sia le informazioni sulla struttura ad albero che quelle sulle proprietà.
Ora sembra possibile. Nella mia versione di JMP non vedo il comando "modifica -> mostra struttura ad albero", ma ecco come farei.
1. Dall'output del report con le Proprietà non visualizzate, espandere la finestra verso destra in modo che ci sia almeno un po' di spazio vuoto "nuovo" oltre a quello predefinito creato da JMP quando ha creato la finestra del report.
2. ctrl+shift + clic destro nel "nuovo" spazio vuoto e clicca su "mostra struttura ad albero" (ho provato a farlo con le proprietà mostrate e ho ottenuto risultati diversi una volta, non ne sono sicuro)
3. Dalla finestra del report originale (non dalla finestra della struttura ad albero), vai su modifica -> mostra proprietà