介紹用Gephi進行數據可視化
前提介紹:首先感謝 @崔斯特 在抓取數據中對我的協助。
這篇文章介紹的是數據可視化(Data visualization)的一些具體應用。
主要用到的工具 Python (抓取數據和分析數據), Gephi (數據可視化軟體)
(另外: 我會介紹到兩個在Facebook (Netvizz v1.42) 上抓取數據的app)先上圖:
這是以五月天Fan-mily(原May Day Fan-mily) Facebook Group 為收集數據的來源製作的 社交網路關係圖。
而這幅圖是從《哈利波特與魔法石》中提取製作的 人物關係圖。
好!我們正式開始!!
首先,我們看看如何獲得數據。
這裡主要分兩種數據獲取的模式:
1, 從網路直接獲取的數據
2, 通過數據分析獲得的數據
那第一種從網路直接獲取的數據的方式有很多啦。像流行的Python爬蟲 或者從 網站開放的API獲取。
這裡介紹的Netvizz 就是Facebook 開放API 提取數據的app.
可以翻牆的同學可以直接在Facebook 的搜索欄直接輸入 Netvizz 就可以找到了。
圖1
但有一點需要注意,為了保證用戶隱私 Facebook 已經關閉了個人用戶的API介面數據提取的服務。
所以,我們現在只能獲得小組和頁面的數據。
圖2
選擇小組數據(Group data)後,我們會進入一個選項頁面 (圖3)。在這裡我們要填寫小組id (group id),那小組ID怎麼獲得呢? 點擊旁邊的 find group ids here。進入http://Lookup-id.com,將選擇的FB小組的連接填入,就會得到一串數字,那就是小組ID(圖5)。
(注意哦,Data to get 的勾勾要去掉)
圖3
圖4
圖5
然後回到Netvizz頁面。將ID輸入,然後就可以進行抓取了。
下載文件中會有個 .gdf 的文件夾,用Gehpi將其打開就可以見到初始化的畫面。
圖6
控制面板的左邊是:
Node(節點):控制畫面中的小點點。
Edges(邊):連接點的線。
Layout(布局):依據演算法改變這個點與線的分布。
樣式大家可以自由發揮啦,難度也不大。想學精細點的同學可以上Gephi官網上看看,那有很多具體的教程。
圖7
以我這次講Node中的Attribute 設置成為 Comment_count,Layout 選擇Fruchterman Reingold 演算法,關於這些布局演算法(force-directed layout algorithm)的詳情,其基本思想是通過移動節點和改變它們之間的力,以盡量減少系統的能量。其他幾個演算法大家可以在wiki上搜索下。於是黑黑的網格就變成富有結構和色彩了。
圖8
右邊是統計相關的數據,很多意思我也不懂啦,也在學習中,這裡就不多介紹了。
關於 哈利波特與魔法石 的那幅圖是怎麼做出來的問題?
首先要從網上找到 哈利波特與魔法石 的文本並下載下來。
這一部分的爬蟲是 @崔斯特 幫助我完成的,在這裡再度表示感謝!
把小說弄到手後。
這就需要用到Python 對整本書進行文本分析。
在進行分析前,我們首先要創建一個人物名稱的list。
從百度搜索 哈利波特的 人物表 製作成txt 如下:
這裡選擇用 jieba 進行分詞
然後定義3個關係
之後按照字典類型names保存人物,該字典的鍵為人物名稱,值為該人物在全文中出現的次數。字典類型relationships保存人物關係的有向邊,該字典的鍵為有向邊的起點,值為一個字典edge,edge的鍵是有向邊的終點,值是有向邊的權值,代表兩個人物之間聯繫的緊密程度。lineNames是一個緩存變數,保存對每一段分詞得到當前段中出現的人物名稱,lineNames[i]是一個列表,列表中存儲第i段中出現過的人物。
得到node.txt 和 edge.txt, 之後導入Gephi。選 Import spreadsheet, 分別導入 node.txt (選項中選擇節點圖) 和 edge.txt (
選項中選擇邊表圖)。
之後的美化和用演算法調整布局,大家就可以自由發揮啦。
最後,在介紹幾個社交網路分析的概念吧。
第一:網路密度 (Network Density)
一個網路的密度是在一個給定的網路中的關係(邊)的數目在網路中的節點之間的可能的關係的總數的比率
這是一個常用的措施,以確定如何連接良好的網路
一個完全連通的網路密度為1
而下面的網路舉例顯示密度為0.83
公式: 可觀測到的實際聯繫/全部潛在的聯繫=關係密度
如圖,可見關係數為(5),可能關係數(6),所以關係密度 5/6
密度是一個有用的措施互相比較網路
密度測度與跟蹤諸如信息擴散(如思想、謠言、疾病傳播等)的現象有關。
這是因為它假定,在緊密連接的網路中,信息的傳播速度更快,達到更廣泛的節點集
網路密度越大,越有可能被認為是一個有凝聚力的社區(即社會支持和有效傳播的來源)
第二:層 (Degree)
指特定行動者對網路其他成員持有的關係的數量和類型
主要分: 單方向性關係 (directed relationship)和 對稱關係 (symmetric relationship)
In-Degree
特定節點與他人的關係
Out-Degree
表明節點1和2之間的往複運動
基本上是一個衡量領帶強度,這是同樣相關的分析整個網路 (Weight Degree )
測量權重可以:互動頻率、交換項目數、個體對關係強度的感知
3,結構洞 (Structural Holes)
結構空洞的思想描述了網路密度的相反,即缺乏連接。
結構孔歸因於節點,否則連接密集的網路部分,是分成重要的連接節點。連接網路部分的這些節點被稱為「Brokers」。
例如那幾個大點點。
弱聯繫的概念與結構空洞的概念密切相關
類似於結構孔,弱關係在網路中嵌入較少。
儘管如此,他們承擔重要的職能:
他們促進信息流之間的集群(即從遙遠的部分網路)
弱聯繫有助於整合社會系統,否則將支離破碎和語無倫次
4. 集群 (Clustering)
計算和識別網路中的集群,特別是大型網路可能很麻煩
預定義的演算法有助於識別集群,因此網路內的社區
Force Atlas 和 Force Altas 2:最常用的一種演算法來確定在大型網路社區(在Gephi為例)
使用的演算法的優勢:沒有現有的知識圖理論需要可視化和分析集群網路
缺點:他們的準確性是高度依賴於我們正在分析的網路類型。
Reference:
關於演算法內容可以從這篇文章入手 Force Atlas : ForceAtlas2, a Continuous Graph Layout Algorithm for Handy Network Visualization Designed for the Gephi Software
Python基於共現提取《釜山行》人物關係 的教程完成:Python基於共現提取《釜山行》人物關係 - houjingyi的博客 - 博客頻道 - CSDN.NET
推薦閱讀:
TAG:Gephi |