技术实践 | 用 NetworkX + Gephi + Nebula Graph 分析权力的游戏人物关系(上篇)
本文轉載自公眾號:Nebula Graph Community 。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
我們都知道《權利的游戲》在全世界都很多忠實的粉絲,除去你永遠不知道劇情下一秒誰會掛這種意外“驚喜”,當中復雜交錯的人物關系也是它火爆的原因之一,而本文介紹如何通過 NetworkX 訪問開源的分布式圖數據庫 Nebula Graph,并借助可視化工具—— Gephi 來可視化分析《權力的游戲》中的復雜的人物圖譜關系。
1. 數據集
本文的數據集來源:冰與火之歌第一卷(至第五卷)[1]
人物集 (點集):書中每個角色建模為一個點,點只有一個屬性:姓名
關系集(邊集):如果兩個角色在書中發生過直接或間接的交互,則有一條邊;邊只有一個屬性:權重,權重的大小代表交互的強弱。
這樣的點集和邊集構成一個圖網絡,這個網絡存儲在圖數據庫 Nebula Graph [2]中。
2. 社區劃分——Girvan-Newman 算法
我們使用 NetworkX [3] 內置的社區發現算法 Girvan-Newman 來為我們的圖網絡劃分社區。
以下為「社區發現算法 Girvan-Newman」解釋:
網絡圖中,連接較為緊密的部分可以被看成一個社區。每個社區內部節點之間有較為緊密的連接,而在兩個社區間連接則較為稀疏。社區發現就是找到給定網絡圖所包含的一個個社區的過程。
Girvan-Newman 算法即是一種基于介數的社區發現算法,其基本思想是根據邊介數中心性(edge betweenness)從大到小的順序不斷地將邊從網絡中移除直到整個網絡分解為各個社區。因此,Girvan-Newman 算法實際上是一種分裂方法。
Girvan-Newman 算法的基本流程如下:(1)計算網絡中所有邊的邊介數;(2)找到邊介數最高的邊并將它從網絡中移除;(3)重復步驟 2,直到每個節點成為一個獨立的社區為止,即網絡中沒有邊存在。
概念解釋完畢,下面來實操下。
使用 Girvan-Newman 算法劃分社區。NetworkX 示例代碼如下
為圖中每個點添加一個 community 屬性,該屬性值記錄該點所在的社區編號
3. 節點樣式——Betweenness Centrality 算法
下面我們來調整下節點大小及節點上標注的角色姓名大小,我們使用 NetworkX 的 Betweenness Centrality 算法來決定節點大小及節點上標注的角色姓名的大小。
圖中各個節點的重要性可以通過節點的中心性(Centrality)來衡量。在不同的網絡中往往采用了不同的中心性定義來描述網絡中節點的重要性。Betweenness Centrality 根據有多少最短路徑經過該節點,來判斷一個節點的重要性。
計算每個節點的介數中心性的值
為圖中每個點再添加一個 betweenness 屬性
4. 邊的粗細
邊的粗細直接由邊的權重屬性來決定。
通過上面的處理,現在,我們的節點擁有 name、community、betweenness 三個屬性,邊只有一個權重 weight 屬性。
下面顯示一下:
emmm,有點丑…
雖然 NetworkX 本身有不少可視化功能,但 Gephi [4] 的交互和可視化效果更好。
5. 接入可視化工具 Gephi
現在將上面的 NetworkX 數據導出為 game.gephi 文件,并導入 Gephi。
6. Gephi 可視化效果展示
在 Gephi 中打開剛才導出的 game.gephi 文件,然后微調 Gephi 中的各項參數,就以得到一張滿意的可視化:
將布局設置為 Force Atlas, 斥力強度改為為 500.0, 勾選上 由尺寸調整?選項可以盡量避免節點重疊:
Force Atlas 為力引導布局,力引導布局方法能夠產生相當優美的網絡布局,并充分展現網絡的整體結構及其自同構特征。力引導布局即模仿物理世界的引力和斥力,自動布局直到力平衡。
給劃分好的各個社區網絡畫上不同的顏色:
在外觀-節點-顏色-Partition 中選擇 community(這里的 community 就是我們剛才為每個點添加的社區編號屬性)
決定節點及節點上標注的角色姓名的大小:
在外觀-節點-大小-Ranking 中選擇 betweenness(這里的 betweenness 就是我們剛才為每個點添加的 betweenness 屬性)
邊的粗細由邊的權重屬性來決定:
在外觀-邊-大小-Ranking 中選擇邊的權重
導出圖片再加個頭像效果
大功告成,一張權力游戲的關系譜圖上線 :) 每個節點可以看到對應的人物信息。
7. 下一篇
本篇主要介紹如何使用 NetworkX,并通過 Gephi 做可視化展示。下一篇將介紹如何通過 NetworkX 訪問圖數據庫 Nebula Graph 中的數據。
本文的代碼可以訪問[5]。
8. 致謝
致謝:本文受工作 [6] 的啟發
Reference
[1]https://www.kaggle.com/mmmarchetti/game-of-thrones-dataset
[2]https://github.com/vesoft-inc/nebula
[3]https://networkx.github.io/
[4]https://gephi.org/
[5]https://github.com/jievince/nx2gephi
[6]https://www.lyonwj.com/2016/06/26/graph-of-thrones-neo4j-social-network-analysis/
?
?
OpenKG
開放知識圖譜(簡稱 OpenKG)旨在促進中文知識圖譜數據的開放與互聯,促進知識圖譜和語義技術的普及和廣泛應用。
點擊閱讀原文,進入 OpenKG 博客。
總結
以上是生活随笔為你收集整理的技术实践 | 用 NetworkX + Gephi + Nebula Graph 分析权力的游戏人物关系(上篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文浅尝 | Multimodal Fe
- 下一篇: 论文浅尝 | 基于未知谓词与实体类型知识