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. 從原始報告視窗(不是樹狀結構視窗),前往編輯->顯示屬性