[Network] Networkx

이상해씨·2023년 12월 12일
0

데이터분석

목록 보기
5/5

📌 Networkx

  • Networkx는 복잡한 네트워크들의 기능, 역동석, 구도를 생성, 수정할 수 있는 파이썬 패키지이다.
  • 사회학, 생물학 등 여러 연구의 툴로 사용된다.
  • Networkx로 데이터를 load, 네트워크 생성, 구조 분석, 네트워크 모델 구축, 네트워크 알고리즘 설계, 시각화 등의 작업을 할 수 있다

Networkx설치

전제

  • Python 3.10, 3.11, or 3.12
  • pip

networkx 설치

  • 라이브러리 설치하기
pip install networkx

Network 그래프 분석하기

1. 라이브러리 import

import networkx as nx   #  보통, nx로 줄여서 사용
import matplotlib.pyplot as plt   # 그래프 시각화를 위한 라이브러리

2. 그래프 생성

  • 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
  • Node와 edge 모두 삭제
G.clear()
  • 이미 존재하는 node, edge에 새로운 데이터를 설정하는 경우, 덮어쓰기 처리됨 (최근 지정 값으로 설정됨)
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')
  • 특정 node 혹은 특정 edge만 삭제하기
    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)

  • node, edge 갯수 확인하기
G.number_of_nodes()
8
G.number_of_edges()
3

3. Node 추가하기

  • node 추가하기
    : Node 1추가
    G.add_node(1)
  • Node 여러개 추가하기
    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의 노드를 사용할 수 있음

4. Edge

  • 하나의 edge 추가
    G.add_edge(1, 2)
    e = (2, 3)
    G.add_edge(*e)  # unpack edge tuple*
  • 여러개의 edge 추가
    G.add_edges_from([(1, 2), (1, 3)])
  • tuple로 추가하기
    (2, 3, {'weight': 3.1415}) 2와 3 Node에 가중치를 부여한 edge 추가
    G.add_edges_from(H.edges)

5. 네트워크 시각화

  • 네트워크 시각화
    :nx.draw_networkx() , nx.draw() 로 시각화 그래프 생성

  • nx.draw_networkx()

    • 노드의 연결성이 높은 경우 노드 위치를 중심으로 오도록 위치를 자동 조절하여 중요하거나 연결이 많은 노드가 시각적으로 잘 보이게 함.

    • 기본적으로 노드의 label(라벨)도 함께 보여주어 노드 식별에 도움을 줌.

    • nx.draw()보다 더 다양한 기능을 제공, 노드 위치 결정 알고리즘 선택이 가능하며, 최신 업데이트의 해택을 더 많이 받을 수 있음. 더 복잡하고 유연한 시각화에 적합

nx.draw_networkx(g)
plt.axis('off')  # 그래프 중심선이 화면에 출력되지 않게 함
plt.show()   # 그래프를 화면에 출력되도록 함


참고

profile
공부에는 끝이 없다

0개의 댓글