ネットワーク可視化ツール「Cytoscape」に雑に入門して手っ取り早く使う話

さてさて、とつぜんですが系統図とかネットワーク図を書く必要に迫られたことってありませんか?

僕はありました。

f:id:at_you_key:20190214210030p:plain
こんな図とか

f:id:at_you_key:20190216010701p:plain
こんな図のことです

今日はそんなときに無料(!)で使える超つよいツール「Cytoscape(サイトスケープ)」に雑に入門して、お絵描きソフト感覚で手っ取り早く使う方法を紹介しようと思います。

※この記事は、僕みたいに伝統的な日本企業で働く「Python?、R?なにそれ食べられるの?」「データベース?エクセルの表のことでしょ?」ってレベルの人向けに書いています。

このソフト、巷には研究者向け(?)の情報ばかりで、専門的なデータ整形ツールで元データを準備する前提だったり、生物科学っぽい用語が頻出してチンプンカンプンだったりして使い始めるのに苦労したので、ここではExcelでカジュアルにデータを手作りしてなるべく雑に入門する方法を記します。

雑に入門したあとは、Cytoscapeチュートリアル日本語訳という超ありがたいページがあるので、ここを熟読するとよいでしょう。

seesaawiki.jp

あと、基本的な機能や操作を把握するのにこのスライドも大変参考になりました。

motdb.dbcls.jp

図解!ネットワーク図作成のながれ

こんな流れを解説していきます。

さあ、まずはCytoscapeをインストール

公式サイトからインストーラーをダウンロードしてインストールしましょう、見やすいサイトなので迷わずできると思います。

cytoscape.org

例題は親しみやすいほうがいいですよね

「分子間相互作用と遺伝子発現プロファイルを統合して可視化」とか言われてもサッパリですよね。

もう少し庶民的で小規模なサンプルということで、きっとみんな知っている国民的SFアニメの人物相関を使って解説してみようと思います。

データセットを作ろう

では、頭よりも手を動かす方向で、さっそくサンプルデータを作っていきましょう。

最低限必要な項目はこの3つ

ネットワーク図を描くのに必要な最低限のデータはこの3つです。

  • Fromノードの名前

  • エッジの名前

  • Toノードの名前

今回つくるのは人物相関なので、ノードの名前には人名が入り、エッジは人物同士の関係を表します。

エッジの名前はかぶらなければOKなので、入力していった順に連番を付けていきましょう。

Excelで作る場合は「エッジ名の列」「Fromノード名の列」「Toノード名の列」の順で並べると扱いやすいと思います。

あれ、登場人物、誰がいたっけ?

おもむろにExcelを開き、人間関係を思い出しつつ片っ端から入力していきます。

※今回はお手軽さ重視で、From~Toの方向性は考えません。

え〜っと、ドラえもんはのび太の居候、のび太はしずかちゃんのことが好き、ジャイアンはのび太に対してマウントを取る...

そうして入力したものがこちらです、整理しやすいように関係の列も追加してみました。

エッジ From To 関係
1 ドラえもん のび太 居候
2 のび太 しずか 好意
3 ジャイアン のび太 マウント
4 ジャイアン スネ夫 マウント
5 スネ夫 のび太 マウント
6 のび太 出来杉 恋敵
7 出来杉 しずか 勉強仲間
8 のび太 セワシ 子孫
9 のび助 のび太 親子
10 玉子 のび太 親子
11 のび助 玉子 夫婦
12 セワシ ドラえもん 所有
13 ドラえもん ドラミ 兄妹
14 ジャイアン ジャイ子 兄妹
15 おばあちゃん のび助 親子

データの入力が終わったら適当な名前を付けて保存しておきましょう。CytoscapeはExcelブック(.xlsx)形式の読み込みに対応しているので、普通に保存すればOKです。

CSVやTSVの読み込みにも対応していますが、その場合何かしらの方法で文字コードをUTF-8にしておかないとエラーが出ます。

Cytoscapeへの読み込み

Cytoscapeを起動すると、こんな画面が開きます。

今回作ったテーブルはネットワークテーブルとして読み込むことになるので、画面左のパネルの「Network」タブにファイルをドラッグ&ドロップします。

f:id:at_you_key:20190214224345p:plain
「Drag network files here」って書いてあるところ

そうすると、読み込み設定の画面が出てくるので、ここでノード名とエッジ名の列を指定してあげます。

f:id:at_you_key:20190214224427p:plain
列タイトルをクリックすると選択メニューが出る

デフォルトではすべてエッジの要素になっているので、FromとToの列名をクリックして、それぞれSource Node(緑丸)、Target Node(オレンジ丸)にしておきましょう。

OKを押すとファイルが読み込まれます。うまくいっていれば、もうそれっぽい図が描かれていますね。

ちょっと見た目にこだわってみる

見やすいレイアウトをさがそう

読み込みがうまくいったらレイアウトを変えてみましょう。

メニューの「Layout」のところから選択できるので、いろいろ試してデータに合ったものを探すと良いです。

詳しくは公式のドキュメントや、超ありがたい日本語版チュートリアルを参考にしてみてください。

f:id:at_you_key:20190214224640p:plain
こんなのとか

f:id:at_you_key:20190214224628p:plain
こんなの

f:id:at_you_key:20190214224634p:plain
いろいろある

こうしていろいろレイアウトを試してるだけでもじゅうぶん楽しいですが、Cytoscapeの醍醐味はデータをスタイルのパラメータとして描画できるってとこです。

どういうことかっていうと、たとえば人物同士の関係性によってエッジの色を塗り分けたり、人物の体重に応じてノードの大きさを変えたりすることが簡単にできます。

そう、Cytoscapeならね。

スタイルを設定してさらに見やすくする

今回は人物同士の関係に応じて、エッジの色を変えるやつをやってみましょう。

まず「Style」タブの中の「Edge」タブを開き「Stroke Color」の「Map.」を選び、「関係」カラムを選択します。

Mapping Typeは「Discrete Mapping」を選ぶと、項目に対して個別に色をマッピングできるようになります。ここではお手軽に、自動でカラーマップを設定してみましょう。

関係のリストの部分を右クリックし、「Mapping Value Generators」を選択して適当なカラーマップを選びます。

ためしにRainbowにしてみました。

ほら、ちゃんと関係ごとに色分けされていますね、簡単!

スタイルのパラメーターは他にもいろいろ設定できるので、例のごとく超ありがたいチュートリアルを参考にしつつ、センスの赴くままにかっこよく作りこんでいくと良いと思います。

まとめ

今回作った例は手描きでも作れるくらいの規模でしたが、Cytoscapeを使う雰囲気は掴めたんじゃないかと思います。

もっと大規模なデータを扱う時も流れは一緒なので、ネットワークとして表現できそうなデータがあったらガンガン突っ込んで可視化してみると良いでしょう。

ちなみに、僕が必要に迫られて描いたのはこんな図です。

あぁ、Cytoscapeほんとつよい。

Cytoscapeを自動操作したいって?

「そんな操作ポチポチやるのめんどくさくて無理!」って?

わかりますその気持ち、そんな時はこの記事👇

at-you-key.hatenablog.com