[실습] 중심성 :: Python 네트워크 분석 - mindscale
Skip to content

[실습] 중심성

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)