Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeJe génère plusieurs graphiques avec des statistiques calculées. Je voudrais transmettre des paramètres statistiques calculés spécifiques, par exemple le minimum, la médiane et le maximum de Quantiles et Std Dev de Statistiques récapitulatives à des coordonnées spécifiques dans une table de données enregistrée à l'aide de JSL.
Par exemple, je voudrais transmettre
- Quantile minimum à la ligne 5, colonne 7
- médiane à la ligne 5, colonne 8
- Quantile maximum à la ligne 5, colonne 9
- Std Dev à la ligne 5 colonne 10.
à ma table de données enregistrée. Comment y parvenir en utilisant JSL?
(les coordonnées sont vides dans la table de données sauvegardées pour commencer)
Tableau de donnéesGraphiqueScriptRe : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeMerci. Cela marche. Venant de Matlab et C #, je m'habitue encore à la façon de penser JSL.
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeRegardez attentivement votre code. vous affectez la valeur renvoyée de la fonction include à resultsdt. Cette valeur renvoyée est la dernière chose effectuée par le fichier inclus, qui est évalué à "H". ce n'est pas un tableau de données.
Éditer:
soit (1) ajouter une dernière ligne à basicTable.jsl qui dit
resultsdt;
ou (2) modifier l'inclusion comme ceci (en ajoutant un commentaire)
/*resultsdt =*/ include ("basicTable.jsl");
Je pense que (1) semble plus proche de ce que vous attendez. Il s'assure que la dernière chose évaluée est la variable contenant la table de données, qui est ensuite renvoyée comme résultat de include ().
(2) fonctionnera également, peut-être, en fonction du comportement local et en utilisant le même nom de variable. Je pense que ce sera un peu imprévisible selon si vous utilisez namesDefaultToHere partout et si resultsdt existe déjà. Je ne sais pas comment cela fonctionnera sans test.
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeLa déclaration
Column(resultsdt, "Column 1")[8] ="H";
passe juste un nom de paramètre H à la 8e ligne de la colonne 1. Une autre façon de définir résultatsdt
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
resultsdt:Column 1[1] ="A";
resultsdt:Column 1[2] ="B";
resultsdt:Column 1[3] ="C";
resultsdt:Column 1[4] ="D";
resultsdt:Column 1[5] ="E";
resultsdt:Column 1[6] ="F";
resultsdt:Column 1[7] ="G";
resultsdt:Column 1[8] ="H";
ne fonctionne pas non plus lors de l'utilisation
resultsdt = include ("basicTable.jsl");
Cependant, si je laisse la colonne 1 vide, le code s'exécute correctement. Toute aide pour résoudre ce problème serait très utile.
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistrée
resultsdt = include ("basicTable.jsl");
Si ce fichier est ce que vous montrez, le problème est que resultsdt n'est pas une table de données, mais (peut-être ?)
Column(resultsdt, "Column 1")[8] ="H";
qui pourrait être "H". Le résultat de la fonction include est la dernière chose évaluée. (Conformément à votre note.)
Oui, le message d'erreur n'a pas été aussi utile que vous le souhaiteriez. @Audrey_Shul - il doit pointer vers la gauche du =, pas vers la droite.
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeMerci @Craige_Hales . Je comprends un peu mieux le problème maintenant. Cependant, il y a toujours un problème. Les travaux suivants comme prévu
Names Default To Here (1);
delete symbols ();
clear log ();
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
//resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
Cependant, si je définis résultatsdt séparément comme ci-dessous
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
puis appelez-le comme ci-dessous (c'est ainsi que j'ai configuré mon code actuel)
Names Default To Here (1);
delete symbols ();
clear log ();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
j'obtiens l'erreur
Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[1, 2] = /*###*/toPass/*###*/
où est-ce que je me trompe ?
(Je note que si je ne définis pas du tout les entrées dans la colonne 1, les deux approches ci-dessus fonctionnent bien)
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistrée2 problèmes, la variable locale renvoyée n'est jamais affectée et la table de données doit être transmise à la fonction utilisateur. Quelque chose comme ça
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function( {dt, ColName, _LSL, _USL},
{distChart},
New Window( "" || ColName || " distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( As Column( ColName ) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL( _LSL ), USL( _USL ) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
)
);
Return( distChart );
);
dist = getDistChart( dt, "weight", 55, 185 );
Dans JMP, l'opérateur << est le envoyer opérateur et envoie un message (à droite) à un objet scriptable , à gauche. La table de données (dt) est un objet scriptable, mais elle ne connaît pas un message getDistChart . Il connaît les plates-formes intégrées, comme Distribution . L'index de script affiche tous les noms de message pour la table de données.
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistrée@ron_horne . Ce qui suit devrait aider à clarifier un peu plus les choses car cela ressemble beaucoup à mon problème actuel. J'obtiens le diagramme de distribution via une fonction.
Names Default To Here (1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = dt << getDistChart ("weight", 55, 185);
Pour moi, il semble que la dernière ligne ne fasse pas ce qu'elle est censée faire pour extraire des valeurs de la distribution car aucune distribution n'est tracée en premier lieu. La question est maintenant de savoir comment obtenir les valeurs des statistiques calculées lorsque la distribution est tracée via une fonction telle que la mienne ci-dessus. Peut-être qu'une fonction n'est pas un message et ne peut donc pas être envoyée à un objet en utilisant << ?
Toute aide serait très utile car j'apprends encore JMP.
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeMerci encore @ron_horne , mais les deux ne fonctionnent pas et me donne la même erreur.
Êtes-vous en train de dire que ce qui suit est une utilisation correcte et valide ? Remarque c'est ne complotant pas la distribution si elle est utilisée comme ci-dessous (d'ailleurs je ne comprends pas la fonction de distance dans dist=dt ?)
Output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
et l'erreur (copiée du journal)
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , Output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[5, 9] = /*###*/Output[Outline Box( "Pass Distribution" ),
Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/
/*###*/
Je reçois est dû à ma déclaration suivante (même lorsque votre suggestion ci-dessous)
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
Si, oui, je souhaite faire un test simple et passer quelque chose de plus simple à resultsdt. Existe-t-il un test simple que je peux faire pour tester si je peux obtenir quoi que ce soit de Production à la table de données résultatsdt ?
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeSalut @Néo ,
si je comprends bien votre problème, vous devez faire attention à la numérotation et aux adresses. une fois que vous utilisez les noms des boîtes de contour, la numérotation des boîtes de table et des boîtes de numérotation commence à partir de 1.
Par conséquent, essayez ce qui suit :
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
si vous voulez utiliser Number Col Box (11), essayez ceci :
resultsdt[5, 9] = Output[Number Col Box( 11)] << get( 1 ); // max
espérons que cela fonctionne maintenant.
généralement, il existe des moyens beaucoup plus sophistiqués de faire en sorte que le script trouve l'emplacement des valeurs d'intérêt en utilisant xpath () ou la correspondance de modèle comme dans ce lien : http://www.pega-analytics.co.uk/blog/oneway-advisor-step-3/
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeMerci @ron_horne . Permettez-moi d'essayer de donner un aperçu de ce que j'essaie de faire. Mon script principal a le flux suivant (simplifié ici).
Ouvrez une table de données (et appelez-la dt ), puis tracez des tracés de distribution pour plusieurs colonnes à l'aide d'une fonction
getDistribution ("ColName", "LSL", "USL", "other input parameters")
Chaque diagramme de distribution résultant a des "quantiles", des "statistiques récapitulatives" et une "analyse de capacité (avec contour fermé)".
La prochaine partie du script principal consiste à créer une table (appelons-la résultatsdt ) avec plusieurs lignes et colonnes où je dois transmettre des valeurs de statistiques calculées comme indiqué dans le message d'origine.
Cependant, ce qui suit ne fonctionne pas.
output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 6 ), Number Col Box( 11)] << get( 1 ); // max
Je me suis assuré que les nombres dans Table Box () et Number Col Box () sont corrects. J'obtiens l'erreur suivante
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 6 ), Number Col Box( 11 )] << /*###*/get( 1 ) /*###*/
Où est-ce que je me trompe ?
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeSalut Néo,
votre référence à distb ne fonctionne pas sine distb n'est pas une couche de rapport de quoi que ce soit. c'est la couche d'analyse. Dans JMP, il y a une différence entre eux.
afin d'extraire quoi que ce soit de la sortie, vous devez référencer explicitement la couche de rapport.
regarde ça: Extraire les statistiques d'une analyse dans un rapport si vous avez plusieurs sorties, vous devrez les nommer et les définir correctement pour être sûr d'obtenir les valeurs que vous visez.
Faites-nous savoir si cela fonctionne. sinon, envisagez de fournir des fichiers et des scripts à partir du point qui vous pose problème.
tous mes vœux,
Ron
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistrée@ron_horne . Merci. Il m'a fallu du temps pour recoder afin que je puisse avoir Un "tableau de résultats" ouvert pour les valeurs issues des statistiques calculées pourrait lui être transmis.
J'ai commencé avec votre suggestion et j'ai une question. Pourquoi cela ne fonctionne-t-il pas ?
distb = Distribution( Continuous Distribution( Column( :height ) ) ) ;
// Extract min median max and SD
resultsdt[5, 7] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = distb[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
et pourquoi doit-il être?
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
J'ai plusieurs parcelles de distribution auxquelles je peux facilement attribuer un nom tel que distb1, distb2, ... mais si ai-je besoin d'avoir
output = Report( dist = dt << Distribution( ..... ) );
Je vais devoir vérifier comment cela affecte le reste de mon code.
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistrée
Salut @Néo
À ma connaissance, il n'existe aucun moyen dans JMP de définir des données dans une cellule d'un tableau fermé.
Si quelqu'un d'autre ici sait mieux s'il vous plaît laissez-nous savoir.
peut-être pouvez-vous ouvrir un autre tableau en tant qu'intermédiaire pour y conserver les informations pendant que vous collectez encore et seulement à la fin ouvrir le tableau des résultats finaux.
Ron
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeMerci @ron_horne . Je pense que cela fonctionnerait. Cependant, avant d'essayer cela sur mon problème réel, j'ai une question. Le "tableau des résultats" doit-il s'ouvrir avant que les valeurs puissent lui être transmises ?
Dans mon cas, le "Tableau des résultats" est un fichier enregistré et je ne prévoyais pas de l'ouvrir à moins qu'il ne soit pas possible de lui transmettre des valeurs autrement.
(J'aurai besoin de changer le reste de mon code si j'ai besoin d'avoir mon "Results Table" ouvert à l'instance lorsque les valeurs lui sont transmises)
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeSalut @Néo
voyez si vous pouvez extraire ce dont vous avez besoin de ce script
Names Default To Here( 1 );
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 20 ),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
// Open Data Table: Big Class.jmp
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Launch platform: Distribution
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
// Extract min median max and SD
resultsdt[5, 7] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = output[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
lorsqu'il s'agit d'extraire des nombres de la sortie, il faut être prudent. Les références correctes aux emplacements peuvent changer si la sortie est différente en raison de préférences ou inclut simplement plusieurs sorties dans une seule fenêtre.
Faites-nous savoir si cela fonctionne.
Ron
Re : Passer des éléments de statistiques calculées à des coordonnées spécifiques dans une table de données enregistréeje pense abonnement à une table de données peut vous aider avec ça
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[10,3] = "AAAAAAAAAAAAAA";