"이상값 탐색" 기능으로 식별된 이상값을 포함하는 행을 자동으로 제외하려면 어떻게 해야 합니까?안녕하세요,
JSL 스크립트에서 수동으로 수행하는 작업을 복제하려고 합니다.
JSL에서 "이상값 탐색" 기능을 실행하는 방법을 알고 있지만 "이상값 탐색"으로 식별된 이상값이 있는 행을 수동으로 선택한 다음 '행 선택'을 누른 다음 '제외'를 눌러야 합니다.
내가 실행하고 다른 작업을 수행할 필요 없이 식별된 이상값을 자동으로 제외하는 스크립트를 작성하려고 합니다(이상적으로는 이상값 탐색 창도 열지 않음).
누구든지 아이디어가 있습니까?
감사해요!
자동화 및 스크립팅데이터 혼합 및 정리Re: "이상값 탐색" 기능으로 식별된 이상값을 포함하는 행을 자동으로 제외하려면 어떻게 해야 합니까?당신은 아주 흔한 실수를 저질렀습니다.처음 실행하면
el = Explore Outliers(
"dt" 데이터 테이블을 가리키고 있습니다. 그러나 두 번째로 실행하려고 하면 JMP가 아는 한 현재 데이터 테이블이 아닌 새 데이터 테이블 "dtQuant"가 생성됩니다.물론 이상값을 찾지는 않습니다.이 문제를 해결하려면 JMP가 올바른 데이터 테이블을 가리키도록 강제하기만 하면 됩니다.
el = dt << Explore Outliers(
다른 주제에서 "j"를 변수 이름으로 사용하면 때때로 문제가 발생할 수 있습니다.JMP에는 j라는 함수가 있습니다.j라는 변수가 있을 수 있지만 코드 읽기가 혼란스러울 수 있습니다.
Re: "이상값 탐색" 기능으로 식별된 이상값을 포함하는 행을 자동으로 제외하려면 어떻게 해야 합니까?디버깅을 시도하는 동안 코드를 분해했습니다. 문제는 두 번째 루프에서 분위수 범위 이상치 제한을 저장할 수 없다는 것입니다.
로그에는 "
데이터 테이블 'Quantile Outlier Limits'에 대한 이 Where-절은 행이 없습니다: dt:Grade == grades[j]"
그러나 해당 목록의 각 등급에는 제한이 있고 존재한다는 것을 알고 있습니다. J의 다른 값에서 시작하여 확인했으며 항상 첫 번째 루프에서 작동한 다음 두 번째 루프에서 충돌합니다. el 변수에 데이터를 저장하는 방식과 관련이 있다고 가정합니까?
Names Default to here(1);
dt = current data table();
// Determine grades to loop through
dt1 = dt << summary(Group(:Grade));
dt1 << select where ( :Grade == "");
dt1 << delete rows;
dt1 << select where ( :Grade == "Check input");
dt1 << delete rows;
grades = dt1:Grade << get values;
Close (dt1, nosave);
For (j = 3, j<= N items ( grades ), J++,
show(grades[j]);
el = Explore Outliers(
Y( dt:Hardness, dt:UTS, dt:M100, dt:Elongation, dt:LCR, dt:Prof, dt:SG ),
Tail Quantile( 0.25 ),
Show only columns with outliers( 1 ),
Quantile Range Outliers,
Where( dt:Grade == grades[j]);
);
show (el);
dtQuant = el << Save Quantile Outlier Limits;
Report(el)<< close window;
);
Re: "이상값 탐색" 기능으로 식별된 이상값을 포함하는 행을 자동으로 제외하려면 어떻게 해야 합니까?귀하의 코드를 보지 않고는 문제가 무엇인지 짐작할 수 있습니다.이상값 분석의 기반이 될 열이 포함된 열을 데이터 테이블에 추가한 것 같습니다.내 추측이 맞다면 아래는 분석할 열이 포함된 데이터 테이블에 새 열이 추가된 이전 스크립트에 대한 수정 사항입니다.스크립트는 열에서 분석할 열을 읽은 다음 해당 열 이름을 사용하여 평가할 열을 제한합니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Water Treatment.jmp" );
// Create a new column with the names of the columns to be used
// in the analysis
dt << New Column( "theColumns",
character,
set values(
{"Q-E", "ZN-E", "PH-E", "DBO-E", "DQO-E", "SS-E", "SSV-E", "SED-E", "COND-E", "PH-P", "DBO-P", "SS-P",
"SSV-P", "SED-P", "COND-P", "PH-D", "DBO-D", "DQO-D", "SS-D", "SSV-D", "SED-D", "COND-D", "PH-S"}
)
);
// Get the list of columns from the column that contains
// the columns to be analyzed
colNames = dt:theColumns << get values;
// Get rid of entries that have blank/null values
For( i = N Items( colNames ), i >= 1, i--,
If( colNames[i] == "",
Remove From( colNames, i, 1 )
)
);
// Run the analysis using the list of column extracted from the
// "theColumns" column
el = Explore Outliers(
Y( Eval( colNames ) ),
Quantile Range Outliers,
);
dtQuant = el << Save Quantile Outlier Limits;
dtQuant << show window( 0 );
Report( el ) << close window;
// Get rid of non involved columns
dtQuant << select where( :Number of Outliers == 0 );
dtQuant << delete rows;
// Loop through the remaining rows and set the affected rows in the dt table to selected
dt << clear row states;
For( i = 1, i <= N Rows( dtQuant ), i++,
dt << select where(
As Column( dt, dtQuant:Column[i] ) <= dtQuant:Low Threshold[i] | As Column( dt, dtQuant:Column[i] )
>= dtQuant:High Threshold[i],
current selection( "extend" )
)
);
// Hide and exclude the rows
dt << hide and exclude;
// Close the no longer needed data table
Close( dtQuant, nosave );Re: "이상값 탐색" 기능으로 식별된 이상값을 포함하는 행을 자동으로 제외하려면 어떻게 해야 합니까?감사해요 @txnelson 솔루션을 위해.
추가 "where" 함수와 함께 Quantile Range Outliers를 사용할 수 있도록 열의 변수 목록을 통해 전체 코드를 반복할 수 있도록 수정하려고 했습니다.
개체가 스크립팅할 수 없다는 Quantile 이상치 제한을 저장할 수 없어 루프가 충돌하는 것 같습니다. 어떤 아이디어?Re: "이상값 탐색" 기능으로 식별된 이상값을 포함하는 행을 자동으로 제외하려면 어떻게 해야 합니까?이외에 @txnelson 의 답장에서 무언가를 찾을 수 있습니다. 이 스레드 .
Re: "이상값 탐색" 기능으로 식별된 이상값을 포함하는 행을 자동으로 제외하려면 어떻게 해야 합니까?네, 맞습니다. 제 실수에 대해 죄송합니다.Re: "이상값 탐색" 기능으로 식별된 이상값을 포함하는 행을 자동으로 제외하려면 어떻게 해야 합니까?@SDF1 요청은 누락 탐색이 아니라 이상값 탐색에 대한 것입니다.
@JC7
다음은 수처리 샘플 데이터 테이블을 사용하고 이상값으로 발견된 모든 열에 대해 발견된 모든 행을 숨기고 제외하는 작업을 수행한 예입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Water Treatment.jmp" );
el = Explore Outliers(
Y(
:Name( "Q-E" ),
:Name( "ZN-E" ),
:Name( "PH-E" ),
:Name( "DBO-E" ),
:Name( "DQO-E" ),
:Name( "SS-E" ),
:Name( "SSV-E" ),
:Name( "SED-E" ),
:Name( "COND-E" ),
:Name( "PH-P" ),
:Name( "DBO-P" ),
:Name( "SS-P" ),
:Name( "SSV-P" ),
:Name( "SED-P" ),
:Name( "COND-P" ),
:Name( "PH-D" ),
:Name( "DBO-D" ),
:Name( "DQO-D" ),
:Name( "SS-D" ),
:Name( "SSV-D" ),
:Name( "SED-D" ),
:Name( "COND-D" ),
:Name( "PH-S" ),
:Name( "DBO-S" ),
:Name( "DQO-S" ),
:Name( "SS-S" ),
:Name( "SSV-S" ),
:Name( "SED-S" ),
:Name( "COND-S" ),
:Name( "RD-DBO-P" ),
:Name( "RD-SS-P" ),
:Name( "RD-SED-P" ),
:Name( "RD-DBO-S" ),
:Name( "RD-DQO-S" ),
:Name( "RD-DBO-G" ),
:Name( "RD-DQO-G" ),
:Name( "RD-SS-G" ),
:Name( "RD-SED-G" )
),
Quantile Range Outliers,
);
dtQuant = el << Save Quantile Outlier Limits;
dtQuant << show window( 0 );
Report( el ) << close window;
// Get rid of non involved columns
dtQuant << select where( :Number of Outliers == 0 );
dtQuant << delete rows;
// Loop through the remaining rows and set the affected rows in the dt table to selected
dt << clear row states;
For( i = 1, i <= N Rows( dtQuant ), i++,
dt << select where(
As Column( dt, dtQuant:Column[i] ) <= dtQuant:Low Threshold[i] | As Column( dt, dtQuant:Column[i] )
>= dtQuant:High Threshold[i],
current selection( "extend" )
)
);
// Hide and exclude the rows
dt << hide and exclude;
// Close the no longer needed data table
Close( dtQuant, nosave );
Re: "이상값 탐색" 기능으로 식별된 이상값을 포함하는 행을 자동으로 제외하려면 어떻게 해야 합니까?안녕 @JC7 ,
다음과 같이 매우 쉬워야 합니다.
Names Default To Here( 1 );
dt = Current Data Table();
colnames = dt << Get column Names();
obj = dt << Explore Missing Values( Y( Eval( colnames ) ) );
obj << select rows( Eval( colnames ) );
DS
Re: "이상값 탐색" 기능으로 식별된 이상값을 포함하는 행을 자동으로 제외하려면 어떻게 해야 합니까?분위수 범위 이상값 방법을 사용하고 있습니다. 원래 게시물에서 말하는 것을 잊어버려서 죄송합니다!Re: "이상값 탐색" 기능으로 식별된 이상값을 포함하는 행을 자동으로 제외하려면 어떻게 해야 합니까?이상치 탐색을 실행할 때 어떤 이상치 방법을 선택합니까? 다른 방법에 대해 다른 솔루션이 필요할 수 있습니다.