CIAO,
Sto usando uno script dal seguente inviare per cercare di espandere la heatmap creata dallo script. Lo script nella sua forma attuale crea una mappa di calore per tutte le colonne insieme, ma vorrei una mappa di calore PER colonna separata. In altre parole, vorrei trovare il minimo, il medio e il massimo per una determinata colonna, quindi applicare una mappa termica solo su quella colonna, quindi fare la stessa cosa per la colonna successiva e continuare.
In allegato i seguenti
1. sample_base_table.jmp: questo è un insieme campione di dati da cui vengono estratti.
2. extract_cols.jsl: questo è lo script che riassume i dati da utilizzare per lo script heatmap
3. heatmap.jsl: questo script esegue la heatmap per le colonne specificate
Problemi:
Quando eseguo extract_cols.jsl ottengo 4 nuovi datatables denominati "Untitled X". Quindi, quando eseguo heatmap.jsl, è solo in grado di creare una mappa termica per l'ultima tabella X senza titolo creata. Non capisco perché questo sia... Quando guardo il codice del debugger, dice "impossibile trovare la colonna nell'accesso o nella valutazione di 'Colonna'". Tuttavia, stampo la colonna utilizzata "Median(Values, Mango)" e viene visualizzata, quindi non sono sicuro di cosa stia accadendo (vedere l'immagine dell'output di seguito).

Miglioramenti/Lavori futuri:
Idealmente, dopo aver capito perché viene aggiornata solo l'ultima tabella di dati creata, vorrei concatenare tutte queste 4 colonne di heatmap di frutta in una tabella di dati che contenga anche i Paesi e le informazioni sulla frutta. In altre parole, sto generando 4 (32x3) tabelle e vorrei generare 1 (6x32) tabella (4 mappe di calore della frutta + colonna dei paesi + colonna delle località). Attualmente il modo in cui sto facendo è con JMP Query Builder per eseguire la concatenazione delle colonne.
Se passi il mouse su trans:theList o se specifichi
show(trans:theList);
nel tuo script ti mostrerà cosa c'è nella lista.Quello che vedrai sono 5 voci.Il primo sarà
Data Table( 'the name of your initial data table");
Ogni voce successiva sarà il puntatore al filtro della tabella dati per Apple, quindi Banana, quindi Mango e infine Orange.
Non contiene i dati, solo un puntatore ad esso.I nomi delle colonne, ecc. vengono recuperati dalla tabella dati effettiva.
È necessario dedicare del tempo alla lettura della Guida agli script disponibile nella Libreria della documentazione di JMP, nel menu a discesa Guida.
Grazie che l'ha risolto!
Quindi quando eseguo lo script heatmap ottengo il messaggio qui sotto. Quando cambio
dt= trans:thelist[5]
funziona ma ancora una volta solo per l'ultima tabella di dati creata. Anche questo concetto di spazio dei nomi è nuovo per me. Vorrei provare a riassumere cosa sta facendo e puoi confermare se la mia comprensione è corretta? Quindi, utilizzando lo spazio dei nomi nello script, siamo in grado di salvare tutti i nomi delle tabelle di dati (e, soprattutto, i nomi delle colonne e il valore di quella tabella di dati) in un elenco trans che chiamiamo quindi nello script heatmap.

mio errore, cambia
insert into(theList,dt);
A
insert into(trans:theList,dt);
theList non esiste......ma trans:theList sì
Grazie per l'input!
Quando eseguo lo script extract_cols aggiornato che hai fornito, ricevo il seguente messaggio di errore sull'accesso al valore L ...

Stai specificando
Names Default To Here( 1 );
che crea uno spazio dei nomi di memoria separato per quello script specifico.Cioè, nel tuo script extract_cols, c'è un elenco chiamato "fruit".Se nel tuo script heatmap hai specificato
myFruit = fruit[1];
il tuo script heatmap non saprebbe nulla della tua variabile chiamata fruit.
Nel tuo script heatmap, imposti la variabile "dt" uguale alla tabella di dati corrente.Dalla tua descrizione, stai eseguendo lo script headmap subito dopo aver eseguito lo script extract_cols.In qualsiasi momento in JMP, esiste solo 1 tabella dati che è la tabella dati attiva corrente.Pertanto quando si specifica
dt = Current Data Table();
lo script heatmap ottiene la tabella di dati attiva corrente, che sarebbe l'ultima tabella di dati che hai creato nello script extract_cols
Se è necessario passare il riferimento alla tabella dati originale al secondo script, e possibilmente agli altri 4 riferimenti alla tabella dati, un modo per farlo è creare uno spazio dei nomi separato e inserire i riferimenti in quello spazio dei nomi.Ecco una modifica al tuo script che crea lo spazio dei nomi e vi inserisce i riferimenti alla tabella dei dati.
Names Default To Here( 1 );
Clear Symbols();
dt = Current Data Table();
if(isnamespace("trans")==0, trans = new namespace("trans"));
trans:theList = {};
insert into(theList,dt);
fruit = {"Apple","Banana","Mango","Orange"};
For(i = 1, i <= N Items(fruit), i++,
obj = dt << Tabulate(
Set Format( Uniform Format( 10, 0 ) ),
Add Table(
Column Table(
Statistics( Median ),
Grouping Columns( :fruits ),
Analysis Columns( :Values )
),
Row Table( Grouping Columns( :Countries, :locations ) )
),
Local Data Filter(
Add Filter(
columns( :fruits),
Where( :fruits == fruit[i] ),
Display( :fruits, N Items( 14 ) )
)
)
);
trans:theList[i+1] = obj<< make into data table;
Current Report() << Close Window
);
Quindi puoi fare riferimento allo spazio dei nomi nello script della mappa termica per ottenere il riferimento alla tabella principale o uno qualsiasi dei riferimenti alla tabella di dati che sono stati salvati nello spazio dei nomi.
Names Default To Here( 1 );
Clear Symbols();
dt = trans:thelist[1];
dt << Begin Data Update;
///////////////////////////////////
// Setting Variables for script ///
//rev_scale = "Reverse Scale";
rev_scale =0;
mean_median = 1; //mean=0, median=1
print(mean_median);
///////////////////////////////////
//gets all columns that are continous and stores that in a list as strings.
colList = dt << get column names( continuous, string );
print(colList);
// Create a temporary subset where the columns are the column list, selects all rows,
// invisible makes it so you don't see the datatable on screen since it is temporary
dtsub = dt << subset(columns(colList), selected rows(0),invisible);
// Move the data into a matrix this will be used later to get min, max, median|mean
allData = dtsub << get as matrix;
// Close the no longer needed temporary data table
close(dtsub, nosave);
// Calculate the statistics across the full data matrix
myMax = Maximum(allData);
myMin = Minimum(allData);
if(mean_median == 0,
myMid = Mean(allData),
myMid = Median(allData)
);
print(myMax);
print(myMin);
print(myMid);
print(colList);
// Run for loop over data table with the min, max and median|mean calculated from above
// gradient color scheme needs to be set.
if(rev_scale == 1,
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
Column( __col__ ) <<
set property(
"color gradient",
{"Green Yellow Red",
Range( {__Max__, __Min__, __Mid__} ),"Reverse Scale"}
) << Color Cell by Value( 1 );
),
Expr( __col__ ), colList[i],
Expr( __Max__ ), myMax,
Expr( __Min__ ), myMin,
Expr( __Mid__ ), myMid
)
);
);
,
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
Column( __col__ ) <<
//Column( colList[i] ) <<
set property(
"color gradient",
{"Green Yellow Red",
Range( {__Max__, __Min__, __Mid__} )}
) << Color Cell by Value( 1 );
),
Expr( __col__ ), colList[i],
Expr( __Max__ ), myMax,
Expr( __Min__ ), myMin,
Expr( __Mid__ ), myMid
)
);
);
);