그래프에 자기 루프가 있는지 확인하기
Eric이 설명했듯이, NetworkX는 같은 노드에서 시작해 같은 노드로 끝나는 간선을 허용해요. 사회 연결망 그래프에서는 직관적이지 않을 수 있지만, 출발지와 도착지가 있는 여행(trip) 네트워크처럼 한 위치에서 출발해 다른 위치로 끝나는 데이터를 모델링할 때 유용해요.
추가 분석에 앞서 이를 확인해 두는 것이 유익하며, NetworkX는 이를 위한 메서드 nx.number_of_selfloops(G)를 제공해요.
이번 연습 문제와 이후 문제들에서 assert 문이 유용해요. assert는 뒤에 오는 표현식이 True인지 확인하며, 그렇지 않으면 AssertionError를 발생시켜요.
먼저 IPython Shell에서 nx.number_of_selfloops() 함수에 T를 전달해, 같은 노드에서 시작해 같은 노드로 끝나는 간선의 개수를 확인해 보세요. 그래프에는 여러 자기 루프가 인위적으로 추가되어 있어요. 이번 연습 문제에서 여러분의 과제는 이러한 간선을 찾아 반환하는 함수를 작성하는 거예요.
이 연습은 강의의 일부입니다
Python으로 시작하는 네트워크 분석
연습 안내
find_selfloop_nodes()라는 함수를 정의하고, 인수로G를 하나 받으세요.for루프를 사용해G의 모든 간선(메타데이터 제외)을 순회하세요.- 노드
u가 노드v와 같다면:- 리스트
nodes_in_selfloops에u를 추가하세요. - 리스트
nodes_in_selfloops를 반환하세요.
- 리스트
- 그래프의 자기 루프 개수가 자기 루프에 속한 노드의 수와 같은지 확인하세요. 이 부분은 이미 준비되어 있으니, 'Submit Answer'를 눌러 결과를 확인하세요!
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Define find_selfloop_nodes()
def ____:
"""
Finds all nodes that have self-loops in the graph G.
"""
nodes_in_selfloops = []
# Iterate over all the edges of G
for u, v in ____:
# Check if node u and node v are the same
if ____:
# Append node u to nodes_in_selfloops
____
return nodes_in_selfloops
# Check whether number of self loops equals the number of nodes in self loops
assert nx.number_of_selfloops(T) == len(find_selfloop_nodes(T))