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の中で
ライブラリの読み込みとバージョンのチェック。
>>> 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}}