読書ノート

対話型データ可視化のプログラミング / Visualizing Data (Fry)

画面に表示したグラフの中の点をさししめして その表示対象のデータにかかわる処理ができるとよいと思うことがある。 たとえば、地球環境の観測データの品質をよくするためには、 観測値の時系列を表示させて対話型で品質フラッグをつけるしかけが有効であることが わかっている(IKOMAほか、2007)。 しかし、そういうプログラムを作ろうというとき参考になる本がなかなかない。 わたしはデータの可視化をするプログラムを部品から組みたてる教材を作ったことがある [GKSによる2次元グラフィックス教材]。 しかし、その教材に含めた機能は図形出力つまり図を画面や紙に表示することだけだ。 GKS (Graphical Kernel System)という規格には「図形入力」 つまり図上の位置を読みとる機能も定義されてはいたのだが、 プログラムライブラリに実装されていなかったり使える装置が限られていたりして、 実際に使ってみる機会がなかったのだ。 他には、ディジタイザという装置を使って紙の上の位置を数値にしたうえで、 数値データとして計算処理したことはある [地理情報学の教材の一部]

やっと、対話型データ可視化のプログラムを書くための教材本にめぐりあった。 期待どおり、時系列のグラフを表示させてそのうちの点をマウスで選択する例もある(第4章、図4-10)。 ただし、例文のスタイルは、 すぐ自分で使うためにプログラムを書く人のためのものだ。 たとえば「if (dist(mouseX, mouseY, x, y) < 3)」の3という数値は 長さを画素数で示したものにちがいないので、 画面サイズやデータ個数が違うときには変える必要があるはずだが、 とくに説明されていない。 おおぜいに使ってもらう道具や長く使い続ける道具を作るときには、 この本にはない注意が必要で、プログラムはもっと長くなるだろう。 しかし、そういうプログラムを書く人にとっても、 勉強のために読む例文はこのように短いほうがよさそうだ。

著者は、データ可視化の仕事を、 データ取得(acquire)、解読(parse)、抽出(filter)、 解析(mine ... data miningの)、 表現(represent)、表現の改良(refine)、対話型再表現(interact)の7段階で考える。 本書では、取得したデータの内容をほぼそのまま表現するような例を使って、 解析には深入りせず、それ以外の各段階の仕事を説明している。

著者は計算機プログラマであるとともに芸術的デザイナーであるらしい。 科学者とは違った着目点があっておもしろいが、 科学的数値データの可視化のための注意点は本書だけではじゅうぶんではなく、 教材関係読書ノートの「グラフ書法」のところに あげたCLEVELAND (1985) その他の本も見る必要がある。 たとえば、計算機のディレクトリの階層構造の可視化という例(7章)では、 ファイルの大きさが画面上の面積で表現されている。 CLEVELANDならば、 人は面積を長さほど正確に知覚できないことを指摘するだろう。 この場合は、FRYに限らず多くの人が、 ファイルの大きさが現実の面積を知覚するのと同じ精度でわかればじゅうぶん だと思うかもしれないが。

プログラミング言語はJavaが使われている。 PythonやRubyは実行速度が遅いという判断で避けたそうだ。 Javaに常備されたグラフィック機能が使われている。 長さが画素数で示されているのは、 GKSで画面が連続(実数型)空間であるかのように考えるくせがついてしまったわたしには つらいのだが、 画面からの位置入力を確実にするには必要なことかもしれない。 自分で変換関数を追加すれば気にならなくなるかもしれない。

正確にはJavaそのままではなく、その上に構築された「Processing」 (REAS & FRY, 2007; http://processing.org/) というプログラミング環境を使っている。 Processingはオープンソースソフトウェアで、 MS Windows, Mac OS X, Linuxで動くそうだ。 日本語では前川・田中(2007, 2008)の解説書がある。 基本的な使い方は第2章、Javaとの関係は最後の11章で説明しているが、 Javaを使った経験がないわたしには特徴がまだよくわからない。 ひとつ重要と思われるのは、 Javaでは、ローカルマシン上で使う場合とウェブアプリケーションとして使う場合で アクセスしうる対象が違うので、同じデータを読むにも手続きを使い分けなければ ならないのだが、 Processingでは表面上同じ手続きですむようにしたことだ。 また、浮動小数点数の標準を倍精度でなく単精度にしている。 大量データを扱うのに備えたメモリー節約らしい。 ただしこの大量とは数万件 (1章・6章に出てくるアメリカ合衆国5桁郵便番号と緯度経度の対応データは約4万2千件) であって、 UNWINほか(2006)の本で扱われているような 百万件の桁は想定されていないようだ。 マウス位置を常にチェックするようにしたことや、 drawという名前をつけた手続きが自動的にくりかえし呼び出されるようにしたことは、 対話型処理に特化したくふうだと思うが、 計算機の負荷が重い場合は別のくふうが必要になるだろう。

第9章にはデータ取得、第10章には解読の段階について、 Javaに即したノウハウがまとめられている。 計算機利用を想定してデータを提供するウェブサイトでは、 XMLを基礎としたSOAPとかRESTとかいう方式(本書ではそれ以上説明されていないが) を使うところが多くなっているそうだ。 そのほかの、人が見ることを想定したウェブページから情報を取り出すためには、 そのページの構造を知って解読するために試行錯誤的な作業が必要なことが多い。 HTMLではなくJavascriptのソースを受信して解読する場合もある(5章)。

文献


2008-05-04; 更新 2009-01-13, (最新) 2012-05-13
増田 耕一 (MASUDA Kooiti)
[読書ノート(教材用)の目次へ] [読書ノート全体目次へ]