特許データのゴミ取り(名寄せ)へのOpen Refineの利用可能性(5)

クラスタリング(Clustering)によるセルの編集

セルを編集する最も強力な方法は、クラスタリング機能を介した編集になります。

以下のように人名として、ファーストネーム、ラストネームの順、その逆、ミドルネームを含む等の種々のパターンを含むデータの場合に、テキストファセットを生成すると以下のようになります。

choice

count

Andy Anderson

79

Andy R. Anderson

9

Anderson, Andy

57

Beatrice Beaufort

28

Beatrice Mansfield

67

Beaufort, Beatrice

19

テキストファセットを用いた編集では、”Andy R. Anderson”と”Anderson, Andy”を個々に”Andy Anderson”に編集する作業を行い、次に・・・という作業を続ける必要がありますが、この様な操作をもっと自動化したものとしてクラスタリング機能を利用することが出来ます。

クラスタリング機能へのアクセスは2つの方法があります。既にテキストファセットを生成している場合には、テキストファセット内に”Cluster”ボタンが表示されています。テキストファセットを生成していない場合には、列のドロップダウンメニューからEdit cells > Cluster and edit…を選択します。

クラスタリング機能の画面で、Method:key collision、Keying Function:ngram-fingerprint、Ngram Size:1と設定すると、最初の2つのクラスタとして以下のグループが形成されます。

第1のグループ

  • Andy Anderson (79)
  • Andy R. Anderson (9)
  • Anderson, Andy (57)

第2のグループ

  • Beatrice Beaufort (28)
  • Beaufort, Beatrice (19)

結合したいグループにチェックし、変更する名称をテキストボックスに入力するとそれぞれのグループを一つの名前に統合する編集がかのうです。

クラスタリング機能で、Method、Keying等を変更することで、クラスタリングの程度を調整することが出来ます。また、クラスタリング機能で実施した編集は何時でもUndoすることが出来ます。

次回は、クラスタリング機能の設定内容について。

特許データのゴミ取り(名寄せ)へのOpen Refineの利用可能性(4)

セルの編集(Editing Cells)

①一つのセルを一度編集する

セルを編集するには、マウスカーソルをそのセル上に動かしたときに見える小さな青色の”edit”ボタンをクリックする。編集用のテキストボックスが表示されるので、修正するテキストを入力し”Apply”ボタンを押すか”Enter”キーを押すと、その一つのセルが修正される。一方、”Apply to All Identical Cells”ボタンを押すか”Ctrl+Enter”キーを押すと、その列内で同一のテキストが存在する全てのセルが修正される。所謂、検索&置換操作である。

また、テキストボックス上でデータタイプの変更も可能である。日付形式としてISO8601形式や、もっと読みやすい”today”,”yesterday”のような形式にすることもできる。

 

②テキストファセット経由での編集

テキストファセット経由での編集も可能である。先ず、ある列のテキストファセットを生成し、そのファセットから編集対象のテキスト上にマウスを移動させる、”edit”リンクが表示されるので、それをクリックして編集用のテキストボックスを表示させる。上記のセル毎の編集とは異なり、テキストファセット経由での編集ではテキスト形式での編集のみが可能である。

テキストファセット経由での編集も所謂検索&置換操作になる。例えば人名を含む列に対して、テキストファセットを生成した例として以下のようなファセットがある。

choice

count

Andy Anderson

79

Andy R. Anderson

9

Beatrice Beaufort

28

Cindy Mansfield

67

このテキストファセットで、”Andy R. Anderson”の編集を選択して、”Andy Anderson”に変更すると、9の”Andy R. Anderson”は全て”Andy Anderson”に変更され、テキストファセットは以下のような状態となる。

choice

count

Andy Anderson

88

Beatrice Beaufort

28

Cindy Mansfield

67

 

③トランスフォームコマンドによる編集

Google Refineでの最もポピュラーな列への編集操作は、列のトランスフォームコマンドを実行する操作である。列のドロップダウンメニューからEdit cells > Transform …を選択する。Expression枠に関数を入力して、その関数に基づいて元のセルの値から新しいセルの値を生成する編集操作を行う。

例えば、以下の様なデータセットを考える。

name

age

John Smith

28

Jane Doe

33

“name”列に対してトランスフォームコマンドを実行して、Expressionに以下の関数を入力する。

  value.split(" ").reverse().join(", ")

これを実行すると“name”列の1行目から順に、名前の文字列をスペースの位置で分割し、その順番を逆転させ、更に”, ”を間に入れて結合する処理を行う。OKボタンをクリックするとデータの編集結果は以下のようになる。

name

age

Smith, John

28

Doe, Jane

33

関数に関する更なる情報は、関数の理解(Understanding Expressions)を参照(後日投稿)。

 

④セル内の複数の値を分割して、レコードを生成

Google Refineには、” Split multi-valued cells”(複数の値を含むセルの分割)という機能がある。

以下の例を参照してください。

name

data type

data record

Kate Moss

Person

profession:Model,href:”/0122-kate-moss”,title=”Kate Moss”,hair:brown

Marilyn Monroe

Person

profession:Actor,href:”/1488-marilyn-monroe”,title=”Marilyn Monroe”,hair:blond

“data record”列には分割すべき複数のフィールドが存在しているが、新たに列を生成することはしたくなく、代わりに個々のフィールドデータを各々のパーソンレコードに対するものにしたい。この場合にはEdit Cells -> Split multi-valued cells…を”data record”列で選択し、セパレータキャラクターとしてカンマを選択する。適用後にはテーブルは以下のような状態となり、rowsモードでの表示かrecordsモードでの表示を選択可能になる。

Show as: rows records Show: 5 10 25 50 records

All

name

data type

Data record

Kate Moss

Person

profession:Model

href:”/0122-kate-moss”

title=”Kate Moss”

hair:brown

Marilyn Monroe

Person

profession:Actor

href:”/1488-marilyn-monroe”

title=”Marilyn Monroe”

hair:blond

次は、特許データのゴミ取り(名寄せ)で活用していきたい、クラスタリングによるセルの編集について理解していく。

特許データのゴミ取り(名寄せ)へのOpen Refineの利用可能性(3)

フィルター/ファセット(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”ファセットの下に以下のように表示される。

choice

count

yes

6

no

37

複数のファセットの一つで選択を行うと、それは他のファセットにも影響を与える。例えば、”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項目を表示する。このリミットはコンピュータの能力が許す限り拡張することが出来る。コンピュータが対応できるか否かはブラウザの選定に依存する。可能な限り高速なブラウザを用いることが望ましい。

次は、セルの編集について理解していく。

特許データのゴミ取り(名寄せ)へのOpen Refineの利用可能性(2)

Open Refineの入手及び使い方については、このページにあるが、一応、簡単な手順について残しておく。概略を一通り知るにはここの動画等もお勧めです。

先ずは、ここのDownload Open Refineからダウンロードする。Windows版の場合には任意の場所にダウンロードしたzipファイルを解答し、その中のgoogle-refine.exeを実行する。ダイヤモンドのようなアイコンのついた実行ファイルである。

実行して暫く経つと、Webブラウザが立ち上がり、Open Refineの初期画面が現れる。Open Refineの本体は、Windowsであればコマンドプロンプト上で動作しているWebサーバーである。従って、Open Refineの初期画面がブラウザに現れても、何か変なウィンドウが開いているなどと思ってコマンドプロンプトを閉じてはいけない。ブラウザ上でOpen Refineを操作する間はコマンドプロンプトはそのままにしておこう。

それでは、上記のOpen Refineのページの解説に基づいた、ざっくりした和訳で、Open Refineの基本操作について理解していく。

先ずは、Open Refineの主要機能

  • インポート(Importing)
  • フィルター/ファセット(Filtering/Faceting)
  • 編集
    • セルの編集(Editing Cells)、クラスタリング(Clustering)によるセルの編集
    • 列の編集(Editing Columns)、データ拡張(Extending Data)による列の編集
    • 行の編集(Editing Rows)
  • 関数の理解(Understanding Expressions)
  • 正規表現の理解(Understanding Regular Expressions)
  • エクスポート(Exporting)
  • 履歴(History)

がある。

この中で関数については、

  • 変数(Variables)
  • オープンリファイン関数(Open Refine Expression Langage)
    • コントロール(Controls)
    • 関数(Functions)
      • ブーリアン関数(Boolean Functions)
      • 文字列関数(String Functions)
      • 配列関数(Array Functions)
      • 数学関数(Math Functions)
      • 日付関数(Date Functions)
      • その他の関数(Other Functions)
  • Jython言語

等の機能がある。これ以外にも、突合せ(Reconciliation)の機能やフリーベースとの接続機能等もあるらしいが、とりあえず、今回の目的には関係ないだろう。

次に、上記の主要機能の内で、インポート(Importing)機能

Open Refineでデータを利用するためにはインポートが必要である。Open Refineは多くのデータ形式を理解可能。現在サポートされている形式は、

  • TSV、CSV、または値が指定したカスタム区切り文字で区切られたテキスト
  • Excelファイル(xls、xlsx)
  • XML、XMLとしてのRDF
  • JSON
  • Googleスプレッドシート
  • RDFトリプルN3

非常に奇妙なテキスト形式のデータを扱いたい場合には、前処理等は行わずに、単にインポートしてから、インポータされたデータに対して独自のカスタム列の分割の処理等を行うと良い。アーカイブファイル(圧縮ファイル)のインポートを指示した場合には、その中で最も一般的な(多い)ファイル拡張子を検出し、その拡張子を持つすべてのファイルを単一のプロジェクトとしてロードする。

また、データファイルやGoogleスプレッドシートへのURLを指示することが出来る。そのURLのmime-typeからデータ形式を判別するが、現在インポートがサポートされているのはGoogleスプレッドシートのみ。

インポート後は、データはOpen Refine独自の形式で格納される。

初期画面を見ると、左端のCreate Projectのタブが選択された状態となっており、This Computer(自分のパソコン)」からLocate one or more files on your computer to upload(一つかそれ以上のファイルをアップロードしろ)と言ってきます。特許関連のデータであればCSVやExcel等の形式で持っているデータを使うことが多いだろう。ファイルを選択してNextを押すと、ExcelでCSVを開く時のような読み込み設定画面が現れ、ここで、適宜条件を設定した後、右上のCreate Projectを押して、データをOpen Refineに取り込む。

過去にデータをインポートして作成したProjectについては、Open Projectのタブを選択して、呼び出すことが出来る。

次はファセットについて理解していく。

特許データのゴミ取り(名寄せ)へのOpen Refineの利用可能性(1)

特許データというと、所定の様式で統一され、比較的ゴミが少ないデータではないかと思われるかもしれない。確かに、比較的ゴミが少ないデータかもしれないが、ゴミ取りの必要が全く無いかというとそうでもない。特許番号や出願日等のデータにはあまりゴミはないが、出願人や発明者の表記にはゴミやバラつきが多い。また、M&Aや社名変更等により、実態として同じ出願人でも表記が事なる場合もある。出願人名や発明者名に基づく集計等の処理を行う場合には、このバラつきのあるデータの整形(ゴミ取り)が欠かせない。このような特許データの整形には、比較的使い慣れたExcel等の表計算ソフトを用いている人が多いと思われる。しかしながら、表計算ソフトはこのようなデータの整形に特化したソフトでは無く、素早くデータ整形が出来るとは言い難い時もある。

特許データの名寄せ等の必要性については、例えば、http://www.tokugikon.jp/gikonshi/250kiko2.pdf や http://hdl.handle.net/10119/9421 等に説明されている。

で、Open Refineだが、GoogleのFreebaseチームがリリースしたオープンソース・ソフトウェア(旧Google Refine)で、ゴミを含むデータの整形(クリーニング/クレンジング)を行うためのツールとして開発されたものである。Excelであれば、検索・置換機能やフィルタ機能等を使いながら一つ一つゴミの修正や表記の統一等の作業を行なっていくのであるが、Open Refineの場合はクラスタリング機能を用いて、複数の似たような表記のデータを簡単に表記統一していくことが可能になる(クラスタリングの条件の調整等は必要であるが)。

先ずは、Open Refineの基本的な使い方を理解して、次に具体的な特許データでのゴミ取りを行ない、どの程度、効率的にゴミ取りが出来るのかを見ていきたい。

とりあえず、やるべきこと

とりあえず、やるべきことをリストアップ。

特許データのゴミ取り(名寄せ)へのOpen Refine(旧Google Refine)の利用可能性

フリーツールによる特許データテキストマイニング処理(R、TTM、khcoder、Python等)

ネットワーク分析ツール(Cytoscape、Gephi、Sci2、Google Fusion Table等)を利用した特許データネットワーク分析

いきなり全部は無理だな、どれからにしよう・・・。