- Graph Data Science
이번 블로그 포스팅에서는 Neo4j를 사용해서 유럽 가스 네트워크를 Knowledge Graph로 만들고, 데이터를 분석해볼 거예요.
최근 우크라이나-러시아 간의 위기로 러시아와 EU의 관계가 냉전 이후 최저 수준으로 떨어졌어요. 미국과 EU는 우크라이나 침공에 대한 제재를 러시아에 가했죠. 이러한 금융 제재는 러시아 경제에 타격을 주고, 푸틴 대통령과 그의 고위 관리들, 그리고 그의 정권으로부터 이익을 얻은 사람들을 처벌하기 위해 만들어졌어요.
유럽은 난방을 위해 러시아에 의존하고 있고, 러시아는 가스 무역으로 수익을 얻어야 해요. 따라서 갈등에도 불구하고 양측은 여전히 서로를 필요로 하는 상황이죠. 최근 독일 외무장관은 독일이 2022년 말까지 모든 러시아 석유 수입을 중단할 것이라고 발표했어요. [1].
이번 포스팅에서는 Neo4j를 통해 유럽 가스 네트워크를 Knowledge Graph로 변환한 다음, 이를 탐색하고 시각화하는 데 집중할 거예요. 만약 여러분이 개발자이고 Neo4j에 익숙하지 않다면, 여기서 시작해서 적응해보세요. 간단히 말해서, Neo4j는 개발자들에게 대체 솔루션을 제공하는 업계 표준 Graph Database 중 하나예요. Neo4j 제품에는 Neo4j Desktop, AuraDB, AuraDS, Bloom, Graph Data Science 등이 있답니다.
위 그림은 유럽으로 향하는 러시아의 주요 가스 파이프라인을 명확하게 보여주고 있어요. 러시아 천연가스는 파이프라인을 통해 유럽 대륙에 도착하며, 이는 전체 사용 가스의 약 3분의 1을 차지하죠. 따라서 러시아의 천연가스는 유럽 국가의 에너지 믹스에서 중요한 역할을 한답니다. 아래 그림은 필수 운송 경로를 자세히 설명하고 있으며, 이미지의 범례에는 각 구성 요소에 대한 요소 수가 포함되어 있어요.
이 도움말에서는 다음 내용을 다뤄요.
구성 요소 및 요소 구조의 정의
Knowledge Graph를 만드는 데 사용할 데이터세트에 액세스할 수 있어요. 이 링크를 통해 접속할 수 있죠. 간단하게 하기 위해 모든 관련 데이터 파일을 제 GitHub 계정으로 옮겨서 사용했어요. 데이터 세트 내부의 필드를 이해하기 위해 'SciGRID_gas: 원시 EMAP 데이터 세트' 보고서를 참고했는데, "DLR 네트워크 에너지 시스템 연구소"에서 발행되었답니다. 이번 포스팅에서는 일반적인 용어로 정의를 공유할 거라서, 독자분들이 굳이 보고서를 다시 읽을 필요는 없을 거예요.
가스 전송 네트워크는 파이프라인, 압축기, LNG 등과 같은 다양한 구성 요소로 구성되어 있어요. 주요 보고서를 바탕으로, 이러한 구성 요소에 대해 간략하게 설명해 드릴게요.
구성요소
Node: 가스 네트워크에서 가스는 한 지점에서 다른 지점으로 흐르는데, 좌표를 통해 위치가 제공돼요. 다른 모든 구성요소(예: 압축기 스테이션 및 발전소)의 요소에는 각 요소의 지리 참조를 허용하는 연관된 Node가 있어요. 전반적으로 Node라는 용어는 그래프 이론 측면과 일치하므로 이 블로그 포스팅 전체에서 사용될 거예요.
파이프라인(Pipeline): Pipeline을 사용하면 한 Node에서 다른 Node로 가스를 전송할 수 있어요. Pipeline은 순서가 지정된 Node 목록에 따라 지리 참조가 이루어져요.
파이프 세그먼트(Pipe Segment): PipeSegments는 PipeLines와 거의 동일해요. 하지만 두 개의 Node만 연결할 수 있다는 차이가 있죠. 따라서 모든 PipeLines 요소(3개 이상의 Node 포함)는 여러 PipeSegments 요소로 쉽게 변환될 수 있어요.
압축기(Compressor): 압축기는 가스의 압력을 증가시켜 가스가 한 Node에서 다른 Node로 흐르도록 하는 압축기 스테이션을 나타내요. 가스 압축기 스테이션에는 여러 개의 가스 압축기 장치(터빈)가 포함되어 있답니다.
LNG: LNG는 액화천연가스(Liquefied Natural Gas)의 약자예요. 유럽에는 여러 LNG 터미널 및 LNG 저장고가 있어요 (일부 가스는 선박을 통해 유럽으로 운송되죠).
저장소(Storage): 저장소는 또 다른 네트워크 구성 요소예요. 잉여 가스는 지하(예: 오래된 가스전 또는 소금 동굴)에 저장해서 공급이 적거나 수요가 많은 기간에 사용할 수 있도록 하는 거죠.
소비자(Consumer): 소비자는 가정, 산업, 상업용 가스 사용자를 지칭하는 용어예요. 이 데이터 세트는 마스터 프로젝트를 통해 생성되었고, 발전소는 제외되었어요.
발전소(Power Plant): PowerPlants는 발전소에서만 사용되는 가스를 가리키는 용어예요.
생산(Production): 이는 가스가 땅에서 펌핑되는 국가 내부의 우물일 수 있어요. 유럽에서 사용되는 대부분의 가스는 EU 외부에서 생산되지만, 유럽 전역에는 여러 개의 소규모 가스 생산 현장이 흩어져 있답니다.
경계점(Border Point): BorderPoint는 국가 간 국경에 있는 시설로, 주로 한 국가에서 다른 국가로의 가스 흐름을 측정하는 데 사용돼요.
요소 구조
위에서 언급했듯이 요소는 압축기나 LNG 터미널과 같은 개별 시설을 설명해요. 하지만 해당 요소의 전체 구조는 모든 구성 요소의 모든 요소에 대해 동일하며 다음과 같이 설명할 수 있어요.
- id: 요소의 ID인 문자열이며 고유해야 해요.
- 이름(name): "Compressor Radeland"와 같이 시설의 이름을 나타내는 문자열이에요. 대부분의 경우 제공되지 않아요.
- 소스_ID(source_ID): 요소의 데이터 소스인 문자열 목록이에요. 서로 다른 소스의 여러 요소가 단일 요소로 결합될 수 있으므로 원본 데이터 소스를 알아야 할 수도 있어요.
- node_id: 네트워크 요소가 연결된 지리적 참조 Node의 ID예요. 압축기의 경우 이는 단일 node_id일 뿐이지만, 가스 파이프라인의 경우 이 항목은 최소 2개의 node_id 값(시작 Node ID와 끝 Node ID)의 목록이에요.
- lat: 요소의 위도 값이에요. PipeLines 및 PipeSegments 유형 요소의 경우 lat는 위도 값 목록이에요. SciGRID_gas 프로젝트 전반에 걸쳐 투영 세계 측지 시스템 1984(epsg:4326)가 사용되었어요.
- 긴(lng): 위도에 대한 경도 아날로그예요.
- 국가_코드(country_code): PipeLines 또는 PipeSegments의 경우 요소 목록 또는 관련 Node의 두 자리 ISO 국가 코드(Alpha-2 코드, 국가 및 해당 코드 목록은 10.6장 참조)를 나타내는 문자열이에요.
- 논평(comment): 요소와 연결된 임의의 설명이에요. 대부분의 경우 제공되지 않아요.
- 태그(tags): 이 사전은 OpenStreetMap 데이터용으로 예약되어 있어요. 여기에는 OpenStreetMap 항목의 모든 관련 키:값 쌍이 포함되어 있답니다.
가스 네트워크 Knowledge Graph 만들기
이 섹션을 실행하기 전에 Neo4j 샌드박스 브라우저에서 코드를 실행하거나, 다음을 통해 통신해 주세요. 노트북을 사용해도 괜찮아요. 먼저 제약 조건을 정의한 다음 구성 요소 생성을 시작해 볼게요. 시각화 목적으로 모든 구성요소를 사용할 거라서, 파이프라인의 일부인지 여부에 관계없이 모든 구성요소를 생성할 거예요.
노트북에 있는 모든 구성 요소의 모든 코드 조각을 찾을 수 있지만, 여기에는 파이프라인의 일부가 아니라는 예로서 "경계점(Border Point)"만 표시해 드릴게요.
경계점:
이제 파이프라인의 "접합점"으로 `Node`를 생성할 거예요. 그런 다음 이걸 연결해서 파이프라인을 만드는 거죠.
Node:
탐색적 데이터 분석(EDA) 및 그래프 데이터 과학(GDS)
EDA 섹션에서 첫 번째 질문은 "KG는 몇 개의 `Node`로 구성되어 있고, 그 유형은 뭐지?"일 수 있어요. 두 번째는 `Relationship`에 대한 동일한 질문이고요. 이번 예시의 경우 `Node` 간 `Relationship`이 하나밖에 없어서 관계는 크게 의미가 없지만, 관련 코드 스니펫을 공유하려고 이 부분을 다뤄보려고 해요.
`Node`의 경우:
`Relationship`의 경우:
다음 "메타 통계" 코드 조각을 사용해서 동일한 그림을 다른 출력 형식으로 얻을 수도 있어요. `Node`와 `Relationship`의 유형과 개수도 확인할 수 있고요.
Neo4j 그래프 데이터 과학(GDS)
Neo4j released the 2.0 version of Graph Data Science on March 24, 2022. You can check out the release notes through the link below:
Graph Data Science 2.0.0
페이지 순위, 정도 중심성 등과 같은 EDA의 일부로 여러 그래프 기반 분석에 GDS 2.0을 활용하기로 결정했어요. 먼저 GDS 객체를 생성해야 하고 그래프 기반 `Query`를 이 인스턴스에 연결해서 결과를 확인해볼게요.
GDS 알고리즘을 시작하기 전에 알고리즘 구문 실행 모드에 대한 몇 가지 세부 정보를 공유하고 싶어요. 명명된 그래프 투영을 생성하면 각 알고리즘에 대해 네 가지 실행 모드가 제공되죠.
- 스트림: 데이터베이스를 변경하지 않고 알고리즘 결과를 레코드 스트림으로 반환해요.
- write: 알고리즘 결과를 Neo4j 데이터베이스에 쓰고 요약 통계의 단일 레코드를 반환하고요.
- mutate: 알고리즘 결과를 투영된 그래프에 기록하고 단일 형태의 요약 통계를 생성해요.
- stats: 요약 통계의 단일 레코드를 반환하지만 Neo4j 데이터베이스나 예상 그래프에 쓰지는 않아요.
위의 4가지 모드 외에도 추정을 사용해서 특정 알고리즘이 사용할 메모리 양을 예측할 수 있어요.
특별 참고 사항모드 변경:기능 엔지니어링을 수행할 때가 되면 GDS에서 계산한 일부 수량을 그래프 투영에 포함하고 장면에서 mutate가 대신 수행되기를 원할 거예요. 데이터베이스 자체를 변경하지는 않지만 향후 계산을 위해 예상 그래프 내의 각 `Node`에 계산 결과를 기록하는 거죠. 이 동작은 더 복잡한 그래프 알고리즘이나 파이프라인을 사용할 때 작동하는데, 이 블로그의 범위를 벗어나지만 자세한 내용은 다음에서 다룰게요.API 문서
페이지랭크
중심성이나 중요도를 결정하는 방법에는 여러 가지가 있지만 가장 널리 사용되는 방법 중 하나는 PageRank를 계산하는 거예요. 페이지랭크(PR) 알고리즘은 그래프 내 각 `Node`의 중요성을 측정하죠. PR은 들어오는 `Relationship`(링크) 수를 기반으로 `Node`의 순위를 계산해요. 처음에는 웹페이지의 순위를 매기도록 설계되었는데, 일반적으로 기본 가정은 웹페이지가 해당 웹페이지에 연결되는 웹페이지만큼 중요하다는 것이죠.
PageRank에 따라 가스 파이프라인의 상위 10개 `Node`를 가져오는 관련 코드 조각:
결과는 다음과 같아요.

결과에 따르면 가장 중요한 `Node`는 `Node` 번호 5305예요. 이 "id"는 실제 그래프에서 `Node`를 생성할 때 설정한 ID가 아니라는 점에 주목할 가치가 있어요. 결과에 표시된 "id"는 기본적으로 생성 기간 동안 Neo4j 엔진에서 설정한 각 `Node`의 내부 ID 공간이죠. 그렇다면 그래프에서 이 `Node`를 어떻게 찾을 수 있을까요?
이 문제를 완화하기 위해 GDS PR 코드를 약간 수정해볼게요. 먼저 GDS 알고리즘으로 각 `Node`의 “pagerank”를 작성한 다음 “pagerank” 값으로 `Query`할 거예요.
그 결과, GDS 페이지 순위 기능을 사용해서 유럽 가스 파이프라인의 가장 중요한 연결 지점을 찾을 수 있고 해당 지점에 해당하는 최대 연간 가스 유입량도 표시했어요.
학위 중심성
학위 중심성
학위 중심성 알고리즘은 node에서 들어오고 나가는 relationship 수를 측정해서 그래프 내에서 인기 있는 node를 찾는 데 쓰여요. 예를 들어, 트위터에서 가장 영향력 있는 사용자나 온라인 경매에서 합법적인 사용자와 사기꾼을 구별하는 데 도움을 줄 수 있죠. 학위 중심성은 네트워크에서 가장 중요한 node를 결정하려는 시도의 필수 요소라고 할 수 있어요. 이 알고리즘의 핵심은 정위(orientation) 파라미터인데, 작동 방식은 다음과 같아요.
- UNDIRECTED: 들어오고 나가는 relationship 모두에 점수를 매겨요.
- REVERSE: 들어오는 relationship에만 점수를 매겨요.
- NATURAL: 나가는 relationship에만 점수를 매겨요.
여기서는 모든 들어오고 나가는 relationship을 계산하기 위해 UNDIRECTED 방향을 사용할 거예요. 트위터에서 영향력 있는 사람들을 찾고 싶다면 REVERSE 방향을 사용해서 사용자의 팔로워를 계산해야겠죠?

매개 중심성
매개 중심성 알고리즘은 최단 경로를 기반으로 그래프 내 중심성을 측정하는 방법이에요. 그래프 이론에 따르면 연결된 그래프에는 모든 node 쌍에 대해 node 사이에 최소 하나의 최단 경로가 존재하죠. 각 node의 매개 중심성은 해당 node를 통과하는 최단 경로의 총 개수랍니다.
즉, 그래프의 한 부분을 다른 부분과 연결하는 브리지 node를 찾는 데 많이 사용된다는 뜻이에요. 네트워크 이론에서 매개 중심성 알고리즘은 소셜 네트워크, 생물학, 교통, 통신 등 다양한 분야에 적용되고 있어요.
예를 들어, 교통 네트워크에서 매개 중심성이 높은 node는 더 많은 품목/승객이 해당 node를 통과하기 때문에 네트워크에 대한 더 많은 제어권을 갖게 돼요. 의사 결정자는 매개 중심성 점수를 활용해서 교통 네트워크의 허브를 결정할 수 있겠죠.
Louvain 모듈성을 통한 클러스터 감지
이 방법은 대규모 네트워크에서 커뮤니티/링을 찾는 데 사용돼요. 가장 빠른 모듈성 기반 알고리즘 중 하나이고 대규모 네트워크에서 성능이 좋죠. 모듈성은 그룹이 클러스터로 얼마나 잘 분할되었는지를 측정하는 지표예요. Louvain 알고리즘은 커뮤니티를 단일 node로 재귀적으로 병합하고 모듈성 클러스터링을 실행한답니다.
여기서는 이 섹션 시작 부분에 생성된 "파이프" 예상 그래프를 사용할 거예요.
클러스터의 국가 코드를 더 효율적으로 읽기 위해 몇몇 국가에 대한 전체 국가 코드를 준비했어요. 이 목록을 보면 연결 지점에 해당하는 가장 눈에 띄는 커뮤니티는 천연 가스 공급업체인 러시아와 에스토니아, 벨로루시, 우크라이나 등 러시아와 가까운 국가라는 것을 알 수 있어요. 이 국가들의 교차점은 유럽에 천연 가스를 유통하는 데 필수적인 역할을 하죠.
- EE: 에스토니아
- BY: 벨로루시
- UA: 우크라이나
- RU: 러시아
- NL: 네덜란드
- BE: 벨기에
- XX: 국가 없음 — 해저
- DE: 독일
- AT: 오스트리아
- CH: 스위스
경로 찾기
다른 그래프 알고리즘과 마찬가지로 경로 찾기에도 몇 가지 대안이 있어요. 경로 찾기 알고리즘의 주된 목표는 두 개 이상의 node 사이에서 최단 경로를 찾는 것이죠. 천연 가스 파이프라인 그래프의 경우 경로 찾기 알고리즘은 최소 전체 거리에 필요한 연결점(node)을 결정하는 데 도움이 될 거예요.
Dijkstra 알고리즘은 가장 일반적으로 사용되는 최단 경로 알고리즘 중 하나예요. A*와 Yen 알고리즘도 Neo4j GDS에서 사용할 수 있는 다른 대안들이죠.
이전 GDS 예제와 달리 Dijkstra 알고리즘은 거리와 같은 양의 relationship 가중치가 있는 가중치 그래프를 지원하므로 가중치 그래프 투영이 필요해요. 이는 소스 node에서 도달 가능한 모든 node까지 가중치가 가장 낮은 relationship을 찾는 것부터 시작하죠. 그런 다음 해당 node에서 연결된 모든 node까지 동일한 계산을 수행해요. 대상 node에 도달할 때까지 항상 가중치가 가장 낮은 relationship을 선택하는 방식이에요.
위 쿼리에서 볼 수 있듯이 소스 및 대상 node를 지정하고 relationship weight 속성을 길이_km로 설정했어요. 임의로 2개의 node(소스 node는 “INET_N_856”, 타겟 node는 “NutsCons_1003”)를 선택하고 경로 찾기 알고리즘을 실행했죠. 총 거리와 이 경로를 따라 연결 지점 목록을 포함해서 여러 정보가 반환될 거예요. 이 경우 최단 경로는 18홉 길이이고 전체 거리가 최소화되는 것을 알 수 있어요.
NeoDash를 통한 시각화
NeoDash는 몇 분 만에 Neo4j 그래프로 대시보드를 구축할 수 있게 해주는 그래프 앱이에요. Graph Database를 사용해서 다중 페이지 시각화를 만들 수 있죠. 지도, 테이블, 막대 차트, 원형 차트, 그래프, 선 차트 등 다양한 방식으로 데이터를 표시할 수 있고, 다른 시각화에 영향을 미치는 동적 파라미터를 설정할 수도 있어요. 대시보드를 만든 후에는 그래프 데이터베이스에 node로 저장하고 다시 실행할 수 있답니다. 더 자세한 내용은 아래 리소스를 확인해 보세요.
다음은 NeoDash를 사용하여 생성된 대시보드의 예시예요.
저희가 작업한 노트북은 에서 찾을 수 있어요. 필요에 맞게 포크해서 수정해 보세요. Pull 요청은 언제나 환영이에요!
읽어주셔서 감사해요! 궁금한 점이 있다면 , , 그리고 로 연락 주세요!
참고 자료
- Graph
- Graph Algorithms
- 페이지랭크
- 길 찾기
에이치시스템즈의 LogTree는 Neo4j 기반 GraphRAG 플랫폼으로, 데이터를 자동으로 지식그래프화하고 자연어 질의로 즉시 답을 제공합니다.
'Ontology & Knowledge Graph' 카테고리의 다른 글
| 금융 서비스와 Neo4j: Identity & Access Management 완벽 가이드 (1) | 2026.06.23 |
|---|---|
| BearingPoint와 함께 그래프 탐험: 5분 인터뷰 (1) | 2026.06.23 |
| Entity Resolved Knowledge Graph 구축 가이드 (0) | 2026.06.22 |
| Top 10 활용 사례: ID 및 접근 관리 (0) | 2026.06.22 |
| 엔터프라이즈 그래프: Dan Woods와의 5분 인터뷰 (1) | 2026.06.21 |
