Tech Beans

Web企業で働くエンジニアのBlog


【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自体は図の描画よりもグラフ計算向けのライブラリらしい。(本家ドキュメントより)

グラフ描画もできるが、凝ったことをしたい場合は最適じゃない気がする。

とりあえずここまで。