편집 커뮤니티 특성 파악하기
이제까지 배운 BFS 알고리즘과 최대 클리크 개념을 결합해 Arc plot으로 네트워크를 시각화해 보세요.
Github 사용자 협업 네트워크에서 가장 큰 최대 클리크는 부분 그래프 G_lmc에 할당되어 있어요. NetworkX 2.x 이상 버전에서는 G.subgraph(nodelist)가 원본 그래프에 대한 변경 불가능한 뷰만 반환한다는 점에 유의하세요. 변경 가능한 버전을 얻으려면 그래프의 .copy()를 명시적으로 호출해야 합니다.
이 연습은 강의의 일부입니다
Python으로 시작하는 네트워크 분석
연습 안내
- 클리크에서 1단계 떨어진 사용자들을 포함하도록 확장하고, 그 사용자들을 부분 그래프에 추가하세요. 첫 번째
for루프 안에서:.add_nodes_from()과.neighbors()메서드를 사용하여G의 이웃에서 노드를 가져와G_lmc에 추가하세요..add_edges_from()메서드를 사용해 현재 노드와 그 이웃들 사이의 간선을G_lmc에 추가하세요. 이를 위해zip()함수를 사용해 현재 노드와 각 이웃으로 이루어진 튜플 목록을 만들어야 합니다.zip()의 첫 번째 인자는[node]*len(list(G.neighbors(node)))가 되고, 두 번째 인자는 해당node의 이웃입니다.
- 각 노드의 차수 중심성 점수를 노드 메타데이터에 기록하세요.
- 두 번째
for루프에서nx.degree_centrality(G_lmc)[n]을G_lmc.nodes[n]['degree centrality']에 할당하면 됩니다.
- 두 번째
- 노드들을 차수 중심성으로 정렬해 Arc plot으로 이 네트워크를 시각화하세요(키워드 인자
sort_by='degree centrality'를 사용하면 됩니다).
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Import necessary modules
from nxviz import arc
import matplotlib.pyplot as plt
# Identify the largest maximal clique: largest_max_clique
largest_max_clique = set(sorted(nx.find_cliques(G), key=lambda x: len(x))[-1])
# Create a subgraph from the largest_max_clique: G_lmc
G_lmc = G.subgraph(largest_max_clique).copy()
# Go out 1 degree of separation
for node in list(G_lmc.nodes()):
G_lmc.add_nodes_from(____)
G_lmc.add_edges_from(zip(____, ____))
# Record each node's degree centrality score
for n in G_lmc.nodes():
____ = ____
# Create the Arc plot: a
a = ____
# Draw the Arc plot to the screen
a
plt.show()