brunch

You can make anything
by writing

C.S.Lewis

by 코드아키택트 Jul 07. 2024

NetworkX 라이브러리와 Weighted Graph

쉬어가는 세션?

최근 들어 스케줄이 계속 밀려 작가로서 참담한 상황이지만, 어떻게든 해내보려 합니다. 수업에서 나오는 문제를 지속적으로 보고 있다 보면 Python 문법에 맞지 않는 부분들이 눈에 띄게 됩니다(아마 제가 모르는 걸지도). 그런 부분들을 고치는 것도 중요한 공부 과정 중 하나입니다. 오늘은 간단하게나마 weighted graph를 시각화하는 코드를 공유하려 합니다.


NetworkX 라이브러리

NetworkX 라이브러리는 그래프 관련 작업을 쉽게 할 수 있는 도구 중 하나입니다. 현재 우리는 그래프 알고리즘을 다루고 있으며, 이를 시각적으로 표현할 필요가 있습니다. NetworkX 라이브러리를 선택한 이유는 직관적이고 학계에서도 많이 사용되며, 튜토리얼이 풍부하기 때문입니다. 추후 그래프를 더 깊이 배울 것을 생각하면 좋은 선택이라고 판단했습니다.


시각화 전 데이터 구조에 대한 이해

우선 데이터 구조를 먼저 이해해야합니다. 지난번 까지는 Adjacency만 있으면 됬습니다. 하지만 이제 Weight가 포함되었습니다. 그리고 어렴풋한 기억에 Weight를 표현하는 자료구조도 다양했습니다. 원 수업의 코드에 맞는 자료 구조는 tuple이 keyr가 되는 weight 구조였습니다. 이를 아래 넣으면 이렇습니다.

위 두 내용 중 아래가 weight, 위가 adjacency에 해당합니다.


시각화 코드

최근에는 GPT를 사용하면 많은 작업을 자동으로 처리할 수 있어 정말 신기합니다. 저의 직접적인 설명이 부족할 수도 있지만, 코드는 잘 작동하는 것을 확인했으니 도움이 되시리라 생각합니다. 아래는 해당 내용을 포함한 코드입니다:

현재 그림이 두 번 만들어지는 이슈가 있어 이를 처리하는 코드도 포함되어 있지만, 완벽히 작동하지는 않습니다. 그래도 구동 후 그림을 보면 다음과 같이 깔끔하게 나오는 것을 확인할 수 있습니다.

실험 삼아 Directed graph도 만들어 보았는데, 제대로 나오는 것을 볼 수 있습니다.

위 그림을 보시면 0과 1사이에 한쪽으로만 연결된 것을 볼 수 있습니다.


끝맺으며

수업 내용을 더 진행하고 싶었지만, 이전 내용이 정리되지 않아 weight와 관련된 자료 구조를 제대로 손보고 가야 했습니다. 다음에는 더 좋은 내용으로 찾아뵙도록 하겠습니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari