netviz_tools
원시 무역 흐름 테이블을 인터랙티브 네트워크 시각화로 변환하는 공개 Python 패키지입니다. NetworkX를 기반으로 구축되었으며, FAOSTAT 농업 무역 데이터를 기본 지원합니다.
한눈에 보기
- 분야: 오픈소스 툴링 / 네트워크 데이터 시각화 — NetworkX를 확장하여 인터랙티브 Plotly·Sankey 그래프와 GeoPandas 지도 출력을 제공하며, FAOSTAT 농업 무역 데이터셋(551개 이상 품목)을 내장합니다
- 역할: 개인 프로젝트 — 설계, 구현, 패키징, PyPI 배포 전 과정을 단독 수행
- 기술 스택: Python 3.13, NetworkX, pandas, GeoPandas, Plotly, Matplotlib, powerlaw, Pydantic, Rich
- 설치:
pip install netviz_tools - 상태: PyPI 공개 — v0.2.0 (Beta), MIT 라이선스
프로젝트 개요 / 해결한 문제
NetworkX는 Python에서 그래프를 구축하고 분석하는 데 있어 표준 라이브러리이지만, 실제 작업에서 가장 많은 시간이 소요되는 두 단계 — 지저분한 실세계 데이터를 그래프로 변환하는 것과, 분석 완료된 그래프를 시각적으로 확인 가능한 형태로 출력하는 것 — 에서는 지원이 부족합니다. 통상적인 워크플로는 임시 스크립트 더미로 이루어집니다 — CSV를 읽고, 컬럼명을 정제하고, 중복 엣지를 제거하고, 그래프를 구축한 뒤, 매번 Matplotlib 또는 Plotly 그림을 수작업으로 작성하는 방식입니다.
netviz_tools는 이 전체 과정을 네 개의 클래스로 패키징하여 상용구 코드를 제거합니다:
- DataManager — CSV, JSON, Excel, pandas DataFrame, 기존 NetworkX 그래프에서 네트워크 데이터를 로드하고, 정제·정규화하며, 핵심 속성(시계열 데이터를 위한
year컬럼 포함)을 자동 탐지하고, NetworkX와 상호 변환합니다. - NetworkManager — 방향 그래프를 래핑하고, 중심성(centrality)을 계산하며, 인터랙티브 시각화를 내보냅니다: Plotly 네트워크 플롯, Sankey 다이어그램, GeoPandas 기반 지리적 무역 흐름 지도.
powerlaw라이브러리를 통해 차수 분포에 멱함수 법칙(power-law) 적합도 계산도 지원합니다. - TimeSeries — 네트워크 지표가 연도별로 어떻게 변화하는지 분석하고, 시계열 트렌드를 플롯합니다.
- FAOSTATManager — v0.2.0의 핵심 기능: FAOSTAT 551개 이상 품목의 농업 무역 데이터를 내장한 특화 매니저로, 데이터를 별도로 수집하거나 가공하지 않아도 품목명 몇 줄만으로 무역 네트워크를 구축할 수 있습니다.
주요 사용자는 관계형 또는 무역 흐름 데이터를 다루며 정제-구축-시각화 파이프라인을 자동화하고 싶은 연구자, 학생, 데이터 분석가입니다. FAOSTAT 연동 기능 덕분에 국제 농업 무역을 연구하는 분들이 즉시 활용할 수 있습니다.
주요 기능
- 유연한 데이터 임포트. 단일
DataManager인터페이스를 통해 CSV, JSON, Excel, pandas DataFrame, NetworkX 그래프를 로드하며, 자동 정제 및 속성 탐지를 지원합니다. - FAOSTAT 무역 데이터 내장 (551개 이상 품목). 품목을 검색·탐색하고, 단일 또는 복수 품목을 한 번에 로드하며, 특정 품목과 연도의 무역 흐름을 거래량 임계값과 함께 조회하고, 국가의 주요 무역 파트너를 탐색하며, 바로 분석 가능한 무역 네트워크를 직접 구축할 수 있습니다.
- 인터랙티브 시각화. 인터랙티브 Plotly 네트워크 플롯, Sankey 다이어그램, 지리적 무역 흐름 지도(GeoPandas + Plotly
Scattergeo)를 내보내며, 각각 JSON으로 저장해 웹에 임베딩할 수 있습니다. - 네트워크 분석. 중심성 계산, 밀도 및 차수 지표, 차수 분포의 멱함수 법칙 적합을 지원합니다.
- 시계열 분석. 연도 자동 탐지, 연도별 필터링, 네트워크 지표의 시간에 따른 변화를 시계열 플롯으로 시각화합니다.
- Rich CLI 출력. 품목 목록과 요약 정보를
rich라이브러리를 통해 형식화된 테이블로 렌더링하여 빠른 탐색을 지원합니다.
사용 방법
PyPI에서 설치한 뒤, 품목명 몇 줄만으로 분석 가능한 무역 네트워크를 구축할 수 있습니다:
# pip install netviz_tools
import networkx as nx
from netviz_tools import FAOSTATManager
faostat = FAOSTATManager()
# Browse what's available, then load wheat trade data
faostat.list_commodities(search="wheat", limit=10)
faostat.load_commodity("wheat")
# Major wheat trade flows in 2020 (volume threshold to drop noise)
flows = faostat.get_trade_flows(commodity="wheat", year=2020, min_volume=10000)
# Build a trade network and analyze it with plain NetworkX
network = faostat.create_trade_network(commodity="wheat", year=2020, min_volume=100000)
print(f"{network.number_of_nodes()} nodes, {network.number_of_edges()} edges")
print(f"Network density: {nx.density(network):.4f}")
FAOSTAT를 사용하지 않는 일반 경로도 마찬가지로 간결합니다 — DataManager가 임의의
노드/엣지 테이블을 로드하고 정제하며, NetworkManager가 인터랙티브 Plotly·Sankey·
지리적 출력을 생성합니다.
한계점 / 로드맵
- 베타 단계. 현재 v0.2.0 / 개발 상태 4 - Beta입니다.
DataManager와FAOSTATManager는 가장 완성도가 높으며,NetworkManager와TimeSeries는 동작하지만 아직 고도화 중입니다. - Python 3.13+. 현재 릴리즈는 Python 3.13 이상을 대상으로 합니다.
- 로드맵. 기여 가이드 작성이 계획되어 있으며, 공개 API가 안정화됨에 따라 시각화 레이어도 계속 확장될 예정입니다.
기술 스택
- 그래프 엔진: NetworkX
- 데이터: pandas, NumPy, GeoPandas (지리 레이어)
- 시각화: Plotly (인터랙티브 네트워크, Sankey, Scattergeo 지도), Matplotlib
- 분석: powerlaw (차수 분포 적합)
- 유효성 검사 / CLI: Pydantic (데이터 모델), Rich (형식화 테이블)
- 패키징: Poetry, PyPI 빌드 및 배포; MIT 라이선스
링크
- PyPI: pypi.org/project/netviz-tools
- GitHub: github.com/tysonjohnsondev/netviz_tools
- 데이터 출처: FAOSTAT — FAO 통계 데이터베이스