「外れ値の探索」機能で特定された外れ値を含む行を自動的に除外するにはどうすればよいですか?やあ、
JSLスクリプトで手動で行っていることを複製したいと考えています。
JSL で「外れ値の探索」機能を実行する方法はわかっていますが、「外れ値の探索」で特定された外れ値のある行を手動で選択し、「行の選択」を押してから「除外」を押す必要があります。
実行すると、他に何もすることなく、特定された外れ値を自動的に除外するスクリプトを構築しようとしています (理想的には、[外れ値の探索] ウィンドウさえ開かない)。
何かアイデアがある人はいますか?
ありがとう!
自動化とスクリプト作成データのブレンディングとクリーンアップRe: 「外れ値の探索」機能で特定された外れ値を含む行を自動的に除外するにはどうすればよいですか?非常によくある間違いを犯してしまいました。初めて走るとき
el = Explore Outliers(
これは「dt」データテーブルを指しています。 ただし、2 回目の実行時には、新しいデータ テーブル「dtQuant」が作成されていますが、JMP が知る限り、これは現在のデータ テーブルではありません。そしてもちろん、外れ値は見つかりません。これを修正するには、JMP が正しいデータ テーブルを指していることを強制するだけです。
el = dt << Explore Outliers(
別のトピックでは、「j」を変数名として使用すると、問題が発生することがあります。JMPにはjという関数があります。j という変数を使用することはできますが、コードを読むと混乱する可能性があります。
Re: 「外れ値の探索」機能で特定された外れ値を含む行を自動的に除外するにはどうすればよいですか?デバッグ中にコードを分解してしまいました。 問題は、2 番目のループで分位範囲の外れ値制限を保存できないことのようです。
ログには「
データ テーブル「Quantile Outlier Limits」のこの Where 句では行がありませんでした: dt:Grade == Grade[j]"
ただし、そのリストの各グレードには限界があり、存在することは知っています。 J のさまざまな値から開始して確認しましたが、最初のループでは常に動作し、2 番目のループでクラッシュします。 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」関数で分位範囲外れ値を使用できるように、列の変数のリストを介してコード全体をループできるように変更しようとしました。
オブジェクトがスクリプト可能ではないため、分位値の外れ値制限を保存できずにループがクラッシュするようです。 何か案は?Re: 「外れ値の探索」機能で特定された外れ値を含む行を自動的に除外するにはどうすればよいですか?に加えて@txnelsonの返信、何か見つかるかもしれませんこのスレッド。
Re: 「外れ値の探索」機能で特定された外れ値を含む行を自動的に除外するにはどうすればよいですか?はい、その通りです、私の見落としをお詫び申し上げます。Re: 「外れ値の探索」機能で特定された外れ値を含む行を自動的に除外するにはどうすればよいですか?@SDF1リクエストは、Explore Outliers に関するものであり、Explore Missing ではありません
@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: 「外れ値の探索」機能で特定された外れ値を含む行を自動的に除外するにはどうすればよいですか?Explore Outliers を実行するときにどの外れ値メソッドを選択しますか? 方法ごとに異なる解決策が必要になる可能性があるようです。