networkxを触った時の備忘録。今回扱ったのは無向グラフに限る。
用語などの解説は別の記事に譲りたい。
(networkx(1.11.0) python(2.7.12))
適当なグラフを作成・可視化
import networkx as nx import numpy as np import matplotlib.pyplot as plt # generate graph (WS model) G = nx.watts_strogatz_graph(n=100,k=5,p=0.75) # visualize nx.draw(G) plt.show()
ランダムグラフとして、WSモデルのグラフを生成した。
他のデータ型からの読み込み,書き出しもできる
# load from binary numpy array matrix = np.random.binomial(1,0.1,size=[100,100]) Gnp = nx.from_numpy_matrix(matrix) # write to numpy array connection = nx.to_numpy_matrix(G) plt.imshow(connection,interpolation='none',cmap="gray") plt.show() # pandas dataframe Gdf = nx.from_pandas_dataframe(DATAFRAME) connection_df = nx.to_pandas_dataframe(G)
numpyのarrayとして扱うと、色々な計算もしやすくプロットもできる。
色々な特徴量を見てみる
エッジ
具体的にどことどこがつながっているか
G.edges()
最短経路・経路長
辞書型で返ってくるので、知りたいノード間の番号を指定
print nx.shortest_path(G)[0][1] print nx.shortest_path_length(G)[0][1]
[0, 62, 18, 41, 44, 1]
5
次数
辞書型で返ってくるので、知りたいノードの番号を指定
print nx.degree(G)[0] # degree of each node (return: dict)
3
平均最短経路長
print nx.average_shortest_path_length(G) # average shortest path length
3.426060606
平均次数
平均次数を直接出すものはないっぽい
print np.average(nx.degree(G).values()) # average degree
4.0