[GSOC][opensource]Google Summer of Code 2011受付開始

今年もGoogle Summer of Codeの時期がやってきた。もう受付が始まっているが、応募したいと思っている人にアプリケーションを書く上で一般的な注意点を。

ゴールを明確に

最初にどんな機能を実装したいのか、明確/簡潔に書く。難しい英語の表現など使わなくていいので、ワンパラグラフくらいで、最初に明確なゴールを定義する。

具体的に

どんな機能をどのように作るか。ここで具体性を欠くと、応募しているそのプロジェクトに対する理解度を疑われる。ソースコードをチェックアウトしてビルドし、全体像を眺めるくらいはやっておいて欲しい所。

  • ダメな例: Add a cool visualization engine to this JavaScript library.
  • いい例: To solve rendering performance issue in current engine, add WebGL support for 2D view.
  • ダメな例: Cleaning-up messy API in module A.
  • いい例: Module A has too many public API and some of them violate Single Responsibility Principle. It is very confusing when 3rd party developers use it. The goal of this project is minimizing the API and moving unnecessary functions to Module B.

タイムライン

提示したゴールが現実的なものかどうか、GSoCの期間をいくつかに区切って、どのタスクにどれくらいの時間を使うかを見積もる。実際にスケジュールを作ってみてキツいと感じたら、あまり欲張らず、多少機能を割り引いても完遂出来る計画を立てる。

今まで作った事のあるものへのリンク

これは必ずしも必要ではないが、GithubGoogle Codeなどに公開されたコードがあればなお良い。


これは今までメンターをして来た感想だが、殆どのメンタリング組織でも似たような選考基準を持っていると思う。一番いいのは、自分が普段使っているようなプロダクトへ応募する事。当然使い込んでいれば、最低でもユーザーの視点は持っているので、問題点なども理解しやすい。その他の注意点としては、

スーパーハッカーである必要性は無い

各プロジェクトから出ているアイデアリストを見れば分かると思うが、プロジェクトの難易度は様々。何も物凄いハッカーである必要は無く、一般的なプログラマリテラシーを持っていれば参加出来るものもたくさんある。ここで言うリテラシーとは、

  • SCMの使い方
  • Wikiなどによる情報共有の仕方
  • 他人が読む事を意識して書くコーディングスタイル

と言ったものだ。

英語は簡潔に

英語は多くの日本人にとって問題だ。しかし、非英語圏でもインドや中国、南米や東欧などからの応募は非常に多い。あまり細かい所はこだわらず、シンプルに、でもどうにか伝わる、と言うような事を心がけて欲しい。多くの人は既にやっていると思うが、表現で迷ったら、Googleでフレーズ検索して通じる表現かどうかを確認すると言うのも一つの手。

是非日本からも参加を!

Vizbiレポート1:Tamara Munzne教授によるキーノートPart1 〜可視化の原則/三次元の難しさ〜


Vizbiでのトークは、主に二つに分けられる。一つは一般的な可視化の話題を扱うキーノート。もう一つはデータの種類ごとの可視化を扱うデータ別のセクション。まず、キーノートの中からUBCのTamara Munzne教授トークをレポート。なお、プレゼンテーションで使われたスライドはここからダウンロード可能(PDF)。

彼女のトークの題は、そのものズバリ「可視化の原則(Visualization Principles)」可視化そのものを研究していない者にも非常に分かりやすい内容だった。ここでは彼女のトークの中から興味深かった点をまとめてみる。以下では一部生物学の例を使ってあるが、基本的に一般的な可視化の話題として読めるようにしてある。

データ可視化とは何か

まず最初にデータ可視化とはどういう事なのかを定義する所から始まった。

「データ可視化システムとは、視覚的にデータを表現する事により、人間が何らかの作業を行う際、その作業をより効率的に実行できるように助けるものである」

ここでのポイントは明快。ただデータを視覚化するだけではデータ可視化システムとは呼べない。それを利用する事により何らかの知見が得られたり、作業効率化に繋がらなければ、それはデータ可視化システムとは呼べない。ここが普通のイラストレーションとは大きく異なる部分だ。

原則

データを視覚的に表現する場合、そのデータ量が多ければ表現の手法は無数にあり、どういったデザインを用いればいいのか見極めるのは難しい。その無数にある可能性の中から適切な手法を選ぶ時、もう既に非効率的と分かっている手法/表現を注意深く避けることにより、最適な表現へ近づける、と言うのが現実的な解だ。様々な研究者やデザイナーの経験から作られたいくつかのガイドラインが存在するが、その原則に従って、繰り返しシステムをブラッシュアップする事により、より良い可視化へと近づく事が可能だ。

その中から彼女が選んだトピックは、以下のようなものだった:

  • データの理解
  • 色の抑制
  • 平面の便利さの理解とその活用
  • 三次元空間を使う事の危険性
  • 解像度の重要性
  • 視覚的理解と記憶
  • 問題点に対する適切な方法での有効性の立証

どれも納得できる内容だったが、以下のセクションでは、この中から特に興味深かった点をいくつかを取り上げてまとめてみたい。

何を伝えたいのか?


データを可視化する時、まず考えなければいけないのは、その可視化によって何を見る人に伝えたいのか、と言う点だ。私はグラフ構造(ネットワーク)の可視化を主に行っているので、それを例にこの点について考えてみたい。

右の図は悪い例として作ってみたものだ。ここではそれぞれのノードには細分化されたカテゴリーが与えられていて、そのカテゴリーごとに色をランダムに割り振った状態だ。この図を見て、果たして何かを読み取る事が出来るだろうか?この図に関しては、

  • カテゴリーが多過ぎて全体の傾向が全く読み取れない
  • どこが重要な構造なのかを理解する手がかりが無い
  • 一度に詳細まで把握するにはデータ数(ここではノード)が多すぎるにもかかわらず、更にそこに加えられた詳細なカテゴリデータをそのまま色にマッピングしている

と言った問題点が挙げられると思う。この程度の大きさのデータならば、無理矢理に詳細のデータまで表現しようとせず、全体の傾向を表すような方向で可視化を行うのが現実的だ。つまり、見る人に何を一番伝えたいのかと言う部分に絞り込んで可視化を行う事が重要だ。

もう少し具体的な例で考えてみよう。遺伝子オントロジーGene Ontology, GO)と言う分子生物学者が多用する語彙の集合がある。これは、遺伝子の機能等をツリー構造(厳密には非循環有向グラフ)を用いて厳密に定義したものだ。ざっくり言ってしまうと、このツリー構造の下のレベルへ行けば行くほど細分化された、より詳細な定義になって行き、上のレベルに行けば行くほど大きなカテゴリーを表す語彙となって行く。下のグラフは、あるGOの語彙をグラフ構造で表したものだ。この例だと、

と言ったように、下へ行けば行くほど定義が詳細になっているのが分かると思う。上で示したネットワーク図がタンパク質の相互作用を表したものだとして、分かる限りのこういった詳細なGOの情報(生物学の世界ではこういった情報を通常アノテーションと呼ぶ)を加え、その大量の語彙をそのまま色へマッピングすれば、このような意味のあまり無い可視化になってしまう。この問題を避けるには、詳細まではマッピングせず、上のレベルの大まかな機能カテゴリを使い、それを少ない色にマッピングする事により解決できる。つまり、意味を失わない範囲でカテゴリを大きなものに変更し、詳細ではなく全体的な傾向を表すような方向を選択する。GOに関しては、そういった事を実現するためにGO Slimと言う上位概念のみをまとめたデータも公開されているので、上手く使い分けて全体の傾向を浮かび上がらせる事が可能だ。

下の図は、カテゴリを三つにまで減らし、重要なカテゴリに属するノードを少し大きくした上で暖色を使い、そのグループを強調している。この二つの比較で、ある程度の規模のデータだと、詳細情報を多少犠牲にしてでも全体の傾向を示す方向の方が現実的だと考えられる(ここでのアノテーションに関してはフェイクデータを使っている)。


ティーヴンスのべき法則(Stevens' power law


Munzne教授は、色・形・大きさ等の視覚的な要素を「チャンネル」と言う言葉で表し、適切なデータを適切なチャンネルにマッピングする事の重要性を説いていた。そして、そのチャンネルの使い分けの基準としてスティーヴンスのべき法則を上げていた。これは心理学者のスティーブンスが提唱した概念で、各種物理的刺激と知覚の強さの関係性を示したものだ。この法則の妥当性・厳密性に関しては色々と批判もあるようだが、感覚的にも色の差異(サチュレーション)が明度の差よりもより強くヒトの感覚に働きかけると言う辺りは何となく同意できる。

要するに、こういった指標も参考にしながら、より強くヒトに働きかける視覚要素を重要だと思うデータにマッピングすると言うのがポイントだ。適切なチャンネルを選択して使い分ける事により、先に挙げた「何を伝えたいか?」と言うメッセージをより強める事が出来る。もっと端的に言ってしまえば、ゲシュタルトを意識しながら可視化を行え、と言う事なのだろう。

三次元を使う事の危険性

 円盤が回転を始め、どんどん速くなり、薄い灰色の球体となる。膨張し―
 そして溢れ開いてケイスを迎え入れる。流体ネオン折紙効果。広がるは、距離の無いケイスの故郷、ケイスの地、無限に伸びる透明立体チェスボード。内なる眼を開けば、段のついた紅色のピラミッドは東部沿岸原子力機構。その手前の緑色の立方体群はアメリ三菱銀行。そして高く、とても遠くに見える螺旋状の枝々は軍事システムで、永遠にケイスの手には届かない。

(「ニューロマンサーウィリアム・ギブスン著 より)

SFでは盛んに三次元や仮想空間での抽象概念の可視化が描かれる。それは単純に3Dで派手なビジュアルを作るのは楽しいし、カッコいいからだ、と言う面も多分にある。だが「カッコよさの先」へ進むのはなかなか難しい。彼女はこのトークの中で、三次元空間を使う事の難しさを繰り返し述べていた。デスクトップパソコンへの高性能なビデオカード搭載が始まり、誰でも気軽に三次元空間のリアルタイムレンダリングが行えるようになった90年代、可視化研究者のコミュニティでもその可能性を熱心に探る動きがあったようだ。ヴァーチャルリアリティの研究者なども巻き込んで、盛んに三次元空間を利用したデータ可視化システムが作られたが、現在ではその有用性に疑問を呈する研究者も多いようだ。その理由には以下のようなものがある:

  • インタラクションデザインの難しさ
  • 視点による歪み
  • 文字の可読性
  • 抽象概念のマッピングの難しさ

この難しさの根源にあるものは何か?彼女はそれを説明するのに「2.5次元」と言う概念を紹介していた。2.5次元とは何だろうか。プレゼンテーションの中にあった参考文献を紐解いてみると、以下のような記述があった:

物理的な世界は、実際に三次元である。(中略)しかしながら、自意識を持つ生物は、虹彩に映った視覚情報をもとに行動する。これにより、五感が認識する空間は、数学者や物理学者が規定するものとは非常に異なった次元を持つ。なぜなら、各次元は異なったアフォーダンスを持つからである。

知覚による自己を中心とした空間(perceptual egocentric space)は、一般的にup/sideways/towards-awayと言う次元で構成されると考えられている。

(Visual Thinking for Design 第5章より。id:keionoよる日本語訳)

一読しただけでは分かりにくい文章だが、ここで注意すべきは、この本の筆者は「次元」と言う言葉を用いてるが、それはいわゆる物理空間上での次元とは異なる概念であると言う点だ。更に読み進めて行くと、この三つの次元の非等価性が「2.5次元の視覚」と言う概念に繋がって行く事が分かる。


上の図は、この内容を私が図式化したものだ。人間の認識する空間を言うものを捉える時は、眼を中心とした球形の座標系を考えると分かりやすい。上下(up-down)、横(sideways)、そして奥行き(towards-away)の三つだ。この三つのうち、人間の知覚は最初の二つの次元から大量の情報(色と位置)を受け取り世界を認識する。そして最後の次元(towards-away)に関しては、前者を補う補助的な役割を果たしていると考えられている。更に筆者はこうも述べている:

・・・このような理由で可視空間と言うものは、しばしば2.5次元であると呼ばれる。(2.5のうちの)0.5は、ここではtowards-away次元を指す。しかし、これはかなりな過大評価であると言える。視覚空間と言うものは2.05次元程度のものだと言う方が、より正確な表現だ。

(Visual Thinking for Design 第3章より。id:keiono訳)

この中で筆者は写真の例を挙げている。カメラで空間をスナップショットとして切り取るとき、それを焼き付けた平面(image plane)は、基本的にup-down/sideways次元の情報を固着させたものと言える。もちろんカメラには絞りと言う機能があり、それによりぼけを生じさせたりして奥行き(depth)を表現する事は可能だ。ただし、素人が撮った被写界深度など全く気にしてないのっぺりした写真でもその風景や人物のだいたいの情報は伝わるように、視覚において、最初の二つの次元とtowards-away次元の持つ力は大きく異なる。


まとめとしては、この人間の奥行き(towards-away)に対する知覚の弱さ、そしてアフォーダンスの差により、可視化システム構築においてそれを安易に用いると、この非等価性によりユーザーとって非常に使いづらいシステムになってしまう危険性が高いと言う事になる。上の図は、igraphと言うグラフ解析パッケージで、比較的小規模なネットワークデータを三次元レイアウトアルゴリズムを用いて私が描画したものだ。このアルゴリズムは、二次元でのばねモデルによるグラフ自動レイアウトをそのまま三次元に拡張したものだが、平面に描画していた時に比べて、何か新しい知見は得られるだろうか?

少し戻って、筆者の言う「次元が持つ異なるアフォーダンス」とは何かを見てみる。

アフォーダンスとは

  • 自意識を持つ動物にとっての環境の性質
  • 環境の中にある知覚者にとっての価値のある情報

(「アフォーダンス ー新しい認知の理論」より)

アフォーダンスは60年代に心理学者のギブソンにより提唱された概念で、特にインタラクションデザインなどの分野では盛んに用いられる。奥行きを使った三次元可視化システムの難しさを議論するとき、この概念はキーポイントの一つとなる。彼女のトークと、参考文献として示されたこの本で述べられている内容は、業務として可視化ツールを開発している自分としても共感できる部分(ジレンマも含めて)が多いので、この辺りはPart2でもう少し掘り下げてみようと思う。

私もまだ全部は読んでいないが、この本、デザイン/可視化のための心理学入門と言った趣で、なかなか面白いので、機会があったらぜひ読んでみて欲しい。

Visual Thinking: for Design (Morgan Kaufmann Series in Interactive Technologies)

Visual Thinking: for Design (Morgan Kaufmann Series in Interactive Technologies)

(Part 2へ続く)

Vizbi 2011 最終日: チュートリアルセッションからProcessing談義まで

Vizbi 2011の記念品


Vizbiでのチュートリアルは今年から設けられたセクションで、アプリケーションごとに講師が一〜二人割り当てられ、前半が講師による解説やハンズオン形式のトレーニング、後半はそれぞれのデータなどを持ち寄って自由にディスカッションしたり質問したりと言う形式。私はCytoscapeのセッションでユーザーからの質問に答えたりするヘルプを行っていたのだが、全く初めてのユーザーがどこでつまずくか、今のチュートリアルドキュメントで抜けている部分は何か、と言った点を確認する事が出来て有意義だった。やはりここでもビデオチュートリアルの要望が多かったので、早急に取りかかりたい。ちなみに、最近のCytoscape関連のチュートリアルここに集めてあるので、興味のある方はぜひお試しを。残念ながらフライトの都合で後半は参加できなかったのだが、長めに取られていたランチタイムに様々な人と話す事ができたので、乗り継ぎ地のシカゴへ向かう飛行機の中で忘れないうちにメモしている。

今回チュートリアルセッション用に選ばれたソフトウェアの一つにProcessingがある。このセッションの講師としてJer Thorp氏が招かれていた。意外な事に、彼は元々生物学を学んでいて、ウェットなラボでの経験もある。ただし、どうもその仕事は好きになれなかったらしく(今のような洗練されたウェットラボ用のロボティクスはまだ当時存在せず、地道な作業に嫌気がさしたとの事)、次第にコンピュータ系の仕事に傾倒して行き、現在のようにコンピュータを使ったアートとサイエンスの中間のような事を生業とするに至ったらしい。ニューヨークタイムズ紙で最近よく見る事が出来る、インフォアートとでも呼べるデータを可視化は彼の手によるものも多い。彼自身のポートフォリオサイトから素晴らしい作品の数々を見ることが出来る

彼と話していて印象深かったのは、「データ可視化の普遍的なベストプラクティスなどと言うものは存在しないかもしれない」と言うポイントだ。これは、次元の低いデータならばともかく、多数のデータを(データポイントの数と言う意味でも、種類の多さと言う点でも)どのように見せるかと言う点で、解は常に大量に存在するためだ。例えば、「時間と量の関係」ならば、Excelのグラフ作成ツールで用意に可視化出来る。しかしこれが10種類のパラメータと10,000のサンプルからなるデータだったら・・・?こういった問題に関する一般的な答えと言うものは無い。オーディエンス、目的などを吟味しながら、臨機応変に対応するしかない。一方で、キーノートでのTamara Munzner教授の講演(後ほど詳しくレポート予定)では、可視化のアンチパターン(経験則をまとめた「やってはいけない」パターンの集積)と呼べるものをたくさん紹介していて非常に納得できる点が多かったので、悪い例を避ける事によりベストな方向を探してゆく、と言う手法はあるかもしれない。

話はopenFrameworkscinderと言った最近流行りはじめているフレームワークにも及んだ。彼の感想としては、両者ともとてもパワフルだが、裏を返せば、それはローレベルなAPIに薄いラッパーをかぶせて使うようにしてあると言う事で、手軽さと言う点ではまだProcessingには及ばない。C++ベースのフレームワークは、OpenCVなどと組み合わせて利用する場合、OpenGLを使い込みパフォーマンスをギリギリまで追求する場合などにはアドバンテージが非常に大きいので、お互いに共存してゆくような関係になるのではないかとの事だった。更に、Processingの実装に使われているJavaは誕生時とは全く違うレベルの最適化が行われ、パフォーマンス的にはかなりの規模まで対応できるようになっている。そしてProcessing自身も、JavaOpenGLバインディングであるJOGL 2.0にも対応した事により、 描画パフォーマンスに関してもかなりの前進が見られたようなので、まだまだ様々な分野で活用できそうだ。

なお、彼は日本からのワークショップなどのオファーがあれば是非行ってみたいとの事。サイエンス系でもアート系でも、データの可視化に興味がある研究機関や企業さんは、彼を日本に招待してみませんか?今は日本が大変な時期なのでタイミングが悪いかもしれませんが、もう少し落ち着いた頃なら、私も通訳ぐらいならしますよ。

さらに、昨日のポスター発表にて東京大学からの発表もあったのだが、妙に洗練されたデザインだなと思っていたら、やはりというか、作っていたのはメディアアート出身の方だった。お話ししてみると、私の郷里にある大学院に所属していた事もあるとの事で、思わぬ出会いとなった。次回日本に行ったときには是非彼のラボも訪問してみたい。

とりあえずそろそろ飛行機が出るようなのでここまで。

気になった点2:ビジュアライゼーション vs 研究内容

研究者のトークのセクションでは、やはり自分の研究の全体像を紹介すると言うスタイルが多かったのだが、それに加えて、「この分野の可視化ではこんな事が問題で、こんな問題を解決できる人を捜している」と言うような問題提起を必ず最初に行う、と言うスタイルでも良かったのではないかと思う。せっかく各分野のエキスパートが揃っているし、別分野ではもう既に解決されている可能性もあるので。

気になった点1:異なる分野同士のコミュニケーション

生命科学と一言に言っても、CT画像のモデリングをやっている人もいれば、ネットワーク解析をやっている人も居るので、全く異なる分野の聴衆に対して語りかける工夫が若干必要な気がした。