파이썬

파이썬 NetworkX 사용법 - 예제

박범준2 2020. 3. 8. 23:31
반응형

 

 

 

In [1]:
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important;}</style>"))
 
 
In [2]:
import networkx as nx
 

무방향성 그래프

In [3]:
#객체 생성
g1 = nx.Graph()
In [4]:
#노드 추가
g1.add_node("a")
g1.add_node(1)
g1.add_node(2)
g1.add_node(3)

g1.add_nodes_from([11, 22])
In [5]:
#노드 제거
g1.remove_node(3)
In [6]:
#엣지 추가
g1.add_edge(1, "a")
g1.add_edge(1, 2)
g1.add_edge(1, 22)

g1.add_edges_from([(1, 2), (1, 11)])
In [7]:
#엣지 제거
g1.remove_edge(1, 22)
In [8]:
#그래프 그리기
nx.draw(g1, with_labels = True, font_weigth = "bold")
 
In [9]:
#degree 크기에 따른 node size 설정
d = dict(g1.degree)
nx.draw(g1, nodelist = d.keys(), node_size = [v * 100 for v in d.values()], with_labels = True, font_weigth = "bold")
 
In [10]:
#노드 현황
g1.nodes
Out[10]:
NodeView(('a', 1, 2, 11, 22))
In [11]:
#엣지 현황
g1.edges
Out[11]:
EdgeView([('a', 1), (1, 2), (1, 11)])
In [12]:
#degree
g1.degree
Out[12]:
DegreeView({'a': 1, 1: 3, 2: 1, 11: 1, 22: 0})
In [13]:
#인접
g1.adj
Out[13]:
AdjacencyView({'a': {1: {}}, 1: {'a': {}, 2: {}, 11: {}}, 2: {1: {}}, 11: {1: {}}, 22: {}})
In [14]:
#노드의 개수
g1.number_of_nodes()
Out[14]:
5
In [15]:
#엣지의 개수
g1.number_of_edges()
Out[15]:
3
In [16]:
#요약
print(nx.info(g1))
 
Name: 
Type: Graph
Number of nodes: 5
Number of edges: 3
Average degree:   1.2000
 

방향성 그래프

In [17]:
#객체 생성
g2 = nx.DiGraph()

g2.add_edges_from([(1, 2), (1, 3), (2, 4), (3, 4)])

nx.draw(g2, with_labels = True, font_weigth = "bold")
 
In [18]:
g2.degree
Out[18]:
DiDegreeView({1: 2, 2: 2, 3: 2, 4: 2})
In [19]:
g2.in_degree
Out[19]:
InDegreeView({1: 0, 2: 1, 3: 1, 4: 2})
In [20]:
g2.out_degree
Out[20]:
OutDegreeView({1: 2, 2: 1, 3: 1, 4: 0})
 

가중치 표시

In [27]:
g3 = nx.DiGraph() 

g3.add_weighted_edges_from([(1, 2, 3), (2, 3, 4)])
g3.add_edge(1, 3, weight = 6)

pos = nx.spring_layout(g3)
nx.draw(g3, pos = pos, with_labels = True)

labels = nx.get_edge_attributes(g3,'weight')
nx.draw_networkx_edge_labels(g3, pos, edge_labels = labels);
 
 

판다스 데이터프레임 사용

In [396]:
import pandas as pd
In [511]:
df = pd.DataFrame({'from': ['A', 'B', 'C', 'A', 'E', 'D'],
                   'to': ['D', 'A', 'E', 'C', 'A', 'E'],
                   'weight': [1, 2, 3, 4, 5, 6]})
df
Out[511]:
  from to weight
0 A D 1
1 B A 2
2 C E 3
3 A C 4
4 E A 5
5 D E 6
In [513]:
g = nx.from_pandas_edgelist(df, 'from', 'to', create_using = nx.DiGraph())
nx.draw(g, with_labels=True)
 
반응형

'파이썬' 카테고리의 다른 글

파이썬으로 네이버 로그인  (0) 2020.04.09
파이썬으로 쿠팡 로그인  (6) 2020.04.07
파이썬 리스트 관련 메소드  (0) 2020.02.29
파이썬 스타일 가이드  (0) 2020.02.24
주피터 노트북 단축키 for mac  (0) 2019.11.24