pip install networkx
import networkx as nx # 보통, nx로 줄여서 사용
import matplotlib.pyplot as plt # 그래프 시각화를 위한 라이브러리
node, edge가 없는 그래프 생성하기
G = nx.Graph()
directed graph 생성하기
nx.DiGraph()
multi-edge graph 생성하기
: multi edge를 그리려면 복잡하거나 양이 방대하여, Graph 생성 후, edge에 weight를 지정해주는 방식으로 그린다
nx.MultiGraph() # Undirected
nx.MultiDiGraph() # Multi directed
그래프 type 확인하기
type(g)
# output : networkx.classes.graph.Graph, networkx.classes.digraph.DiGraph
G.clear()
G.add_edges_from([(1, 2), (1, 3)])
G.add_node(1)
G.add_edge(1, 2)
G.add_node("spam") # adds node "spam"
G.add_nodes_from("spam") # adds 4 nodes: 's', 'p', 'a', 'm'
G.add_edge(3, 'm')
Graph.remove_node()
, Graph.remove_nodes_from()
,Graph.remove_edge()
, Graph.remove_edges_from()
사용G.remove_node(2)
G.remove_nodes_from("spam")
list(G.nodes)
[1, 3, 'spam']
G.remove_edge(1, 3)
G.number_of_nodes()
8
G.number_of_edges()
3
G.add_node(1)
G.add_nodes_from([2, 3])
tuple 형태로 추가하기
: Node 4 색은 빨강, Node 5 색은 초록 추가
G.add_nodes_from([
(4, {"color": "red"}),
(5, {"color": "green"}),
])
한 그래프를 다른 그래프에 통합하기
: H를 G 그래프에 통합
H = nx.path_graph(10)
G.add_nodes_from(H)
G.add_node(H) #G는 H의 노드를 사용할 수 있음
G.add_edge(1, 2)
e = (2, 3)
G.add_edge(*e) # unpack edge tuple*
G.add_edges_from([(1, 2), (1, 3)])
G.add_edges_from(H.edges)
네트워크 시각화
:nx.draw_networkx()
, nx.draw()
로 시각화 그래프 생성
nx.draw_networkx()
노드의 연결성이 높은 경우 노드 위치를 중심으로 오도록 위치를 자동 조절하여 중요하거나 연결이 많은 노드가 시각적으로 잘 보이게 함.
기본적으로 노드의 label(라벨)도 함께 보여주어 노드 식별에 도움을 줌.
nx.draw()보다 더 다양한 기능을 제공, 노드 위치 결정 알고리즘 선택이 가능하며, 최신 업데이트의 해택을 더 많이 받을 수 있음. 더 복잡하고 유연한 시각화에 적합
nx.draw_networkx(g)
plt.axis('off') # 그래프 중심선이 화면에 출력되지 않게 함
plt.show() # 그래프를 화면에 출력되도록 함
network analysis 기초 (chaelist) : https://chaelist.github.io/docs/network_analysis/network_basics/
networkx document :
https://networkx.org/documentation/latest/tutorial.html
방향성 그래프와 방향성 그래프 (matlab) :
https://www.mathworks.com/help/matlab/math/directed-and-undirected-graphs.html
[네트워크 분석] 네트워크 중심성(Centrality) 지수 - 연결(Degree), 매개(Betweeness), 위세(Eigenvector), 근접(Closeness) :
https://m.blog.naver.com/applewoods/222318849314
https://blog.naver.com/PostView.naver?blogId=new27kr&logNo=221155998149