【Pythonでネットワーク可視化】NetworkXを使ってみる
NetworkXを使ってみる
pythonで100万オーダーのノードを持つネットワーク図を作成したいので、調べてみたところNetworkXというものが使えそう。
NetworkXの準備
Macでの実行なので、pipをインストールしていればすぐにセットアップできる
sudo pip install networkx
簡単なサンプルの実行
まずは本家のチュートリアルを見つつ、NetworkXで簡単なグラフを描画してみる
まず空のグラフを生成
import networkx as nx G = nx.Graph() # 空のグラフ
ノードの追加
空のグラフにノードを追加していく
G.add_node(1) G.add_nodes_from([2,3]) # 複数のノードを一括追加
ハッシュ可能オブジェクトはノードとして追加できるので、数値だけじゃなく文字列、オブジェクトもノードとして扱える。 これは結構柔軟な使い方ができそう。
G.add_node((1, 2)) # tupleは追加可能 G.add_node([1, 2]) # listはhasableではないので不可
nodes関数でノードの一覧が出力される。
G.nodes() # [(1,2), 1, 2, 3] G.number_of_ndoes() # 4 G.clear() # 全ノードのクリア
エッジ(枝)の追加
# G.clear() G.add_edges_from([('a','b'), ('c','d')]) # a-b, c-d間のエッジを追加する。ノードも同時に追加される。 G.add_edge(('b', 'c')) G.edges() # [('a', 'b'), ('c', 'b'), ('c', 'd')]
グラフの描画
matplotlib経由でグラフの描画が可能
pos = nx.spring_layout(G) # グラフ形式を選択。ここではスプリングモデルでやってみる nx.draw(G, pos, with_labels=True) # グラフ描画。 オプションでノードのラベル付きにしている plt.show() # matplotlibでグラフ表示
plt経由でグラフの保存もできる。
ここまで調べてみて、NetworkX自体は図の描画よりもグラフ計算向けのライブラリらしい。(本家ドキュメントより)
グラフ描画もできるが、凝ったことをしたい場合は最適じゃない気がする。
とりあえずここまで。