JSL: 보고서 정보에 접근하는 데 도움이 필요하신가요? Xpath나 트리 구조인가요?안녕하세요 스크립터 여러분,
XGBoost 추가 기능 플랫폼에서 생성된 보고서의 일부 정보에 접근하는 데 어려움을 겪고 있습니다. 다양한 XGB 모델(다양한 깊이, 학습률, 반복 횟수 등)의 테이블을 생성하는 JSL 프로그램이 있습니다. 이 코드는 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는 두 번째 실행 시 35가 아니라 43입니다.
안타깝게도 보고서 및 개요 상자를 참조하는 "표준" 방식은 제대로 작동하지 않는 것 같습니다. JMP의 다른 모델링 플랫폼(예: Boosted Trees, Neural Net, Bootstrap Forest 등)에서는 이 문제가 발생하지 않았습니다. XPath를 통해 접근하려고 했지만, XPath에 대한 지식이 부족하여 원하는 값을 올바르게 추출하는 방법을 알지 못합니다. 특히 숫자 열 상자 값이 변경될 때 더욱 그렇습니다. 숫자 열 상자에는 제목이 없는 경우도 있습니다. 예를 들어, 훈련 세트 N의 데이터 포인트 개수가 아니라 Entropy RSquare, RASE 등의 훈련 적합 세부 정보에서 숫자 열 상자의 다음 반복 횟수가 표시됩니다.
모델 단계가 1이거나 1일 때 숫자 열 상자 변수의 값을 변경하는 논리문을 사용하면 "이전" 또는 "전통적인" 방식을 해결할 수 있을 거라고 생각했는데, 16개 모델 이후에는 값이 다시 바뀌었고, 34번째 모델에서도 마찬가지였습니다. i=16 또는 i=34와 같이 특정 모델 단계 값에 대한 논리문을 포함하지 않고도 데이터에 접근할 수 있는 더 효율적인 방법이 있어야 합니다. 숫자 열 상자 값이 변경될 수 있고, 그 이유를 이해하지 못하면 쉽지 않습니다.
보고서에서 숫자 열 상자 값이 계속 바뀌는 방식에 더 유연한 방식으로 이 작업을 수행하는 방법에 대한 제안이 있으면 알려주시면 감사하겠습니다. 제목이 없는 보고서의 경우에도 마찬가지입니다. 모델링하는 Y 열이 2단계 순서형/명목형, 3단계 순서형/명목형 또는 연속형 데이터 유형일 수 있으므로, 가능한 한 일반화 가능한 솔루션을 원합니다.
감사해요!,
디에스
자동화 및 스크립팅데이터 액세스대량 맞춤화Re: JSL: 보고서 정보에 접근하는 데 도움이 필요하신가요? Xpath나 트리 구조인가요?다음과 같은 방법으로 개요 상자에 대한 참조를 쉽게 얻을 수 있습니다.
ob_cm = rep[OutlineBox("Confusion Matrices")];
그런 다음 그 아래에 무엇이 있는지 살펴보세요. 이 경우 col span 상자가 좋은 참조가 될 수 있습니다.
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">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에 액세스하고 있는지 확인하기만 하면 됩니다.
다시 한번 도움을 주셔서 감사합니다!
디에스
Re: JSL: 보고서 정보에 접근하는 데 도움이 필요하신가요? Xpath나 트리 구조인가요?안녕하세요 @mikedriscoll 님 ,
와, 정말 멋지네요! 회색 삼각형을 마우스 오른쪽 버튼으로 클릭하면 나오는 편집 > 트리 구조 표시와 속성 표시 옵션은 잘 알고 있지만, 상자 경로와 관련 옵션은 몰랐네요. 정말 도움이 많이 되네요. 감사합니다. 앞으로 보고서의 XPath 및 첨자 정보를 얻기 위해 이 기능을 꼭 사용할 겁니다. 트리 구조 보고서에서 일부 정보가 누락된 것 같은데, 이렇게 하면 일반화가 훨씬 쉬워질 것 같습니다. 트리 구조와 속성 정보를 동시에 불러오는 옵션이 있으면 좋을 것 같습니다. 제안해 주셔서 감사합니다. 이것도 좋은 해결책이라고 생각해서 추천할게요. XPath 코드 예시도 감사합니다. 이 코드를 공부하고 XPath를 올바르게 사용하는 방법을 익히는 데 도움이 될 것 같습니다.
감사해요!,
디에스
Re: JSL: 보고서 정보에 접근하는 데 도움이 필요하신가요? Xpath나 트리 구조인가요?기꺼이 도와드리겠습니다!
@SDF1 님 이 쓰셨습니다:
트리 구조와 속성 정보를 동시에 불러오는 옵션이 있으면 좋을 것 같습니다.
지금은 가능해 보입니다. 제 JMP 버전에는 '편집 -> 트리 구조 표시' 기능이 보이지 않지만, 다음과 같이 할 수 있습니다.
1. 속성이 표시되지 않은 보고서 출력에서 창을 오른쪽으로 확장하여 JMP가 보고서 창을 생성할 때 만든 기본값 외에 최소한 "새로운" 빈 공간이 있도록 합니다.
2. "새로운" 빈 공간에서 Ctrl+Shift를 누른 채 마우스 오른쪽 버튼을 클릭하고 '트리 구조 표시'를 클릭합니다(속성을 표시한 상태에서 이 방법을 시도했는데 한 번 다른 결과가 나왔습니다. 잘 모르겠습니다).
3. 원래 보고서 창(트리 구조 창이 아님)에서 편집 -> 속성 표시로 이동합니다.