Pythonのネットワーク、グラフ解析 Network-Xを使って・・・
Sponsored Links
皆さんこんにちは
お元気ですか?私はフリーダム生活です。お盆休み近くて少々嬉しい
本日はネットワークXについて
NetworkXはグラフやネットワーク解析のライブラリです。
実はにこにこタグネットワークでもつくろうかなと考えていたりいなかったりということで
どうプログラムを組もうかの予行演習だったりします。
インストール
毎度おなじみpipを使います。
sudo pip install networkx
例題
import networkx as nx import matplotlib.pylab as plt G = nx.Graph() G.add_node("a") G.add_nodes_from(["b","c"]) G.add_edge("a","c",weight=3) G.add_edge("b","c",weight=5) pos = nx.spring_layout(G) edge_labels = {("a","c"):3,("b","c"):5} nx.draw_networkx_nodes(G, pos, node_size=200, node_color="w") nx.draw_networkx_edges(G, pos, width=1) nx.draw_networkx_edge_labels(G, pos,edge_labels) nx.draw_networkx_labels(G, pos ,font_size=16, font_color="r") plt.xticks([]) plt.yticks([]) plt.show()
ノートを3つ作成し、エッジを2つ生成。それを可視化するプログラムです。
グラフ
nx.Graph() #無向グラフ nx.DiGraph() #有向グラフ
ノードの生成
グラフを作成する要素は大きく分けて2つあります。
一つ目はノードを作成すること。もう一つはそれをつなぐエッジを構成することです。
ノードの構成は簡単にできます。
G.add_node("a") G.add_nodes_from(["b","c"])
エッジ
次にエッジですが、
G.add_edge("a","c",weight=3) G.add_edge("b","c",weight=5)
これだけです。はい、たったこれだけです。
可視化
綺麗に可視化したいのでこちらを使います。
nx.spring_layoutにて最適な位置を計算し、後のdraw(略)でノードの色とかを指定しています。
最後にmatplotlibの可視化機能を使って可視化しています。凄い。
pos = nx.spring_layout(G) edge_labels = {("a","c"):3,("b","c"):5} nx.draw_networkx_nodes(G, pos, node_size=200, node_color="w") nx.draw_networkx_edges(G, pos, width=1) nx.draw_networkx_edge_labels(G, pos,edge_labels) nx.draw_networkx_labels(G, pos ,font_size=16, font_color="r") plt.xticks([]) plt.yticks([]) plt.show()
その他
クラスタリングのアルゴリズムとか
クラスタの係数とか次数とかを使うことができます。
print nx.degree(G) print nx.connected_components(G) print nx.clustering(G)
グラフのパラメータとか
print G.number_of_nodes() print G.number_of_edges() print G.nodes() print G.edges()
感想
色々制約とかかければ、ニコニコのグラフも書けると思う。やってみよう