フィルター/ファセット(Filtering/Faceting)
フィルターというと、Excelにはオートフィルタという機能がある。少々のデータのゴミ取りであれば、このオートフィルタや検索・置換の機能を用いることで修正出来る。
一方、Open Refineでは、以下の機能としてのファセット(Faceting)機能をサポートしている。
- データの概要を把握する
- 元データの中で変更したいサブセット行の絞り込み
典型的な利用法としては、ある列についてのファセットを作成する。ファセットはその列の概要を示し、そこから幾つかの要件を満たすセルを含むサブセット行(オートフィルタの結果のようなもの)を得ることが出来る。これらの説明では少しあいまいなので、以下に幾つかの実例を示す。
①標準のテキストファセット
以下のようなデータを例にする。
president
|
died in office
|
party
|
Abraham Lincoln
|
yes
|
Republican
|
Andrew Johnson
|
no
|
Democratic
|
Ulysses Grant
|
no
|
Republican
|
Rutherford Hayes
|
no
|
Republican
|
James Garfield
|
yes
|
Republican
|
Chester Arthur
|
no
|
Republican
|
Grover Cleveland
|
no
|
Democratic
|
Benjamin Harrison
|
no
|
Republican
|
William McKinley
|
yes
|
Republican
|
Theodore Roosevelt
|
no
|
Republican
|
William Taft
|
no
|
Republican
|
Woodrow Wilson
|
no
|
Democratic
|
Warren Harding
|
yes
|
Republican
|
Calvin Coolidge
|
no
|
Republican
|
…
|
…
|
…
|
このデータから、”party”列のテキストファセットを生成すると(列のドロップダウンメニューをクリックして、Facet > Text facetを実行)、以下のように表示される。
choice
|
count
|
Democratic
|
15
|
Republican
|
18
|
…
|
…
|
この表が示していることは、”Democratic”を含む行が15存在し、”Republican”を含む行が18存在する等である。このように、ファセットはデータの概要を示すことが出来る。
そして、このファセットの中の”Democratic”をクリックすると、データテーブルはこの”Democratic”を含む15の行だけを表示する状態にすることが出来る。この状態は、ファセット上のセレクションをクリアするまで続く。
②マルチファセット
“party”ファセットに追加して、”died in office”列のテキストファセットを作成すると、“party”ファセットの下に以下のように表示される。
複数のファセットの一つで選択を行うと、それは他のファセットにも影響を与える。例えば、”died in office”ファセットで”yes”を選択すると、データテーブルには”died in office”が”yes”の6行だけが表示され、“party”ファセットもこの6行のみを対象とした以下のようなデータに切り替わる。
choice
|
count
|
Democratic
|
2
|
Republican |
4 |
これらの選択をクリアして、例えば“party”ファセット内の”Democratic”を選択すると、”died in office”ファセットでは”Democratic”に限定した情報を見ることが出来る。
両方(あるいは多数)のファセットで選択を行えば、その複数の選択が重なった(AND条件)のデータのファセットを参照できる。
③カスタムテキストファセット
今、あなたは一つの仮説として、大統領には良く使われるファーストネームがあるのではないかと考えている。現在のデータでは、ファーストネームのための列は無い。一方で、そのために追加の列を新たに作りたくは無い。そのような場合にファーストネームを利用するためのカスタムテキストファセットを作成できる。”president”列のドロップダウンメニューから、Facet > Custom text facet …を選択し、以下の関数を打ち込もう。
value.split(" ")[0]
※上記の関数はセルの最初の空白で分割するという意味になる
カウントでソートしたファセットは以下のようになる。
choice
|
count
|
James
|
5
|
John
|
4
|
William
|
4
|
George
|
3
|
Andrew
|
2
|
Thomas
|
1
|
Franklin
|
2
|
…
|
…
|
④行ベースのテキストファセット
時として、特定の列を指定しないで行の選択をしたい場合がある。例えば、とても複雑なサブセットを含む行に対して何らかの処理を行わなければならないとする。幾つかのシンプルなファセット及びフィルタ及びスターをそれらの行に適用し、次に他のシンプルなファセット及びフィルタ及びスターをそれらの行に適用する。こうした繰り返しである。スター操作は累積的であり、これらのサブセット行の集合を生成する。最終的にすべてのスター操作された行を選択して、それに対する操作を行うことが出来る。この選択には以下のような関数のテキストファセットを生成する必要がある。
row.starred
そして、”true”を値として選択する。このテキストファセットはどの列のドロップダウンメニューからも生成できるし、もちろん、左端にある”All”のドロップダウンメニューからも生成できる。
⑤マルチコラムベーステキストファセット
複数の列を参照するファセットが必要となる場合がある。例えば、”First Name”と”Last Name”のような2つの列からのデータを考慮する場合がある。複数の人々の中から二つの名前のイニシャルが同じ人(e.g., Marilyn Monroe, Steven Segal, Ophelia Oliver)がどの程度いるか探したい場合には、どちらかの列でカスタムテキストファセットを生成し、以下の関数を入力する。
cells["First Name"].value[0] == cells["Last Name"].value[0]
この関数には二つの選択肢、TrueとFalseがある。上記のデータが欲しい場合にはTrueを選択する。
⑥数値ファセット(Numeric Facets)
テキストファセットが個別のテキストをグループ化するのに対して、数値ファセットは数値レンジの箱に数値をグループ化する。例えば、”humidity”列(0から100の数値があり得る)を含むデータセットでは、この列に対する標準の数値ファセットでは、100個の箱、0~1、1~2、…、99~100が形成され、98.3という数値は99個目の箱に入る。そして、ファセット上で任意の複数の連続した箱を選択することが出来る。
数値ファセットはテキストファセットと同様にカスタマイズも出来る。例えば、列のデータがべき乗分布(power law distribution)に従うような場合には、以下の関数を用いて数値のログを使ってグループ化した方が良い。
value.log()
また、数値が周期的であることが疑われる場合には、特定のパターンがあるかどうか理解するために、以下の関数により所定の周期で割った際の余りを得ることが出来る。
mod(value, 7)
また、列が数値でない場合でも、以下の関数により文字列の長さを得ることにより、数値ファセットを生成できる。
value.length()
⑦テキストフィルター
特定の列にある文字列と一致する文字列、あるいは正規表現に一致するパターンの文字列を含む行を探したい場合には、テキストフィルターを用いる。Excelのオートフィルタに似ている。テキストフィルターは任意の列のドロップダウンメニューからText Filterを選択することで利用出来る。
現れたウィンドウ内のテキストボックスに探したいテキストの一部を入力する。大文字と小文字を厳密に区別したい場合にはcase sensitiveをチェックする。
テキストフィルターでの正規表現のサポートは、様々なテキストマッチングを可能にする。例えば、テキストで始まり数字で終わるセルを探す場合には、regular expressionにチェックして、以下のような正規表現をテキストボックスに入力する。
^\w.*\d$
ここでの正規表現はjavaでの正規表現に従う。
追記:各々のテキストファセットは標準で2000項目を表示する。このリミットはコンピュータの能力が許す限り拡張することが出来る。コンピュータが対応できるか否かはブラウザの選定に依存する。可能な限り高速なブラウザを用いることが望ましい。
次は、セルの編集について理解していく。