IT

NetworkX 파이썬 패키지를 이용한 네트워크 그래프 작성

유병혁 2019. 9. 5. 23:51

안녕하세요? 이번 글은 NetworkX 파이썬 패키지를 이용한 네트워크 그래프 작성 방법을 정리합니다.

NetworkX는 그래프와 네트워크 연구를 위한 파이썬 라이브러리입니다. NetworkX 깃허브 | https://networkx.github.io/


앞서 정리한 단어 연관규칙(association rules)을 네트워크 그래프를 그려 가시화한다고 보시면 됩니다.

이전 글: 빅카인즈 뉴스 데이터를 이용한 '깃대종' 연관규칙 분석 | http://blog.daum.net/geoscience/1407


자, 그럼 시작해볼까요?! 일단 분석을 위한 라이브러리를 추가합니다.


앞서 빅카인즈에서 1900년부터 2019년 6월까지 '깃대종'이 언급된 뉴스 데이터를 내려받고,

이 중 '제목' 컬럼을 텍스트 파일로 별도 저장했었습니다. 빅카인즈(BIG KINDS) | https://www.bigkinds.or.kr/


해당 텍스트 파일을 열고,


단어빈도 분석을 위한 한나눔을 불러옵니다.

한국어 NLP를 위한 코엔엘파이(KoNLPy) 설치하기 | http://blog.daum.net/geoscience/1398


반복문을 통해 텍스트 파일을 한줄씩 읽어와 정규표현식을 적용하고 dataset에 기록해 갑니다.


re.sub()는 문자열에서 일치하는 텍스트를 다른 텍스트로 치환(substitution)할 때 사용합니다.

정규표현식에서 [], 즉 대괄호는 그 안에 있는 문자열을 포함하라는 의미입니다. ^는 이 패턴으로

시작해야 한다는 의미이며, 가-힣는 한글, a-zA-Z는 영문, \s는 공백(white space)을 정의합니다.

아래와 같이 단어들이 2차원 리스트로 추출된 결과를 확인합니다.


이제 어프라이어리(Apriori) 알고리즘을 적용하여 연관규칙 분석을 수행해 봅니다. 이전 글은

Mlxtend 라이브러리를 통해 구현했었는데요, 이번엔 보다 간단한 Apyori 패키지를 사용해 봤습니다.

Apyori | https://github.com/ymoch/apyori


연관 규칙(association rules)의 개념은 아래 글을 참고하시기 바랍니다.

Complete guide to Association Rules (1/2) | https://towardsdatascience.com/association-rules-2-aa9a77241654

Complete guide to Association Rules (2/2) | https://towardsdatascience.com/complete-guide-to-association-rules-2-2-c92072b56c84


아래 화면은 항목 개수가 2개이고 지지도(support)가 0.01 이상인 항목집합만 추려낸 결과입니다.


이제 위 항목들을 네트워크 그래프로 작성해 보겠습니다. 아래와 같이 네트워크 그래프를 정의합니다.


네트워크의 자료 구조는 노드와 엣지로 구성됩니다. 패이지랭크는 노드 순위를 제공하므로 노드 색상과 크기를 지정하는데 유용하게 사용됩니다.


NetworkX 패키지는 아래와 같이 다양한 레이아웃을 제공합니다.


네트워크 그래프를 그려볼까요?! 아래와 같이 단어간 연관성을 한눈에 보실 수 있습니다. 노드의 색상과 크기는 패이지랭크에 따라 다르게 표현됩니다.


레이아웃 지정에 따라 전혀 다른 느낌의 네트워크 그래프를 그려볼 수 있습니다. 간단하죠?!

그래프 레이아웃 | https://networkx.github.io/documentation/latest/reference/drawing.html#module-networkx.drawing.layout