https://ysg2997.tistory.com/26 링크를 보며 공부한 내용 입니다.
!pip install networkx
import networkx as nx
import matplotlib.pyplot as plt
# Directed graph
DG = nx.DiGraph() #nx로 DirectGraph객체 생성
DG.add_edges_from([('A','B'),('A', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'F'), ('C', 'G')]) # Direct Graph 객체에 N1->N2 엣지 추가
plt.axis('off')
nx.draw_networkx(DG,
pos = nx.spring_layout(DG, seed = 0), # 그래프 레이아웃을 정의
node_size = 600,
cmap= 'coolwarm',
font_size = 14,
font_color = 'white')
실행 결과
# Undirected graph
G = nx.Graph()
G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'F'), ('C', 'G')])
plt.axis('off')
nx.draw_networkx(G,
pos=nx.spring_layout(G, seed=0),
node_size=600,
cmap='coolwarm',
font_size=14,
font_color='white'
)
실행 결과
nx.sprint_layout(DG, seed =0)
: 노드의 레이아웃(위치) 를 결정한다.
= 첫번째 매개변수 DG(필수): 레이아웃을 적용할 NetworkX그래프 객체, 이 객체는 노드와 엣지를 포함하고 있어야 한다.
= 두번째 매개변수 seed(선택적) : 난수 시드이다. 레이아웃의 결과를 재현 가능하게 만들기 위해 사용된다.동일한 시드면 동일한 레이아웃 얻을 수 있다.
각각의 엣지에 가중치 or 비용을 할당한 그래프를 그린다.
# Weighted graph
WG = nx.Graph()
WG.add_edges_from([('A', 'B', {"weight": 10}), ('A', 'C', {"weight": 20}), ('B', 'D', {"weight": 30}), ('B', 'E', {"weight": 40}), ('C', 'F', {"weight": 50}), ('C', 'G', {"weight": 60})])
labels = nx.get_edge_attributes(WG, "weight") #엣지의 가중치 가져오기 엣지의 가중치를 딕셔너리 형태로 가져온다. {(노드1, 노드2): 가중치} 형식이다.
plt.axis('off')
# 그래프 시각화
nx.draw_networkx(WG,
pos=nx.spring_layout(WG, seed=0),
node_size=600,
cmap='coolwarm',
font_size=14,
font_color='white'
)
# 엣지의 가중치 라벨을 추가합니다
nx.draw_networkx_edge_labels(WG, nx.spring_layout(WG, seed=0), edge_labels=labels, font_color='red')
plt.show()
: 그래프의 노드나 엣지에 대한 중요성이나 중심성을 측정하는 방법. 그래프의 구조와 연결성을 분석하고 이해하는데 필요하다.
G = nx.Graph()
G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'F'), ('C', 'G')])
plt.axis('off')
nx.draw_networkx(G,
pos=nx.spring_layout(G, seed=0),
node_size=600,
cmap='coolwarm',
font_size=14,
font_color='white'
)
print(f"Degree centrality = {nx.degree_centrality(G)}")
print(f"Closeness centrality = {nx.closeness_centrality(G)}")
print(f"Betweenness centrality = {nx.betweenness_centrality(G)}")
plt.show()