Python NextworkXの使い方

Rを用いて巨大なネットワークを可視化しようと試みていましたが、どうも綺麗に出力できない。。

これは試作段階の情報量が少ないデータですが、Amazonの「この商品を買った人はこんな商品も買っています」をエッジとして商品を繋げたネットワークです。

https://lh6.googleusercontent.com/-CIRG_83bGzs/VJzq0-UGbdI/AAAAAAAAAAk/PDVxRPr3490/s640/1.png



特に、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") 

気になる出力は、
https://lh5.googleusercontent.com/-ysGPHT5rCLE/VJzq0M4U2BI/AAAAAAAAAAg/yk2qQUJRUkk/s640/networkx.png

多少綺麗になったような?
ノードのサイズを次数により変えています。

クラスタリング欲の沸いてくるような構造ですね。
元のデータはAmazonの書籍から、学術分野別に取りました。
数学関係のクラスタ、情報学関係のクラスタ、物理学関係のクラスタなどに分離していたり、複雑ネットワーク(数学と情報学に関わりが深い)や量子力学(情報学と物理学に関わりが深い)がその橋渡しのノードになっていたりしそう?
今後の課題としたいところです。



参考にしたサイト一覧です。




ああああ エロゲーの類似性関係を可視化してみた