ネットワーク可視化周辺の現状 1
2019年度版: 入り口からその先に進むために
はじめに
最近、私も一章参加した本が出版されましたが、「現在どんなツールがあり、そのツールで何ができるのか?」を紹介することが主眼に置かれています。そのため、本文に収録されている多数のツールを用いて、紹介してあるような図を作成できるようになったのち、さらにその先に進むにはどうすれば良いのか、すなわち、初心者を脱した後にどのように学習すれば良いのか、という部分に関しては、ページ数の関係もあり、あまり踏み込むことはできませんでした。そこで本稿は、私の担当分野であるネットワーク可視化の部分に絞って、基本的な図が作成できるようになったのち、さらに複雑な可視化を行えるようになるにはどうすれば良いのかを学ぶ場合のガイドとして書きました。また、2019年現在におけるツールの整備状況や、ブックガイドとしても利用できるようにする予定です。
本稿の対象とする読者
この記事は、ネットワーク可視化のごく基本的な部分は知っている方や、上の本で紹介されているような、チュートリアル的なことはできるようになったが、さらに高度な可視化を行うにはどうして良いのかわからない、といった方を対象としています。
ネットワーク可視化周辺の現状
私が(生命科学分野の)複雑なネットワークを可視化するソフトウェアを開発し始めてから、もうすでに15年(!)近く経過していますが、基本的な手法自体は驚くほど変化していません。いわゆるノード・リンク図は、ネットワークを可視化する手法としては2019年現在でもスタンダードなものです。特に複雑で大規模なネットーワークを可視化する手法として、様々な研究者や実務家がこれを超えるものを開発しようと工夫をしていますが、なかなか決定打的なものは現れていないのが現状です。その理由の一つは、ノード・リンク図が、各ノードを線分で繋ぐだけという非常に単純で直感的に理解できる単純な手法であるのに対し、Hive Plotなどの新しい大規模ネットワークを対象とした手法は、見る側に一定のリテラシーを必要とする、という部分が大きいのではないかと思っています。
このように、ノード・リンク図は、ネットワーク(厳密にはグラフ)データを可視化する場合の、最も汎用的で、最も標準的な手法であると言い切っても良いでしょう。これを実行するデスクトップアプリケーションとして、今でも標準的な地位を維持しているのが、CytoscapeとGephiです。これらのツールを、各種解析ソフトウェアやノートブック型アプリケーションと組み合わせることにより、高度な可視化をこなすことが可能です。
問題点
では、現状の手法とツールで問題ないのかと言われれば、当然そうではありません。ノード・リンク図の最大の問題点は、大規模なネットワークに対してスケールしないということです。ノード数が多ければ多いほど、また、ノード数はそれほどではなくても、結合が密な場合、自動レイアウトを施した場合に巨大な毛玉のような描画になってしまうため、そこからデータの意味を読み取るのは非常に困難になります。これを解決する方法としては、以下のような方向性があります。
- 全く新しい可視化手法を開発する
- 元になる巨大なネットワークを部分に分割して、ノード・リンク図で対応できる大きさにしてから描画する
- ノード・リンク図を、より高度なレイアウトなどを用いて改良する
- コンピュータの画面上で閲覧することを前提として、インタラクティブな可視化を作成する
これらのどれもが一長一短があり、一つの解で全てのケースをカバーするのは現実的ではありません。特に新しいネットワーク可視化手法の開発は、それ自体が研究分野にもなっているので、我々のような実務者にはハードルが高いです。したがって、実際にあるデータをすぐにでも可視化しなければならない実務者にとっては、残りの三つが候補となります。
あらゆるサイズのネットワークに対応する
ここからは、ノード・リンク図を用いて、大きなネットワークを含む様々なタイプのネットワークにこの手法を適切に用いて、効果的な可視化を作成する方法を考えます。
データの分割
ノード・リンク図は、比較的小規模なネットワークに対しては非常にうまく機能します。このため、ネットワークが大規模すぎてうまくこの手法で可視化できないならば、元のデータの中の意味のある部分構造を抜き出し、それを可視化するという手法が考えられます。つまり、データの段階で、適切なフィルタリングを施し、大量のデータから意味を読み取れる大きさまで加工してから、一般的な可視化手法であるノード・リンク図で見やすく加工するという方向性です。ノードやエッジに付随する属性値によるフィルタリングの他にも、各種統計的手法を用いたクラスタリングで部分構造を抽出したり、ノード・リンク図が効果的に使える大きさまでネットワークのサイズを調節する方法は様々なものがあり、多くの手法が、オープンソースの実装として利用可能です。
この手法を採用する場合、データの下処理が非常に重要になります。データの規模によっては、ネットワーク可視化ソフトとして広く使われているGephiやCytoscapeに読み込ませてからアプリケーション内でフィルタリングを行うことも可能ですが、やはりRやPythonなどのプログラミング言語とノートブック型アプリケーションを用いて行うのが効率が良いです。幸い、この分野のツールは、昨今のデータ・サイエンスブーム(バブル?)のおかげで、非常にバラエティに富んだツールを無償で利用できます。
また、Cytoscapeを用いることにより、Cytoscapeのデスクトップ版を、REST API経由でJupyter Notebookなどのノートブック型アプリケーション側からコントロールするという、いわばハイブリッドな手法もあります。これにより、デスクトップ版のインタラクティブで直感的な操作感と、ノートブック型アプリケーションに適した高度なデータの操作や繰り返し、さらにはigraphなどの他の著名ライブラリと組み合わせて利用することが容易になります。
この辺りのツールや手法も、次回以降で詳しく紹介したいと思います。
レイアウトや描画の改良
ノード・リンク図は、同じデータでも、ノードの配置(レイアウト)やスタイリングで、大きく見た目が変わります。適切なアルゴリズムを選択し、適切なパラメタを設定することにより、最終的な見やすさを大きく向上させることが可能です。自動レイアウトのアルゴリズムは、多くのものがオープンソースのライブラリとして実装されており、RやPythonといった標準的なツールからそれらを実行することが可能です。以下は代表的なライブラリのネットワーク描画部分のドキュメントへのリンクです。
これらが最終的に出力するのは、結局のところノードの平面状の位置に過ぎないので、それを他の高機能な可視化アプリケーションで利用するためには、ファイルで位置情報を書き出す必要がありますが、多くのものは標準的なファイルフォーマットへの出力(GraphMLなど)をサポートしていますので、これも容易です。
要点としては、必ずしも一つのアプリケーションで全てを行う必要はなく、それぞれのソフトウェアが得意な分野を可視化の段階ごとに用い、その組み合わせにより最終的な図の品質を大きく向上させることが可能です。
インタラクティブな可視化
残念ながら、どんなにレイアウトやスタイリングを工夫し、ネットワークのサイズを調整したとしても、上記のような手法で紙に描画するだけでは対応できないケースというのが存在します。例えば、全体像と局所構造の関係性が重要で、それらを両方シームレスに見たいといったような場合です。こういったケースでは、コンピュータを使ったインタラクティブなものを検討する必要があります。
一昔前は、こういったものを作成するにはかなり高度なプログラミング技術が必要とされましたが、現在はグラフ描画に特化したAPIを備えた、インタラクティブなノード・リンク図を含むアプリケーションをブラウザ上で構築できるライブラリが多数公開されています。最も有名なものとしては、D3.jsのforceレイアウトを使ったものがあります。ページを開くと、勢いよくばねモデルを使ってネットワークがアニメーションとともに描画される例を見たことのある方も多いでしょう。
しかし、D3はローレベルなAPIを提供することで、非常に柔軟性の高いカスタムの可視化を作ることが得意なライブラリです。したがって、一般的なノード・リンク図を描画する場合には、どうしても自前で書かなければならない提携のコードが多くなりがちです。そこで、私の関わっているプロジェクトだからというわけではないですが、公平に見ても、D3を使うより、Cytoscape.jsと呼ばれるJavaScriptで書かれたグラフ描画専門のライブラリを使う方が便利なケースが多いです。
このライブラリは、非常に活発な開発者コミュニティを持ち、機能的にもデザインの元となったCytoscapeのデスクトップ版を一部しのぐレベルにまでなってきています。これはあくまでもJSライブラリですから、必ずコードを書くことが前提となりますが、次回以降では、今まであまり詳しく解説したことのないCytoscape.js周辺についても解説する予定です。
まとめ
今回は、ネットワーク可視化周辺の現状と、最も一般的な可視化手法であるノード・リンク図を作成する場合の問題点とその解決方法をまとめました。次回は、実際に今回列挙した三つの方法でネットワーク図を描く場合に、どのようなツールを実際に用い、どのような作業が必要になるのかを紹介したいと思います。
(第二回に続きます)