Passer des éléments des 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 souhaite 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 sauvegardée. Comment y parvenir en utilisant JSL ?
(les coordonnées sont vides dans le tableau de données enregistré 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éeje pense indice de 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";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 comprend simplement plusieurs sorties dans une 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éeMerci @ron_horne . Je pense que cela fonctionnerait. Cependant, avant d'essayer cela sur mon problème réel, j'ai une question. La « Table des résultats » doit-elle s'ouvrir avant que les valeurs ne puissent lui être transmises ?
Dans mon cas, la "Table des résultats" est un fichier enregistré et je n'avais pas l'intention de l'ouvrir à moins qu'il ne soit pas possible de lui transmettre des valeurs autrement.
(Je devrai modifier le reste de mon code si j'ai besoin d'ouvrir ma "Table des résultats" sur 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ée
salut @Néo
Autant que je sache, 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 une autre table en tant qu'intermédiaire pour y conserver les informations pendant que vous êtes encore en train de collecter et n'ouvrir qu'à la fin la table de résultat final.
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 un certain temps pour recoder pour que je puisse avoir La « Table des résultats » ouverte pour les valeurs des statistiques calculées pourrait lui être transmise.
J'ai commencé avec votre suggestion et j'ai une question à Dieu. Pourquoi ça ne marche 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 l'ê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 j'ai 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é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: https://community.jmp.com/t5/JSL-Cookbook/Extract-Statistics-from-an-Analysis-into-a-Report/ta-p/41547
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é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 tracer des diagrammes de distribution pour plusieurs colonnes à l'aide d'une fonction
getDistribution ("ColName", "LSL", "USL", "other input parameters")
Chaque graphique de distribution résultant a des « Quantiles », des « Statistiques récapitulatives » et une « Analyse des capacités (avec contour fermé) ».
La partie suivante 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ù vais-je mal?
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 zones de contour, la numérotation des zones de table et des zones de numérotation commence à 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 souhaitez 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 d'obtenir le script pour trouver l'emplacement des valeurs d'intérêt à l'aide de xpath () ou d'une 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 encore @ron_horne , mais les deux ne fonctionnent pas et me donnent la même erreur.
Êtes-vous en train de dire que ce qui suit est une utilisation correcte et valide ? Notez que c'est ne pas tracer la distribution si utilisée comme ci-dessous (d'ailleurs je ne comprends pas la fonction de dist dans dist=dt ?)
Output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
et l'erreur (copié à partir 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 voudrais faire un test simple et passer quelque chose de plus simple à resultsdt. Y a-t-il un test simple que je peux faire pour tester si je peux obtenir quoi que ce soit de Sortir à 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ée@ron_horne . Ce qui suit devrait aider à clarifier un peu plus les choses car il est très similaire à 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);
Il me semble que la dernière ligne ne fait pas ce qu'elle est censée faire pour extraire les 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.