1.始めに
ネットワーク分析のわかりやすい目的の一つに、
コミュニティの中心を明らかにするようなタスクがあります。
networkxで簡単にとっかかりを作れるとのことで、
簡単なサンプルコードで実験をしてみました。
1.1.固有ベクトル中心性
より多くの繋がりを持ったノードが有利という前提のもと、
「自身が多くの繋がりを持つ」かつ「多くの繋がりを持つノードと繋がっている」ほど有利であるという考え方に基づいて定義された中心性。
1.2.媒介中心性
ある直接の繋がりを持たないノードAとノードBが複数のノードを経由することで繋がりを持つとき、経由されるノードは「情報伝達の際に何らかの役割をもつ」と考えられる。
この時「情報伝達の役割を担っている」ほど有利であるという考え方に基づいて定義された中心性。
2.参照する関数など
- networkx.eigenvector_centrality_numpy(グラフ):固有ベクトル中心性のリストを返します。
- networkx.communicability_betweenness_centrality(グラフ):媒介中心性のリストを返します。
3.サンプルコード
# 固有ベクトル中心性が大きいほど頂点を大きくする
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
G = nx.karate_club_graph()
# 固有ベクトル中心性を求める![ダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513505/fa4d485e-ba1a-2508-df26-2fbd98c91eb9.png)
eignv_cent = nx.eigenvector_centrality_numpy(G)
# 頂点のサイズを決める
# サンプルでは1000倍にする
node_size = [1000 * size for size in list(eignv_cent.values())]
# 描画
nx.draw_networkx(G, node_size=node_size)
plt.show()