networkx - k-shell.
최대 1 분 소요
2-line summary
k-shell
은 “core number를 k
로 가지는 node들의 subgraph, 그리고, (k+1)-core에 존재하지 않는 노드들을 말하죠”
- 사실, 별거 아닌것 같은데, 종종 complex network에서 node들의 계층적인 구조를 구분할 때 사용되는 경우들이 있죠.
k-shell.
- k-shell은 “core number를
k
로 가지는 node들의 subgraph”를 말합니다. 다시 풀어서 말한다면, “k-shell”은 내부의 모든 node의 degree가 k
보다 크죠. 즉, 3-shell
은 graph G
의 subgraph이며, 모든 node의 degree가 3보다 큽니다.
- 또한, 동시에, k-shell에 속한 node는 (k+1)-shell에 속해서는 안됩니다.
k-core
: 모든 node의 degree가 k보다 크거나 같음(degree>=k
)
k-shell
: 모든 node의 degree가 정화갛게 k. (degree==k
)
- 어찌 보면 별 것 아닌것 같지만, 논문 - A model of Internet topology using k-shell decomposition에서는 k-shell decomposition을 사용하여, 네트워크에 대한 계층적인 구조를 뽑아내기도 했습니다.
python implementation
- code 자체는 아래에서 보시는 것처럼 매우 간단합니다.
- 그리고, 해당 라이브러리는 이미
networkx
에 구현되어 있기도 하죠.
def k_shell(G, k):
"""
- 그냥 core-number로 k를 가지는 node만 뽑아서 subgraph를 만들어서 리턴합니다.
"""
# nx.core_number(G): G의 모든 node들에 대한 core_number를 리턴
core_num_dict = nx.core_number(G)
# node_have_k_core: core_number를 `k`로 가지는 node들만 뽑음.
node_have_k_core = [u for u, core_num in core_num_dict.items() if core_num == k]
# node_have_k_core에 대한 subgraph를 리턴.
return nx.subgraph(G, node_have_k_core)
reference
댓글남기기