データのビジュアル化を最少の労力で

[目次]   はじめに   Graphviz   graph-easy   Google Chart Tools   D3.js   R (R言語)

Graphviz

Graphviz は、人や物のネットワーク、フローチャート、系統樹などに適したグラフ描画ツールです。Windows、Mac、Linux など多くの OS で利用できます。

まずシンプルな例から見てみましょう。次の図は夏目漱石『坊ちゃん』の人間関係をグラフにしたものです。

『坊ちゃん』の人間関係図

図1: 『坊ちゃん』の人間関係図

Graphviz のデフォルト設定では、この図のようにそれぞれの事物(ノードと呼びます)を楕円で描画し、ノードとノードを線(エッジと呼びます)で結びます。デフォルトではエッジは片方向の矢印で表現されますが、ここでは少し工夫して、人物の敵対関係を双方向の矢印で、また一方的関係を片方向の矢印で示してみました。

もう少し複雑な例を見てみます。図2 は Graphviz の公式サイトにあげられているものです。ここではノードの形が楕円から円に変わっています。二重の円になっているものもあります。またノードだけでなく、それぞれのエッジ(矢印)にもラベルが付いています。この図はコンピュータサイエンスの理論をグラフ化したものですが、テキストデータを用意して Graphviz のコマンドで処理すると、このようなグラフを瞬時に生成することができます。

Finite Automaton (C) AT&T

図2: Finite Automaton (C) AT&T

Graphviz のデータは「DOT 言語」という簡易なプログラムで記述します。くわしくは下記のチュートリアルなどを見ていただくとして、一例だけあげておくと、DOT 言語の書式は次のようなものになります。

digraph {
    rankdir=LR;
    node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
    node [shape = circle];
    LR_0 -> LR_2 [ label = "SS(B)" ];
    LR_0 -> LR_1 [ label = "SS(S)" ];
    LR_1 -> LR_3 [ label = "S($end)" ];
    LR_2 -> LR_6 [ label = "SS(b)" ];
    LR_2 -> LR_5 [ label = "SS(a)" ];
    LR_2 -> LR_4 [ label = "S(A)" ];
    LR_5 -> LR_7 [ label = "S(b)" ];
    LR_5 -> LR_5 [ label = "S(a)" ];
    LR_6 -> LR_6 [ label = "S(b)" ];
    LR_6 -> LR_5 [ label = "S(a)" ];
    LR_7 -> LR_8 [ label = "S(b)" ];
    LR_7 -> LR_5 [ label = "S(a)" ];
    LR_8 -> LR_6 [ label = "S(b)" ];
    LR_8 -> LR_5 [ label = "S(a)" ];
}

このプログラムをたとえば fsm.dot という名前でセーブし、端末ウィンドウから次のように指示して得られたのが、上の 図2 のグラフです。

dot -Tpng fsm.dot -o fsm.png

Graphviz では、このように簡単なプログラムで体裁の整ったグラフを作ることができます。ここで使った dot コマンドは、Graphviz が提供しているコマンドのうちの代表的なものです。ほかにもコマンドが用意されていて、それぞれ特色の異なるグラフが生成されます。

Graphviz の参考資料

Graphviz はアメリカの AT&T 研究所で開発されたものですが、最近は日本でも利用者が増え、日本語の情報も充実しつつあります。まずこのあたりからご覧になると、入手方法や使い方を知ることができます。

完全なマニュアルは次の公式サイトにあります。

Graphviz の高度な機能

Graphviz のパワーと表現力のうかがえる例を二、三あげておきます。

次のグラフはフローチャート風の模擬図です。かなり手間のかかった図のように感じられますが、公式サイトにあるプログラムはシンプルなものです。Graphviz の基本をざっと学ぶだけでこの程度のグラフは容易に描けるようになります。

フローチャート風グラフ

図3: フローチャート風グラフ

これまでに見た例は、ノードの数にして10件前後のコンパクトなグラフでしたが、Graphviz の扱える件数に制限はありません。次図は Twitter の投稿から抽出した交友関係(言及関係)をグラフにしたものです。左はカナダの人気歌手ジャスティン・ビーバーをめぐる言及関係、右はアメリカの政治運動ティーパーティを巡る言及関係を示していますが、それぞれ3000件のデータを処理しています。

Twitter のツイートをもとに作成された人間関係 (C) "Mining the Social Web", O'Reilly Media

図4: Twitter のツイートをもとに作成された人間関係 (C) "Mining the Social Web", O'Reilly Media

もう一つ紹介しておきます。次図は UNIX オペレーティングシステムの発展を示す系統樹ですが、それぞれのノードを別の色、別の形に描きわけて美しく仕上げています。かなり面倒な指定を重ねてあるかのようですが、プログラムの説明によると、ノードの色も形もランダムに発生させた値が割り当てられているとのことです。手法はともかく、Graphviz の高い表現力を示す例となっています。

Object Oriented Graphs (C) Stephen North

図5: Object Oriented Graphs (C) Stephen North

[目次]   はじめに   Graphviz   graph-easy   Google Chart Tools   D3.js   R (R言語)