본문 바로가기
공부/가짜 뉴스

[Neo4j] Gephi와 연동, large network 가시화

by 죠옹 2021. 3. 5.

P1. 기존 데이터 이식

P2. 데이터베이스 언어 (Cypher)

P3. Graph Apps - Neo4j Bloom (가시화), NeoDash (Feature 트래킹)

P4. graph data science - 알고리즘 (ex: pagerank, community detection)

P5. Gephi와 연동, Large network 가시화

P6. Python 프로그램과 연동, 주기적 DB 업데이트

 

     *굵게 표시한 목표는 이 글에서 다루는 내용

 

오늘 글의 목표는

1. Gephi에서 Data를 받는 Server를 열고,

2. Neo4j DBMS에서 Gephi로 network data를 스트리밍해주는 것

이다.

 

Gephi는 Neo4j APP에서는 다룰 수 없는 아주 큰 network를 가시화 하기 위해 필요!


Gephi 준비

 Gephi를 실행해서 Tool->Plugins을 가보자.

 Available Plugins에 보면 Graph Streaming이라는 애가 있다. 얘를 install 완료하면 Gephi를 껐다 킨다.

 

 New project를 생성한다.

 Graph streaming이 제대로 설치되었다면 Layout 옆에 얘가 나타난다.

 얘를 시작하고, Neo4j에서 데이터를 보내주면 되는데, 이게 좀 뭔가 버그가 있다.

 일단 이 상태에서 project를 저장하고 끈 다음, 다시 gephi를 켜서 project를 불러와야 된다..이유는 모른다..

 

 다시 켠 다음, Streaming tab의 'Settings...' 에서 Port가 8080으로 되어있는 걸 확인한다. 

 그 다음, Streaming에서 빨간 동그라미로 되어있는 Master Server를 우클릭, Server를 start해준다. (초록색이 됨)

 

 Neo4j DBMS를 스타트, Broswer를 open한다. 

 

 다음 명령어를 입력해준다.

MATCH p=(:Media)-[:Publish]->(a:Article)-[:Include]->(:Keyword)
WITH p, a.date as D
ORDER BY D DESC
CALL apoc.gephi.add(null, 'workspace0', p)
YIELD nodes, relationships, time
RETURN nodes, relationships, time

Media에서 Article 그리고 Keyword로 연결되는 path들을 Gephi로 streaming 해주는 코드다.

기사가 작성된 날짜 순서대로 matching된 path를 streaming하는 명령이다.

streaming에는 apoc.gephi.add 함수를 이용한다. 'null'로 된 부분이 gephi의 port를 입력하는 부분인데, gephi 기본 포트가 8080이기 때문에 입력하지 않았다. 다음 인자는 workpspace 이름을 적고, 보낼 path 정보인 p를 보내주면 된다.

Link에 weight 프로퍼티가 있는 경우에는 path 뒤에 'weightproperty'를 적어주면 되고, 이외에도 보내고 싶은 property가 있다면 그 뒤에 list로 감싸서 보내주면 된다고 한다. 여기서, 따로 node나 relationship 별로 보낼 수 없으므로, 되도록 다른 label의 속성이름이 겹치지 않게 하는게 좋을것 같다. 자세한 내용은 여기 참조.

 

실행영상. 실제 화면은 버벅거리지 않는데, CPU 사용률이 높아 CAM이 녹화하는 것이 밀렸다. 우아하게 network가 성장하는 모습을 로깅하고 싶었지만..ㅠㅠ

Streaming이 완료되면 가공을 할 수 있다. Filter를 이용해서 원하는 node에 label을 표시할 수도 node 사이즈를 바꿀 수도 있다. 

 

다음은 가시화의 한 예.

(한자나 특수 언어를 보낼 대 streaming시 에러가 발생한다. JAVA 설정을 바꿔줄 필요가 있다는데.. 잘 몰라서 그냥 한자를 포함한 부분을 다 삭제했다.)

 

반응형

댓글