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}
NT = {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 は2回目の実行では35ではなく、43になります。
残念ながら、レポートボックスとアウトラインボックスを参照する「標準的な」方法は実際には機能しないようです。JMPの他のモデリングプラットフォーム(ブーステッドツリー、ニューラルネット、ブートストラップフォレストなど)では、この問題は発生していません。XPath経由でアクセスすることも考えましたが、必要な値を正しく抽出する方法が十分に理解できていません。特に数値列ボックスの値が変化した場合に、数値列ボックスにタイトルが表示されないことがあります。例えば、トレーニングセットNのデータポイント数は、トレーニングフィットの詳細(エントロピーRSquare、RASEなど)から取得した次の反復処理の数値列ボックスに表示されるだけです。
モデルステップが1または1以外の場合、数値列ボックスの変数の値を変更する論理ステートメントを使えば、「古い?」あるいは「伝統的な?」という方法を回避できると考えていましたが、16モデル後、値が再び変化し、さらに34モデルでも変化しました。i=16やi=34といった特定のモデルステップ値に対する論理ステートメントを記述することなく、データにアクセスするより効率的な方法があるはずです。数値列ボックスの値が変化する可能性があり、しかもその理由がわからない場合、そう簡単にはいきません。
レポートの数値列ボックスの値の変化に柔軟に対応できる方法、またタイトルのないレポートについても、ご提案いただければ幸いです。モデル化しているY列は、2水準の順序尺度/名義尺度、3水準の順序尺度/名義尺度、または連続データ型の可能性があるため、できるだけ一般化できるソリューションを希望します。
ありがとう!、
DS
自動化とスクリプトデータアクセスマスカスタマイゼーションRe: JSL: レポート情報へのアクセスに関するヘルプ: Xpath またはツリー構造?アウトラインボックスへの参照は次のように簡単に取得できます。
ob_cm = rep[OutlineBox("Confusion Matrices")];
次に、それらの下にあるものを調べます。この場合、col spanボックスが参考になるかもしれません。
Show(cpb[1] << get, cpb[2] << get);
または2番目のテーブルボックスを取る
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">Re: 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 />
Re: 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;
それぞれのアウトライン ボックスの下にある正しい ColStackBox と Table Box にアクセスしていることを確認するだけで済みます。
ご協力ありがとうございました!
DS
Re: JSL: レポート情報へのアクセスに関するヘルプ: Xpath またはツリー構造?こんにちは、 @mikedriscollさん、
すごいですね!灰色の三角形を右クリックして表示される「編集 > ツリー構造を表示」と「プロパティを表示」オプションはどちらも知っていますが、「ボックスパス」とそれに関連するオプションについては知りませんでした。とても参考になりました、ありがとうございます。今後はレポートのXPathとサブスクリプト情報を取得するために、これを必ず使用します。これにより、一部の情報が不足しているように見えるツリー構造レポートからの一般化が少し簡単になります。ツリー構造とプロパティ情報の両方を同時に表示するオプションがあればさらに便利です。ご提案ありがとうございます。これは間違いなくもう1つの有効な解決策だと思うので、これもマークしておきます。XPathコードの例もありがとうございます。これを研究して、XPathを正しく使用する方法に慣れ始めると役立つと思います。
ありがとう!、
DS
Re: JSL: レポート情報へのアクセスに関するヘルプ: Xpath またはツリー構造?お力になれて、嬉しいです!
@SDF1 は次のように書きました:
ツリー構造とプロパティ情報の両方を同時に表示するオプションがあれば便利です。
どうやら今は可能のようです。私のバージョンのJMPには「編集 -> ツリー構造を表示」という項目がありませんが、やり方は以下のとおりです。
1. プロパティが表示されないレポート出力から、JMP がレポート ウィンドウを作成したときに作成されたデフォルトの他に、少なくともいくらかの「新しい」空白スペースが残るように、ウィンドウを右側に拡張します。
2. その「新しい」空白スペースで Ctrl + Shift + 右クリックし、「ツリー構造を表示」をクリックします (プロパティを表示した状態でこれを試したところ、異なる結果が一度出ました。確信はありません)
3. 元のレポートウィンドウ(ツリー構造ウィンドウではない)から、編集 -> プロパティの表示に移動します。