でたぁっ 感動と失敗の備忘録

データ解析を担当することになったサラリーマンの備忘録

NodeXLを使ったお手軽ネットワーク分析メモ

 NodeXL は Excel で行うことができるオープンソースのネットワーク分析テンプレート。Excel ワークシートにエッジリストを入力したりコピペすることで簡単にネットワーク図を描くことができる。また、ノードの形状には画像を選択することができ、画像ベースのネットワーク図を描くことも出来る。画像はファイルの場所を指定するだけでよい。URL を指定すれば WEB 上の画像も表示出来る。具体的な図はこんな感じ。※NodeXL Graph Gallery も参考になる。
f:id:deta:20131018211452p:plain
 このネットワーク図は7月に開催された第32回R勉強会@東京で発表したAmazonで販売されている酒類のレコメンド関係のネットワーク図に使用したデータを使い描いたものである。(その際の資料を紹介した記事はこちら
 商品画像は Ruby+Mechanize でクロールして jpg ファイルをダウンロードしたものを使用した。(WEB画像のダウンロードに関する記事はこちら

 NodeXL を使う前までは R+igraph でネットワーク分析を行い、Cytoscape を使って作図して画像ファイルとしてネットワーク図を出力、その後パワポに挿入してから別途ノードを意味する画像を貼り付けていた。実は分析よりもこの資料作りの方が時間を多く使ってしまっていることもある。分析したネットワーク図は Excel ファイルなので事業に携わる様々な部署の関係者と共有することが容易になると思う。

NodeXLのインストールと起動

 NodeXL は Excel2007 以降が必要、NodeXLダウンロードページ で zip ファイルをダウンロードして解凍する。Setup.exe があるので実行するとインストールすることが出来る。起動は、スタート -> NodeXL -> NodeXL Excel Template をクリックする。

f:id:deta:20131018215824p:plain

Excel が起動しリボン部分に NodeXL タブが追加されている。シートには Edges、Vertices、Groups などが用意されている。Excel を普通に起動した場合には、NodeXL は使用することができない。テンプレートから起動するか、テンプレートをもとに作成した Excel を開いた場合のみ NodeXL が有効になる。
f:id:deta:20131018220548p:plain

ネットワーク図の描画

 まずはエッジリストを描画してみる。Edges シートの列 Vertex 1、vertex 2 にエッジリストを入力またはコピペする。次に Refresh Graph をクリックするとネットワーク図が描画される。描いた後は、シートのエッジやノードを選択すると図が連動して選択部分の色が変わる。逆に図のエッジやノードを選択するとシートの該当データが選択されるので着目したいデータを確認しやすい。※この図のレイアウトは Circle を指定している。変更したい場合は Lyout のプルダウンで表示されるリストの中から選択すればよい。無向、有向は Type で指定する。
f:id:deta:20131018223526p:plain
1度図を描くとVerticesシートにノードリストが作成される。エッジ、ノードとも形状や色、大きさなどの指定は該当するセルに入力、コピペすれば設定することが出来る。セルを選択してリボン部分にある Visual Properties の Color、Vertex Shape、Edge Width などで選択してもよい。ノードを画像表示する場合は、Vertices シートの Shape 列を Image にして Image File 列に画像の参照先を指定する。Refresh Graph を再度クリックすれば画像ベースのネットワーク図が描ける。
f:id:deta:20131018225451p:plain
 ネットワーク図のウィンドウは Excel の外に移動することも出来る。ネットワーク図上部にある「ドキュメント アクション」と表示されたタイトル的部分をクリックしながら、Excelの外に移動すると独立させられる。戻す時は逆の手順。NodeXL に限った話ではないが、ネットワーク分析する時は大きなディスプレイ、可能なら複数画面必要ですね。

簡単な分析

 ネットワーク分析で私がよく使っているのが中心性指標とコミュニティ抽出。NodeXLで中心性指標を計算する場合は Analysis タブの Graph Metrics をクリックする。計算したい指標を選択し Calculate Metrics をクリックすると指標が計算され結果は該当するシートに反映される。計算された指標でのデータの並べ替えは Excel の機能で行うことが出来る。
 コミュニティ抽出は Analysis タブの Groups をクリックし Group by Cluster... をクリックする。3種類のアルゴリズムが表示されるので選択した OK をクリックする。抽出したコミュニティ結果は Groups、Group Vertices シートにその情報が反映されている。また、抽出したコミィニティーで区画を作り、ネットワーク図を描画する機能もある。Layout を選択するプルダウンから Layout Options...をクリックする。そして表示された画面の Layout Style を変更する。Intergroup edges は、区画間のエッジの表示方法を変えることが出来る。見やすいようにいろいろ試せば良い。
f:id:deta:20131018235706p:plain

エッジ・ノードの表示カスタマイズ

 ネットワーク図が表示されているウィンドウの Graph Options をクリックするとエッジの線をカーブさせたり、ノードラベルなどの表示に影をつけるなどの効果を与えることが出来る。
f:id:deta:20131019000812p:plainf:id:deta:20131019000928p:plain

ハマリポイント

 ノードに指定し表示されていた画像が、コミュニティ抽出後 RefreshGraph すると画像表示が解除されてしまう。これは、コミュニティ抽出後に反映される Groups シートの中の Vertex Shape が Disk になってしまう為のようだ。ノードの形状は、Groups の Vertex Shape が優先されるようである。Vertices シートで、個々のノードに形状を指定している時は、Groups シートの Vertex Shape は消去しておくか、Vertices シートと対応する Shape を指定する必要がある。

最後に

 他にも様々な機能があるがようだ。。。Import のプルダウンリストを見ると From Twitter User's Network... もあり、Twitter上のフォロー/フォロワー関係のネットワーク図も簡単に描ける。Twitter API でデータ連携しているようなので、フォローしている人数やフォロワーが多い場合は時間がかかる。(APIの制限)

 NodeXL、お手軽にネットワーク分析をする場合には便利なソフトだ。Excel VBA使ったり、R との 連携も出来るだろう。(連携する必要ないかもしれないけど) ということでもうちょっと使ってみる。本当は D3.js 使って作ってみようかと思ったんだけど。。。