Python NextworkXの使い方
Rを用いて巨大なネットワークを可視化しようと試みていましたが、どうも綺麗に出力できない。。
これは試作段階の情報量が少ないデータですが、Amazonの「この商品を買った人はこんな商品も買っています」をエッジとして商品を繋げたネットワークです。
特に、igraphの背景の色の指定など細かな問題があるように思います。
Rはネットワーク自体の構造を計算するのには適していると感じる一方で、ビジュアル面は他のソフトを用いてみるべきかもしれません。
その第一弾としてPython NetworkXを勉強してみたいと思います。
NetworkXはRに比べ、統計的処理などの点では劣っていて、基本的な処理しかできない一方で、Pythonのライブラリであるため、ネットワークデータの取得から可視化までを一連の流れにしたり、Cytoscapeなどのより高度な可視化ツールを扱うなど、融通の効く点で優れているそうです。
まずはインストールから。
sudo apt-get install python-networkx
こちらのサイトのコードを参考にしながら、
#coding:utf-8 from pylab import * from networkx import * G = networkx.Graph() f=open("networkdata.txt","r") for row in f: G.add_edge(row.split("\t")[0],row.split("\t")[1]) d=nx.degree(G) pos = spring_layout(G) figure(figsize=(15,15)) draw_networkx_nodes(G, pos, nodelist=d.keys(), node_size=[v * 25 for v in d.values()], node_color = 'b',label=1) draw_networkx_edges(G, pos, width = 1) draw_networkx_labels(G, pos, font_size = 1, font_family = 'sans-serif', font_color = 'r') xticks([]) yticks([]) savefig("networkx.png")
多少綺麗になったような?
ノードのサイズを次数により変えています。
クラスタリング欲の沸いてくるような構造ですね。
元のデータはAmazonの書籍から、学術分野別に取りました。
数学関係のクラスタ、情報学関係のクラスタ、物理学関係のクラスタなどに分離していたり、複雑ネットワーク(数学と情報学に関わりが深い)や量子力学(情報学と物理学に関わりが深い)がその橋渡しのノードになっていたりしそう?
今後の課題としたいところです。
参考にしたサイト一覧です。
ああああ エロゲーの類似性関係を可視化してみた