Salut,
J'utilise un script parmi les suivants poste pour essayer de développer la carte thermique créée à partir du script. Le script dans sa forme actuelle fait une carte thermique pour toutes les colonnes ensemble, mais je voudrais une colonne de carte thermique PER distincte. En d'autres termes, je voudrais trouver le minimum, le milieu et le maximum pour une certaine colonne, puis appliquer une carte thermique uniquement sur cette colonne, puis faire la même chose pour la colonne suivante et continuer.
Ci-joint les suivants
1. sample_base_table.jmp : il s'agit d'un ensemble d'échantillons de données extraites.
2. extract_cols.jsl : c'est le script qui résume les données à utiliser pour le script heatmap
3. heatmap.jsl : ce script effectue la carte thermique pour les colonnes spécifiées
Questions:
Lorsque j'exécute extract_cols.jsl, j'obtiens 4 nouvelles tables de données nommées "Untitled X". Ensuite, lorsque j'exécute heatmap.jsl, il est uniquement capable de créer une carte thermique pour la dernière table Untitled X créée. Je ne comprends pas pourquoi c'est... Lorsque je regarde le code du débogueur, il indique "impossible de trouver la colonne dans l'accès ou l'évaluation de 'Colonne'". Cependant, j'imprime la colonne utilisée "Médiane (Valeurs, Mangue)" et elle apparaît donc je ne suis pas sûr de ce qui se passe (voir l'image de sortie ci-dessous).

Améliorations/travaux futurs :
Idéalement, après avoir compris pourquoi seule la dernière table de données créée est mise à jour, j'aimerais concaténer toutes ces 4 colonnes de cartes thermiques de fruits dans une table de données qui contient également les informations sur les pays et les fruits. En d'autres termes, je génère 4 tableaux (32x3) et je voudrais générer 1 tableau (6x32) (carte thermique 4 fruits + colonne pays + colonne emplacements). Actuellement, la façon dont je fais est avec JMP Query Builder pour faire la concaténation des colonnes.
Si vous survolez trans:theList ou si vous spécifiez
show(trans:theList);
dans votre script, il vous montrera ce qui est dans la liste.Ce que vous verrez, ce sont 5 entrées.Le premier sera
Data Table( 'the name of your initial data table");
Chaque entrée suivante sera le pointeur vers le filtre de la table de données par Apple, puis Banana, puis Mango et enfin Orange.
Il ne contient pas les données, juste un pointeur vers celui-ci.Les noms de colonne, etc. sont extraits de la table de données réelle.
Vous devez prendre le temps de lire le Guide de création de scripts disponible dans la bibliothèque de documentation JMP, dans le menu déroulant Aide.
Merci c'est corrigé !
Ainsi, lorsque j'exécute le script heatmap, je reçois le message ci-dessous. Quand je change
dt= trans:thelist[5]
cela fonctionne mais encore une fois uniquement pour la dernière table de données créée. De plus, ce concept d'espace de noms est nouveau pour moi. Permettez-moi d'essayer de résumer ce que cela fait et pouvez-vous confirmer si ma compréhension est correcte ? Ainsi, en utilisant l'espace de noms dans le script, nous pouvons enregistrer tous les noms de table de données (et plus important encore, les noms de colonne et la valeur de cette table de données) dans une liste trans que nous appelons ensuite dans le script heatmap.

mon erreur, changer
insert into(theList,dt);
pour
insert into(trans:theList,dt);
theList n'existe pas......mais trans:theList existe
Merci pour la contribution !
Lorsque j'exécute le script extract_cols mis à jour que vous avez fourni, je reçois le message d'erreur suivant ci-dessous concernant l'accès à la valeur L ...

Vous spécifiez
Names Default To Here( 1 );
qui crée un espace de noms de mémoire séparé pour ce script spécifique.Autrement dit, dans votre script extract_cols, il existe une liste nommée "fruit".Si dans votre script heatmap vous avez spécifié
myFruit = fruit[1];
votre script heatmap ne saurait rien de votre variable appelée fruit.
Dans votre script heatmap, vous définissez la variable "dt" égale à la table de données actuelle.D'après votre description, vous exécutez le script headmap juste après avoir exécuté le script extract_cols.À tout moment dans JMP, il n'y a qu'une seule table de données qui est la table de données active actuelle.Par conséquent, lorsque vous spécifiez
dt = Current Data Table();
le script heatmap obtient la table de données active actuelle, qui serait la dernière table de données que vous avez créée dans le script extract_cols
Si vous devez transmettre la référence de table de données d'origine au deuxième script, et éventuellement aux 4 autres références de table de données, une façon de procéder consiste à créer un espace de noms séparé et à placer les références dans cet espace de noms.Voici une modification de votre script qui crée l'espace de noms et y place les références de la table de données.
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
);
Ensuite, vous pouvez référencer l'espace de noms dans votre script de carte thermique pour obtenir la référence de table principale ou l'une des références de table de données qui ont été enregistrées dans l'espace de noms.
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
)
);
);
);