dt << Data Filter( <local>, <invisible>, <Add Filter (...)>, <Mode>, <Show Window( 0 | 1 ), <No Outline Box( 0 | 1 )> );
オプションなしでData Filterメッセージをデータテーブルに送ると、Data Filterの最初のウィンドウが表示され、「フィルタ列の追加」パネルにデータテーブル内の変数がリストされます。
Modeは、Select(bool)、Show(bool)、Include(bool)というオプションの引数をとります。これらの引数は、それぞれ対応するオプションをオンまたはオフにします。Selectのデフォルト値はtrue(1)です。Show とIncludeのデフォルト値はfalse(0)です。
Add Filter()は、列とデータテーブルをサブセットするWhere節を指定します。基本的な構文は次のとおりです。
Add Filter( Columns( col, ... ), Where( ... ), ... )
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
df = dt << Data Filter(
Mode( Show( 1 ) ),
Add Filter(
Columns( :年齢, :性別, :Name("身長(インチ)") ),
Where( :年齢 == {13, 14, 15} ),
Where( :性別 == "M" ),
Where( :Name("身長(インチ)") >= 52 & :Name("身長(インチ)") <= 65 )
)
);
このスクリプトは、身長が52インチ以上65インチ以下の13歳、14歳、15歳の男子を選択します。前述のスクリプトにInvert Selectionメッセージを追加すると、このフィルタされたデータで除外されている年齢を選択できます。
df << ( Filter Column( :年齢 ) << Invert Selection );
Add Filter()を使って、多重応答のプロパティまたは尺度が設定されている列から一致する文字列を選択することもできます。
dt = Open( "$SAMPLE_DATA/Consumer Preferences.jmp" );
df = dt << Data Filter(
Location( {437, 194} ),
Add Filter(
Columns( :歯磨き カンマ区切り ),
Match None( Where( :歯磨き カンマ区切り == {"Before Sleep", "Wake"} ) ),
Display( :歯磨き カンマ区切り, Size( 121, 70 ), Check Box Display )
// Displayオプションの指定。「歯磨き カンマ区切り」という列名が
// 値のリストの上に表示される。Sizeはフィルターリストのサイズを指定する。それぞれの
// 値はチェックボックスの隣に表示される。
)
);
このスクリプトは、「歯磨き カンマ区切り」列内で、指定された値(「Before Sleep」、「Wake」)のいずれにも一致しない行を選択します。使用可能なその他のスクリプトオプションには、Match Any、Match All、Match Exactly、Match Onlyがあります。多重応答プロパティおよび多重応答尺度の詳細については、『JMPの使用法』の「列情報ウィンドウ」章を参照してください。
Clear(), Display( ... ), Animate(), Mode(), ...
Clearは、引数をとらず、データフィルタをクリアします。
スクリプトの実行時にデータフィルタが表示されないようにするには、次のようにShow Windowを0に設定します。
obj = ( dt << Data Filter( Show Window( 0 ) ) );
除外する値を指定するには、!=演算子を使用します。次の例では、フィルリング後の値に16歳と17歳の年齢が含まれなくなります。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
df = dt << Data Filter(
Add Filter( Columns( :年齢, :性別 ) ),
Match( Columns( :年齢, :性別 ),
Where( :性別 = "M" ), Where( :年齢 != {16, 17} )
)
);
データフィルタのアウトラインと赤い三角のメニューを削除するには、No Outline Boxを指定します。
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
df = dt << Data Filter(
Add Filter( Columns( :地域, :人口 ), Where( :地域 == {"C", "N"} ) ),
Mode( Select( 0 ), Show( 0 ), Include( 1 ) ),
No Outline Box( 1 )
);
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
biv = dt << Bivariate(
Y( :x ),
X( :y ),
Automatic Recalc( 1 ),
Fit Line( {Line Color( {213, 72, 87} )} )
);
dfObj = biv << Local Data Filter(
Location( {566, 47} ),
Mode( Select( 0 ), Include( 1 ) )
);
dfObj << Add Filter(
Columns( :地域, :人口 ),
Where( :地域 == {"C", "N"} )
);
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
dist = Distribution(
Automatic Recalc( 1 ),
Continuous Distribution( Column( :人口 ) )
);
filter = dist << Local Data Filter(Add Filter( columns( :地域 ) ));
f = Function( {a}, Print( a ) );
rs = filter << Make Filter Change Handler( f );
別のオプションとしては、特定のプラットフォームまたはディスプレイボックスからデータをフィルタする方法があります。Data Filter Context Box()関数の中にローカルデータフィルタを作成します。これにより、コンテキストはデータテーブルとしてではなく、現在のプラットフォームまたはディスプレイボックスとして定義されます。
New Window( "Marker Seg Example",
Data Filter Context Box(
V List Box(
dt << Data Filter( Local ),
g = Graph Box(
Frame Size( 300, 240 ),
X Scale( Min( xx ) - 5, Max( xx ) + 5 ),
Y Scale( Min( yy ) - 5, Max( yy ) + 5 ),
Marker Seg( xx, yy, Row States( dt, rows ) )
)
)
)
);
ヒント: 上記のスクリプトはさらに大きなスクリプトの一部であり、そのスクリプトでMarker Segに必要な配列が作成されます。このスクリプトを試すには、「Local Data Filter for Custom Graph.jsl」サンプルスクリプトを開いてください。
図9.4 ローカルデータフィルタとグラフ
1つのコンテキストボックスに、1つのローカルフィルタと複数のグラフを含めることもできます。フィルタリングはすべてのグラフに適用されます。次のスクリプトは、1つのコンテキストボックスにバブルプロットを2つ、データフィルタを1つ作成します。出力については、2つのバブルプロットを使ったローカルフィルタを参照してください。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window( "Shared Local Filter",
Data Filter Context Box(
H List Box(
dt << Data Filter( Local ),
Platform(
dt,
Bubble Plot( X( :Name("体重(ポンド)") ), Y( :Name("身長(インチ)") ), Sizes( :年齢 ) )
),
Platform(
dt,
Bubble Plot( X( :Name("体重(ポンド)") ), Y( :年齢 ), Sizes( :Name("身長(インチ)") ) )
)
)
)
);
階層的なデータフィルタを作成することもできます。1つのスクリプトでデータフィルタとローカルデータフィルタが生成される場合があります。データテーブルの外側のデータフィルタが、ローカルデータフィルタに使用できるデータを決定します。これをわかりやすく示すため、例を紹介します。次のスクリプトは、データフィルタの階層に示すように両方のタイプのデータフィルタを作成します。
ヒント: 次のスクリプトはさらに大きなスクリプトの一部であり、そのスクリプトでMarker Segに必要な配列が作成されます。これらの配列を作成するコードについては、「Local Data Filter for Custom Graph.jsl」サンプルスクリプトを参照してください。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
...
New Window( "Marker Seg Example",
Data Filter Context Box(
V List Box(
dt << Data Filter( Local ),
g = Graph Box(
Frame Size( 300, 240 ),
X Scale( Min( xx ) - 5, Max( xx ) + 5 ),
Y Scale( Min( yy ) - 5, Max( yy ) + 5 ),
Marker Seg( xx, yy, Row States( dt, rows ) )
)
)
)
);
図9.6 データフィルタの階層