Hodustory/프로그래밍&DB

파이썬(python) 입문 : networkX1 (네트워크 그래프) node와 edge

호두밥 2018. 5. 7. 15:10

NetworkX tutorial[각주:1]

노드(개체)와 엣지(연결)가 없는 빈 그래프를 하나 만듭니다. 

import networkx as nx
G = nxs.Graph()

그래프는 엣지(연결)과 노드들로 구성된 집합입니다. NetworkX에서 XML, 텍스트, 이미지, 다른 그래프, 개인화된 노드 개체 등 해시[각주:2] 가능한 개체가 노드가 될 수 있습니다. 

파이썬의 None 개체는 선택적 함수 인수가 많은 함수에서 할당 되었지를 결정하기 때문에 노드처럼 사용해서는 안됩니다.


그래프 G는 몇가지 방법으로 그릴 수 있습니다. NetworkX는 다양한 형태의 그래프를 읽고 쓸 수 있는 많은 그래프 생성 함수와 시설을 가지고 있습니다. 간단한 시작을 위해서 우리는 간단한 조합을 살펴보겠습니다. 




Nodes


우선 한번에 하나의 노드를 읽어오겠습니다.

G.add_node(1)

노드 리스트를 읽어오겠습니다.

G.add_nodes_from([2,3])

만약 2개의 튜플을 담고 있는 그릇이라면, 노드의 속성과 함께 노드를 추가할 수도 있습니다. (node, node_attribute_dict)

H = nx.path_graph(10)
G.add_nodes_from(H)

이제 그래프 G는 그래프 H를 포함합니다. 즉 그래프 H를 그래프 G의 노드로 사용할 수 있습니다. 

G.add_node(H)

그래프 G는 H를 노드로 포함합니다. 이런 유동성은 그래프의 그래프, 파일의 그래프, 함수의 그래프 등을 표현하는 데 매우 유용합니다. 프로그램을 어떤 구조로 하여 노드를 유용한 개체가 되게 할 지 생각하는 것은 유용합니다. 물론 그래프 G의 노드에 식별잘을 부여할 수도 있고, 선호한다면, 노드정보의 식별자로 키가 있는 별도의 딕셔너리를 가질 수 있습니다. 


Edges


그래프G에 하나의 엣지를 더하려면 다음과 같이 인수에 (node, node)를 입력하거나 변수에 입력하여 *변수 형태로 인수로 넣으면 됩니다.

G.add_edge(1,2)
e=(2,3)
G.add_edge(*e)

리스틀 엣지로 추가하려면 다음과 같이 하면 됩니다.

G.add_edges_from([(1,2),(1,3)])

(2,3,{'weight':3.1415}) 등의 가변적 묶음을 엣지로 추가할 때는 아래와 같이 씁니다.

G.add_edges_from(H.edges())

노드와 엣지를 삭제하려면 Graph.remove_node(), Graph.remove_nodes_from(), Graph_remove_edge() and Graph.remove_edges_from() 등을 이용하면 됩니다.


모든 노드나 엣지를 지우려면 Graph.clear() 함수를 사용합니다.  

이미 있는 것들을 새로운 노드나 엣지로 추가하면 기존에 있는 것들을 무시됩니다.

G.add_edges_from([(1,2),(1,3)])
G.add_node(1)
G.add_edge(1,2)
G.add_node("spam") #노드로 "spam"을 추가합니다.
G.add_nodes_from("spam") #'s', 'p', 'a', 'm'을 4개의 노드로 추가합니다.

그래프가 몇개의 노드. 몇개의 엣지로 구성되어 있는지를 확인하려면 다음 2개의 함수를 쓰면 됩니다.

G.number_of_edges()
G.number_of_nodes()

아래의 함수를 써서 그래프의 엣지와 노드, 개별 쌍을 확인할 수 있습니다.

G.nodes()
G.edges()
G.neighbors(1)

[2,3]

그래프 클래스 중 하나를 인스턴스화 해서 그래프 구조를 만들 때, 여러 형식의 데이터를 지정할 수 있습니다.

H=nx.DiGraph(G) #Digraph를 G와의 연결을 통해서 만듬
H.edges()
[(1,2),(2,1)]
edgelist=[(0,1),(1,2),(2,3)]
H=nx.Graph(edgelist)


-------------

안녕하세요! 호두입니다. 

이번에는 네트워크 그래프를 그릴 수 있는 networkX 패키지에서 그래프의 기본 구성요소인 노드와 엣지를 추가하고 삭제하는 법을 알아보았습니다.

다음번엔 노드와 엣지를 어떻게 이용할 수 있을지를 알아올게요!.

  1. https://networkx.github.io/documentation/stable/tutorial.html [본문으로]
  2. 함수를 이용하여 자료를 검색하는 방법. 데이터를 해시 테이블이라는 배열에 저장하고, 해싱 함수를 이용하여 데이터가 위치한 곳의 주소를 찾기 때문에 신속하게 원하는 자료를 검색할 수 있다. [본문으로]
반응형