Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

NetworkX와 Matplotlib로 네트워크 그래프 그리기

Python에서 NetworkX는 복잡한 네트워크 구조를 손쉽게 생성하고 분석할 수 있는 대표적인 라이브러리이며, Matplotlib와 함께 사용하면 네트워크 그래프를 간편하게 시각화할 수 있습니다.

이 글에서는 두 라이브러리를 활용해 네트워크 그래프를 그리고 화면에 출력하는 방법을 단계별로 살펴보겠습니다.

네트워크 그래프 그리기 절차

  • 그림 크기 설정: figure 크기를 지정하고, 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
  • 데이터프레임 생성: fromto라는 키(열)를 가진 데이터프레임 객체를 만듭니다. 이는 노드 간의 연결 관계를 정의합니다.
  • 엣지리스트 기반 그래프 생성: 데이터프레임으로부터 엣지리스트(edgelist)를 포함하는 그래프 객체를 얻습니다.
  • 그래프 그리기: draw() 메서드를 사용해 노드 크기, 라벨 표시 여부 등 다양한 노드 속성을 지정하며 그래프를 그립니다.
  • 그래프 출력: show() 메서드를 호출하여 완성된 그래프를 화면에 표시합니다.

예제 코드

import pandas as pd
import networkx as nx
from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

df = pd.DataFrame({'from': ['A', 'B', 'C', 'A'], 'to': ['D', 'A', 'E', 'C']})
G = nx.from_pandas_edgelist(df, 'from', 'to')
nx.draw(G, with_labels=True, node_size=100, alpha=1, linewidths=10)
plt.show()

코드 설명

위 예제에서는 먼저 pd.DataFrame()으로 노드 연결 정보를 담은 데이터프레임을 생성합니다. 이어서 nx.from_pandas_edgelist() 함수가 from 열과 to 열을 참조해 방향성 없는 무방향 그래프를 만듭니다.

nx.draw() 호출 시 주요 파라미터는 다음과 같습니다.

  • with_labels=True: 각 노드에 이름(A, B, C 등)을 표시합니다.
  • node_size=100: 노드의 크기를 지정합니다.
  • alpha=1: 노드의 불투명도를 설정합니다(1은 완전 불투명).
  • linewidths=10: 노드 테두리 선의 두께를 지정합니다.

실행 결과

코드를 실행하면 A, B, C, D, E 노드가 서로 연결된 네트워크 그래프가 Matplotlib 창에 출력됩니다.

NetworkX와 Matplotlib로 네트워크 그래프 그리기

마무리

이처럼 NetworkX와 Matplotlib를 조합하면 몇 줄의 코드만으로도 네트워크 데이터를 직관적으로 시각화할 수 있습니다. 소셜 네트워크 분석, 경로 탐색, 지식 그래프 등 다양한 분야에서 활용해 보시기 바랍니다.