需要高级 JSL 帮助 - 从日志中读取数据你好
需要帮助,目前借助 GPT4.0 创建了一个 JSL 脚本,但该脚本无法运行。
脚本目的:进行单个日志的分析并将数据从中提取到 csv 中。
在第一轮中,我重点关注仅包含分类分析的期刊。
日志可能包含一个或多个分类变量的分类表,后面是共享图表和频率图表。我只对从表中提取数据感兴趣。我的实际实现处理 5 个类别的多项式类别,但在示例日志和脚本中,为了简单起见,我将其减少到 2 个类别(二进制)。
对于给定的参数值,分类表包含 3 行:计数、百分比和 pvalue。我只对提取百分比值感兴趣,当且仅当 pvalue<= 0.05 时
我需要将输出存储为 csv w/格式:
期刊名称、参数名称、参数值1、百分比类别0、百分比类别1
期刊名称、参数名称、参数值2、百分比类别0、百分比类别1
该脚本应该了解该期刊中存在的分类表的数量,然后提取所有表信息(仅适用于 pvalues<= 0.05)
对于任何时间有限来研究这个问题的人来说;
脚本运行时没有错误,但没有按预期提取数据。
主要问题出现在脚本末尾(第 155-175 行)。两个函数是根据 Type(journal) 进行处理的。我认为它可以正确获取 Type,但无法正确连接到函数
注意:我的第二阶段将包含类似的意图,但包含包含逻辑回归结果的日志
我还没有发布这个。我宁愿先解决这个问题。
附件中您将找到来自 JMP 样本数据库的《飞机事故》日志和适合尝试 2 个级别样本脚本。
非常感谢
开斋节
自动化和脚本分享和交流结果视窗回复:需要高级 JSL 方面的帮助 - 从日志中读取数据是否有特定原因要从日记帐中提取这些内容而不是从用于创建日记帐的 JMP 报告中提取这些内容?
回复:需要高级 JSL 方面的帮助 - 从日志中读取数据是的,为了与客户沟通,期刊大小明显变小了。我的期刊格式有两种,它们要么包含分类参数分析,要么包含连续参数分析。我希望从期刊中提取数据不会比从报告中提取数据那么困难。
回复:需要高级 JSL 方面的帮助 - 从日志中读取数据从报告中你基本上只需保存表格并几乎完成(根据最终结果,可能需要进行一些清理)

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();回复:需要高级 JSL 方面的帮助 - 从日志中读取数据我正在进行大规模分析,并将脚本流程分解为多个阶段。我确实已经生成了大量历史分析结果,但我并没有寻找一种解决方案(针对当前问题)来分析然后尝试创建摘要报告(如果可能)——只是因为重新运行它们不切实际。相反,我希望这个摘要脚本(从日志中提取数据)是分离的,因此出于解释的原因,它是有效的。
我的期刊包含多份报告,我有多个期刊。总的来说,这是大量的数据。期刊路线最适合我的工作。我需要通过脚本来做到这一点,否则就不切实际了。目前,我只追求一个分类表期刊。一旦我理解了我当前的错误并有一个适用于单个期刊的工作脚本,我就应该能够将其扩展以涵盖所有分类类型的期刊。我的另一个未来阶段是需要第二种期刊类型,每个期刊包含多个多项式逻辑回归。
脚本中存在问题,因为它没有将日志传达给子函数。我在想并希望这个错误仍然很容易。我也查看了脚本索引,看看是否还有其他方法可以提供帮助,但没有成功。
回复:需要高级 JSL 方面的帮助 - 从日志中读取数据我不确定你的脚本在做什么,因为你没有处理表格框(这很容易)。函数定义也不正确,这很可能解释了你的函数没有像你期望的那样执行。
我很可能甚至不会费心去摆弄列联表使用的显示框,而是从文本中解析它
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");回复:需要高级 JSL 方面的帮助 - 从日志中读取数据嗨,Jarmo,
首先感谢您的支持/帮助。我想花点时间将您的方法应用到我的脚本中。我已经能够适应它,但我还有一些问题……不过,我会选择上述方法作为解决方案。
我的后续问题:
回想一下,我的阶段 1 是纯分类表的日志,表/日志的数量是可变的。
1. 如何获取给定期刊的分类表数量(例如,上述情况为 2)
2. 如何获取此类分类表的名称(例如“按飞行大致阶段导致的致命事故”和“按天气条件导致的致命事故”)
3.我的第 2 阶段将是多项逻辑回归的纯集合。我从您的支持中得到的脚本并没有直接执行,但在引入之前我确实需要花一些时间。我也可以准备一个样本数据。所以让我在这个上面放一个占位符。
4. 进入更高级脚本的最快方法是什么?例如,如果我没有记错的话,在我的示例中,属性框会揭示可能相关的潜在 JMP 函数名称。我已经多次使用脚本索引,但在我的案例中效果不佳。我还记得以前有一个旧版本的脚本文档,我不确定它的最新版本在哪里。
再次感谢。
回复:需要高级 JSL 方面的帮助 - 从日志中读取数据1. 使用 XPath 是一种选择
obs = (j << XPath("//OutlineBox[contains(text(), 'Fatal By')]"));
2. 当你有大纲框引用时,你可以使用 << 获取标题
obs << get title;
4. 利用JMP 帮助中的脚本索引、脚本指南(JMP 帮助也有 JSL 语法参考)。此外,目前您不应该依赖 LLM 来编写 JSL,因为它们非常不可靠(正如您从脚本中看到的那样)。
回复:需要高级 JSL 方面的帮助 - 从日志中读取数据我尝试了示例数据中的 obj 语法,但是没有起作用。
名称未解析:访问或评估“obj”时出现 obj,obj/*###*/
我的所有表在表名中都有一个通用字符串,因此我可以搜索该通用字符串(例如上例中的“Fatal by”)。
我假设当它工作时,obj 将是一个列表,所以在这种情况下我可能不需要知道日志中的表数
对于法学硕士,我同意你的看法。一开始,脚本结构给出得非常快,结果发现很多地方都行不通。更令人沮丧的是,他们有时会变得非常愚蠢……它会提供一个代码,我会向它提供反馈,甚至在某些情况下告诉它进行具体的更正……下一轮,法学硕士会提供相同的错误解决方案。我想我甚至连续看到过两次以上这种情况。
但很多时候,对于比较简单的东西,它可以让我快速启动,所以我当然会继续谨慎使用。
回复:需要高级 JSL 方面的帮助 - 从日志中读取数据使用 JSL 时,您应该在 JMP 中以交互方式启动,并让 JMP 创建脚本。然后,如果这还不够,并且您希望编写更多脚本,请简要浏览脚本指南。然后利用脚本索引作为您的主要资源(它还包含指向脚本指南/JSL 语法参考的链接),并时不时地咨询 LLM,但要明白 LLM 通常对 JSL 非常不了解。