[실습] 중심성
import networkx as nx
import matplotlib.cm as cm
from matplotlib.colors import Normalize
데이터 준비
가라데 클럽 그래프 데이터를 가져온다.
K = nx.karate_club_graph()
그래프의 레이아웃을 만든다.
pos = nx.spring_layout(K)
nx.draw(K, pos)
중심성 시각화를 위한 함수를 만든다.
def draw_cengrality(graph, pos, centrality):
values = centrality.values()
norm = Normalize(vmin=min(values), vmax=max(values))
node_color = [cm.plasma(norm(c)) for name, c in centrality.items()]
nx.draw(K, pos=pos, node_color=node_color)
차수 중심성
각 노드의 차수를 가능한 차수(=전체 노드 수 - 1)로 나누어 구한다. 차수가 높을 수록 높다.
dc = nx.degree_centrality(K)
draw_cengrality(K, pos, dc)
중계 중심성 (betweenness centrality)
노드들의 최단 거리에 많이 포함될 수록 높다.
bc = nx.betweenness_centrality(K)
draw_cengrality(K, pos, bc)
근접중심성(closeness centrality)
많은 노드와 거리가 가까울 수록 높다. 도달가능한 다른 노드와 거리를 모두 더하여 그 역수로 구한다.
cc = nx.closeness_centrality(K)
draw_cengrality(K, pos, cc)
고유벡터 중심성(eigenvector centrality)
중요한 노드에 연결된 노드일 수록 그 높다. 인접행렬을 고윳값 분해하여 구한다.
ec = nx.eigenvector_centrality(K)
draw_cengrality(K, pos, ec)