python のnetworkx で複雑ネットワーク解析(これはかなり便利です)。

python のnetworkx で複雑ネットワーク解析。
networkxはpythonのグラフライブラリ。とてもよくできている。
各ノード間の経路長も関数一つ。ものすごく便利。。
ほとんどプログラム書かずRっぽく、インタラクティブ
ネットワーク解析ができてしまう感じ。ほんとうに便利。



cygwinへの導入例:
ソースのインストール。

$ wget http://pypi.python.org/packages/source/n/networkx/networkx-1.1.tar.gz#md
5=f72e260447711ca0fd7b1b1de5a2396d


展開:

$ gzip -d networkx-1.1.tar.gz
$ tar -xvf networkx-1.1.tar


インストール:

$ cd networkx-1.1
$ python -install setup.py 


解析編:

元データtest2.net(リンクのリスト)
一列目→二列目
(三列目は重み)

1 2 0.2
2 3 0.3

インタラクティブpythonを起動

$python

インタラクティブpythonの中で
ライブラリの読み込みとバージョンのチェック。

>>> import networkx as nx
>>> help(nx)


データの読み込み(ウェイトのある有向きグラフの場合) test2.net
create_using=nx.DiGraph() で有効グラフとする。

>>> >>> G=nx.read_weighted_edgelist("test2.net",create_using=nx.DiGraph())


解析
ノード一覧とエッジ(リンク)一覧の取得

>>> G.nodes()
['1', '3', '2']
>>> G.edges()
[('1', '2'), ('2', '3')]

次数の取得

>>> G.degree()
{'1': 1, '3': 1, '2': 2}
>>> G.in_degree("1")
0
>>> G.out_degree("1")
1

ページランクの取得

>>> nx.pagerank(G)
{'1': 0.18441678141344636, '3': 0.4744121714118702, '2': 0.34117104717468344}

近接ノードの取得

>>> G.neighbors("1")
['2']
>>> >>> G.successors("1")
['2']

距離行列の取得(重みなし)

>>>
>>> nx.all_pairs_shortest_path_length(G)
{'1': {'1': 0, '3': 2, '2': 1}, '3': {'3': 0}, '2': {'3': 1, '2': 0}}

重みつき

>>> nx.all_pairs_dijkstra_path_length(G)
{'1': {'1': 0, '3': 0.40000000000000002, '2': 0.10000000000000001}, '3': {'3': 0
}, '2': {'3': 0.29999999999999999, '2': 0}}