Besoin d'aide avec Advanced JSL - Lecture de données à partir d'un journalBonjour
Besoin d'aide avec un script JSL qui a été créé jusqu'à présent avec l'aide de GPT4.0 mais qui ne fonctionne pas.
Objectif du script : prendre un seul journal d'analyse et en extraire les données dans un fichier csv.
Dans ce premier tour, je me concentre sur les revues contenant uniquement des analyses catégorielles.
Le journal peut contenir 1 ou plusieurs tableaux catégoriques pour une variable catégorielle, suivis d'un graphique partagé et d'un graphique de fréquence. Je ne m'intéresse qu'à l'extraction de données à partir des tableaux. Mon implémentation actuelle traite d'une classe multinomiale de 5 classes, mais dans l'exemple de journal et de script, j'ai réduit cela à 2 classes (binaires) pour plus de simplicité.
Le tableau catégoriel contient 3 lignes pour une valeur de paramètre donnée : nombre, pourcentage et pvalue. Je ne souhaite extraire les valeurs de pourcentage que si et seulement si pvalue<= 0,05
J'ai besoin de stocker les sorties dans un fichier csv au format :
nom du journal, nom du paramètre, valeur du paramètre 1, classe de pourcentage 0, classe de pourcentage 1
nom du journal, nom du paramètre, valeur du paramètre 2, classe de pourcentage 0, classe de pourcentage 1
Le script doit comprendre le nombre de tables catégorielles présentes dans ce journal, puis extraire toutes les informations de la table (uniquement pour les valeurs p <= 0,05)
Pour tous ceux qui disposent de peu de temps pour se pencher sur la question ;
le script s'exécute sans erreur mais n'extrait pas les données comme prévu.
le problème principal se situe à la fin du script (lignes 155-175) . .Deux fonctions sont construites pour traiter en fonction du type (journal) . Je pense qu'il obtient correctement le type mais ne parvient pas à se connecter correctement aux fonctions
Remarque : ma phase 2 comportera une intention similaire, mais avec des journaux contenant des résultats de régression logistique
Je n'ai pas encore posté ça. Je préfère que ce problème soit résolu en premier.
Vous trouverez ci-joint le journal des incidents d'aéronefs de la bibliothèque d'exemples de données JMP et un exemple de script adapté pour essayer 2 niveaux de classe.
Très apprécié
Fête de l'Aïd al-Adha
Automatisation et scriptsPartage et communication des résultatsFenêtresRe: Besoin d'aide avec Advanced JSL - Lecture de données à partir d'un journalExiste-t-il une raison spécifique pour les extraire du journal au lieu du rapport JMP utilisé pour créer le journal ?
Re: Besoin d'aide avec Advanced JSL - Lecture de données à partir d'un journalOui, les tailles des journaux sont nettement plus petites pour communiquer avec mes clients. Mes formats de journaux sont de 2 types, ils contiennent soit des analyses de paramètres catégoriques, soit des analyses de paramètres continus. J'espère que l'extraction des données d'un journal n'est pas aussi difficile que celle d'un rapport.
Re: Besoin d'aide avec Advanced JSL - Lecture de données à partir d'un journalÀ partir du rapport, il vous suffit simplement d'enregistrer le tableau et vous aurez presque terminé (un certain nettoyage peut être nécessaire en fonction de votre résultat final)

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Aircraft Incidents.jmp");
fg = dt << Fit Group(
cg1 = Categorical(
ChiSquare Test Choices("Pearson Only"),
X(:Broad Phase of Flight),
Responses(:Fatal),
Cell Chisq(1),
Share Chart(1),
Frequency Chart(1),
Legend(0)
),
Categorical(
ChiSquare Test Choices("Pearson Only"),
X(:Weather Condition),
Responses(:Fatal),
Cell Chisq(1),
Share Chart(1),
Frequency Chart(1),
Legend(0)
),
<<{Arrange in Rows(2)}
);
dt_cont = cg1 << Save Contingency Table();Re: Besoin d'aide avec Advanced JSL - Lecture de données à partir d'un journalJ'effectue une analyse à grande échelle et mon processus de script est divisé en plusieurs phases. J'ai déjà produit de nombreux résultats d'analyse historiques, je ne cherche pas de solution (pour le problème actuel) qui analyse puis essaie de créer un rapport de synthèse (si possible) - simplement parce qu'il n'est pas pratique de les réexécuter. J'aime plutôt que ce script de synthèse (extraction de données d'un journal) soit découplé et donc, pour les raisons expliquées, qu'il fonctionne.
Mes journaux contiennent plusieurs rapports et j'ai plusieurs journaux. Dans l'ensemble, cela représente beaucoup de données. La voie du journal est la plus appropriée pour mon travail. Je dois le faire via un script, sinon ce ne serait pas pratique. Pour le moment, je ne recherche qu'un seul journal de tables catégorielles. Une fois que j'aurai compris mon erreur actuelle et que j'aurai un script de travail pour un seul journal, je devrais pouvoir l'étendre pour couvrir tous les journaux de type catégoriel. Mon autre phase future est un besoin similaire d'un deuxième type de journal contenant plusieurs régressions logistiques multinomiales par journal.
Il y a un problème dans le script car il ne communique pas le journal aux sous-fonctions. Je pensais et j'espérais que cette erreur était toujours simple. J'ai également parcouru l'index des scripts pour voir si autre chose pouvait aider, sans succès.
Re: Besoin d'aide avec Advanced JSL - Lecture de données à partir d'un journalJe ne suis pas sûr de ce que fait votre script car vous ne traitez pas de boîtes de table (ce serait très simple). Les fonctions sont également mal définies, ce qui explique très probablement que vos fonctions ne soient pas exécutées comme vous l'attendez.
Je ne prendrais probablement même pas la peine de jouer avec la boîte d'affichage utilisée par le tableau de contingence et je l'analyserais à partir du texte
Names Default To Here(1);
j = Current Journal();
agb = j["Fatal By Broad Phase of Flight",AlignmentGridBox(1)];
txt = agb << get text;
lines = Words(txt, "\!N");
Remove From(lines, 1, 3);
res = {{}};
For Each({line}, lines,
res_line = {};
vals = Words(line, "}\!t");
Insert Into(res_line, Remove From(vals, 1)); // param name?
Insert Into(res_line, Remove From(vals, 1)); // param value?
Insert Into(res_line, Words(Remove From(vals, 1)[1], ",")); // class1
Insert Into(res_line, Words(Remove From(vals, 1)[1], ",")); // class2
Insert Into(res, Concat items(res_line, "\!t"));
);
dt = Open(Char To Blob(Concat Items(res, "\!N")), "text");Re: Besoin d'aide avec Advanced JSL - Lecture de données à partir d'un journalSalut Jarmo,
Tout d'abord, merci pour votre soutien/aide. Je voulais prendre un peu de temps pour mettre en œuvre votre approche ici dans mon script. J'ai pu l'adapter mais j'ai encore quelques questions... Je vais néanmoins sélectionner la solution ci-dessus.
Mes questions complémentaires :
Rappelant que ma phase 1 est un journal de tableaux purement catégoriels, le nombre de tableaux/journal est variable.
1. Comment obtenir le nombre de tables catégorielles pour un journal donné (dans le cas ci-dessus par exemple, ce serait 2)
2. Comment obtenir les noms de ces tables catégorielles (par exemple « Fatal By Broad Phase of Flight » et « Fatal By Weather Condition »)
3. Ma phase 2 sera une simple collection de régressions logistiques multinomiales. Le script que j'ai obtenu de votre support ne s'est pas exécuté directement, mais je dois y consacrer un peu de temps avant de l'apporter. Je peux également préparer un échantillon de données. Permettez-moi donc de mettre un espace réservé sur celui-ci.
4. Quel est le moyen le plus rapide pour accéder à des scripts plus avancés ? Par exemple, si je ne me trompe pas, dans mon exemple, la boîte de propriétés apporte un éclairage sur les noms de fonctions JMP potentielles qui peuvent être liées. J'ai utilisé l'index de script assez souvent, mais cela n'a pas été très efficace dans mon cas. Je me souviens également qu'il y avait une documentation sur les scripts avec les anciennes versions, je ne sais pas où se trouve la dernière version.
Merci encore.
Re: Besoin d'aide avec Advanced JSL - Lecture de données à partir d'un journal1. L'utilisation de XPath est une option
obs = (j << XPath("//OutlineBox[contains(text(), 'Fatal By')]"));
2. Lorsque vous avez des références de zone de contour, vous pouvez utiliser << Obtenir le titre
obs << get title;
4. Utilisation de l'index de script, du guide de script de l'aide JMP (l'aide JMP contient également une référence de syntaxe JSL). De plus, pour le moment, vous ne devriez pas vous fier à LLM pour JSL car ils ne sont pas très fiables (comme vous pouvez le voir dans votre script).
Re: Besoin d'aide avec Advanced JSL - Lecture de données à partir d'un journalJ'ai essayé la syntaxe obj telle qu'elle est dans les données d'exemple et cela n'a pas fonctionné.
Nom non résolu : obj dans l'accès ou l'évaluation de 'obj', obj/*###*/
Toutes mes tables ont une chaîne commune dans le nom de la table afin que je puisse rechercher cette chaîne commune (comme « Fatal by » dans l'exemple ci-dessus).
Je suppose que lorsque cela fonctionne, obj sera une liste, donc dans ce cas, je n'ai probablement pas besoin de connaître le nombre de tables dans le journal
Pour les LLM, je suis d'accord avec toi. Au début, la structure du script est donnée très rapidement juste pour découvrir que de nombreux domaines ne fonctionnent pas. Ce qui est plus frustrant, c'est qu'ils peuvent parfois devenir littéralement stupides... Il fournissait un code sur lequel je donnais mon avis et même dans certains cas lui demandais d'effectuer des corrections spécifiques... au tour suivant, le LLM fournissait la même mauvaise solution. Je pense même avoir vu cela plus de 2 fois de suite.
Mais souvent et pour des choses plus simples, cela peut me faire démarrer, alors je continue à l'utiliser avec prudence bien sûr.
Re: Besoin d'aide avec Advanced JSL - Lecture de données à partir d'un journalAvec JSL, vous devez commencer de manière interactive dans JMP et laisser JMP créer le script. Ensuite, si cela ne suffit pas et que vous souhaitez faire un peu plus de scripts, parcourez rapidement le Guide de scripts. Utilisez ensuite l'Index des scripts comme ressource principale (il contient également des liens vers le Guide de scripts / Référence de syntaxe JSL) et consultez LLM de temps en temps MAIS comprenez que LLM a généralement très tort avec JSL.