JSL:帮助访问报告信息:Xpath 还是树结构?各位脚本编写者们好,
我在尝试访问来自 XGBoost 插件平台的报告中的某些信息时遇到了一些困难。我有一个 JSL 程序,用于生成一个包含不同 XGB 模型的表格——不同的深度、学习率、迭代次数等等。这段代码运行 XGBoost 平台,然后从 XGB 报告中提取信息并存储在输出数据表中。
我遇到的困难是尝试将一些代码泛化,以便使用 Outline box() 和 NumberColBox() 命令提取信息。附件是一份示例报告和下面的屏幕截图。

我想要从 4 个数字列框中提取数据——屏幕截图中红色框内的部分。通常,我会编写一些类似下面的 JSL 代码来定义轮廓框编号和数字列框编号,然后获取数据并将其存储在列表中,这样我就可以根据输出数据表中的需要将其分配给相应的列。
o_box = 1;
t_ncol_box = 35;
n_ncol_box = 36;
Tconfrates_ncol_box1 = 28;
Tconfrates_ncol_box2 = 29;
Tdata = w[Outline Box( o_box ), Number Col Box( t_ncol_box )] << Get;
NT = w[Outline Box( o_box ), Number Col Box( n_ncol_box )] << Get;
TConfR1 = w[Outline Box( o_box ), Number Col Box( Tconfrates_ncol_box1 )] << Get;
TConfR2 = w[Outline Box( o_box ), Number Col Box( Tconfrates_ncol_box2 )] << Get;
此 JSL 可完美运行以下输出:
Tdata = {0.92503341611747, 0.937048078393258, 0.0137071818977882, 0.0387471836917961,
0.012822908993725, 0}
新台币 = {6253}
TConfR1 = {1, 0}
TConfR2 = {0, 1}
我知道我还可以通过具体引用轮廓框和数字列框来获取一些数据,例如:
Tdata = w[Outline Box( "Fit Details" ), Number Col Box( "Training" )] << Get;
但是,由于报告的组织方式,它不包含数据集中使用的行数——在本例中,下一个数字列框的值为 6253(没有标题)。另外,我该如何引用混淆矩阵率——通过/通过率、通过/未通过率?混淆矩阵率的类似代码
TConfR1 = w[Outline Box( "Training" ), Number Col Box( "Pass" )] << Get;
TConfR2 = w[Outline Box( "Training" ), Number Col Box( "Fail" )] << Get;
将获得混淆矩阵计数,而不是比率(当然我可以根据计数计算比率,但立即访问信息会更容易)。
但是,当代码在表中进行下一次迭代(使用不同的模型参数)时,报告中相同数据的列框值会发生变化。例如,t_ncol_box 第二次不是 35,而是 43。
因此,很遗憾,引用报告和大纲框的“标准”方式似乎行不通。我在 JMP 的其他建模平台(例如提升树、神经网络、引导森林等)中没有遇到过这个问题。我原本想通过 XPath 访问它,但我对它了解不够,不知道如何正确提取我感兴趣的值——尤其是在数字列框的值发生变化时——而且数字列框并不总是有可用的标题——例如,训练集 N 中的数据点数量,它只是训练拟合细节(熵 R 方、RASE 等)中数字列框中的下一次迭代。
我以为我可以用一个逻辑语句来绕过“老式的?”或“传统的?”方法,该语句在模型步长 == 1 或 != 1 时更改数字列框变量的值。但在 16 个模型之后,这些值再次发生了变化——并且在 34 个模型时再次发生了变化。一定有一种更有效的方法来访问数据,而不必包含针对特定模型步长值(例如 i=16 或 i=34 时)的逻辑语句。当数字列框值可以更改且无法理解其原因时,这样做就不那么容易了。
任何关于如何更灵活地处理报表中数字列框值变化(以及没有标题的报表)的建议,我将不胜感激。我希望解决方案尽可能具有通用性,因为我正在建模的 Y 列可能是 2 级序数/名义型、3 级序数/名义型或连续数据类型。
谢谢!,
DS
自动化和脚本数据访问大规模定制回复:JSL:帮助访问报告信息:Xpath 还是树结构?你可以用类似这样的方法轻松获得轮廓框的参考
ob_cm = rep[OutlineBox("Confusion Matrices")];
然后探索这些下面是什么,在这种情况下,col span box 可能是一个很好的参考。
Show(cpb[1] << get, cpb[2] << get);
或乘坐第二桌的箱子
tb = rep[OutlineBox("Confusion Matrices"), Table Box(2)];
cpb << get as matrix;
可以使用类似的想法来访问适合的详细信息,但您只需使用数字列框名称即可(就像您已经做的那样)
tb_val = rep[OutlineBox("Fit Details"), Table Box(1), Number Col Box("Training")] << Get;
show(tb_val);
</CODE></P>
<BR />
</LINGO-BODY>
<LINGO-SUB id="lingo-sub-890752" slang="en-US" mode="CREATE">回复:JSL:帮助访问报告信息:Xpath 还是树结构?</LINGO-SUB>
<LINGO-BODY id="lingo-body-890752" slang="en-US" mode="CREATE">
<P>我不确定这会有多大帮助。但如果您或任何其他人想看一些 xpath 示例,这里有一组我在使用 xpath 时参考的示例。您可能已经知道,但如果不知道,编辑 -> 属性页面将显示树结构,当您将鼠标悬停在报告区域上并单击时,具有交互性。因此,您可以单击感兴趣的区域(数字列框等),它将在属性窗格中显示相关信息。您可以展开属性窗格中的“框路径”轮廓框,它将根据下拉选项显示轮廓树代码或 xpath 代码,您可以从那里进行概括。框路径区域最右边的图标将复制代码。</P>
<BR />
<P>您可以运行整个程序,但跳到最后 20 行左右,并在 xpath 的最后几位的输出上使用关联数组。<BR /><BR />我认为您可以使用类似的东西并寻找“训练”或“预测率”,然后像 Jarmo 所说的那样探索结果。</P>
<BR />
<P>注释掉的任何东西都不起作用。我已经好几年没调试过这个问题了,甚至不记得那部分代码是不是有效的。:)</img></P>
<BR />
<PRE><CODE class=" language-jsl">// This is a file containing some examples of xpath, which is useful for traversing display trees (outline boxes and other display boxes) and getting data from these reports. For example, getting mean and st dev from the summary stats section of a distribution report window, or an Rsquare from a fit y by x. both of these are shown below.
//Tip: go to Edit -> Properties from a report output. Expand the 'Box Path' outline box in the properties pane. Switch between Subscript and Xpath to see the different paths. and change the root to whatever is convenient. Right most icon here is copy, so you can copy / paste the code.
//below focuses on xpath.
names default to here(1);
open("$SAMPLE_DATA\Semiconductor Capability.jmp");
myDist = Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :NPN1 ),
Customize Summary Statistics(
Robust Mean( 1 ),
Robust Std Dev( 1 )
),
Capability Analysis( 1 )
),
Continuous Distribution(
Column( :PNP1 ),
Customize Summary Statistics(
Robust Mean( 1 ),
Robust Std Dev( 1 )
),
Capability Analysis( 1 )
),
Continuous Distribution(
Column( :PNP2 ),
Customize Summary Statistics(
Robust Mean( 1 ),
Robust Std Dev( 1 )
),
Capability Analysis( 1 )
)
);
reportObj=myDist<
<XPATH>
0 & StdIndx > 0, mean = statList[MnIndx]; std = statList[StdIndx]; , mean = -999; std = -999; ); show(mean, std); /*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ reportObj=myDist<
<XPATH></XPATH>
</XPATH>
<BR /> <BR />
回复:JSL:帮助访问报告信息:Xpath 还是树结构?你好@jthi ,
感谢您的快速回复和建议。它们很有帮助,我只需对您的建议稍作修改就能访问正确的数据。我最终还是根据我的情况选择了这个,但您的建议才是真正的解决方案,谢谢!
Tdata = w[Outline Box( "Fit Details" ), Number Col Box( "Training" )] << Get;
NT = w[Outline Box( "Fit Details" ), ColStackBox( 1 ), Number Col Box( 2 )] << Get;
TConfR1 = w[Outline Box( "Confusion Matrices" ), Table Box( 2 ), Number Col Box( y_levels[1] )] << Get;
TConfR2 = w[Outline Box( "Confusion Matrices" ), Table Box( 2 ), Number Col Box( y_levels[2] )] << Get;
只需要确保我正在访问相应的 Outline Box 下的正确的 ColStackBox 和 Table Box。
再次感谢您的帮助!
DS
回复:JSL:帮助访问报告信息:Xpath 还是树结构?你好@mikedriscoll ,
哇,太酷了!我熟悉右键单击灰色三角形后出现的“编辑”>“显示树形结构”和“显示属性”选项,但我不知道那里还有“框路径”及其相关选项。这非常有帮助,谢谢。以后我一定会用它来获取报告中的 XPath 和下标信息。这无疑让我更容易从“树形结构报告”中进行概括,因为“树形结构报告”似乎缺少一些信息。如果他们能提供同时显示“树形结构”和“属性”信息的选项就更好了。感谢您的建议,我绝对认为这是一个有效的解决方案,所以我也会标记它。也感谢您提供的 XPath 示例代码。我认为学习这些代码并开始熟悉如何正确使用 XPath 会很有帮助。
谢谢!,
DS
回复:JSL:帮助访问报告信息:Xpath 还是树结构?很高兴能帮助你!
@SDF1写道:
如果他们有一个选项可以同时显示树结构和属性信息,那就太好了。
现在看来可以了。我在我的 JMP 版本中没有看到“编辑 -> 显示树形结构”这个选项,不过我可以按照以下方法操作。
1. 从未显示属性的报表输出中,向右扩展窗口,这样除了 JMP 在创建报表窗口时创建的默认值之外,至少还会有一些“新的”空白空间。
2. 按住 ctrl+shift 键并在“新”空白处单击鼠标右键,然后单击“显示树结构”(我尝试显示属性并获得了不同的结果,不确定)
3. 从原始报告窗口(不是树结构窗口),转到编辑->显示属性