利用GooSeeker分詞、Ucient和NetDraw進行社會網路分析
來自專欄學習python網路爬蟲建設智慧時空資料庫
社會網路是一個關係與關係之間的網路,進行社會網路分析,我們要弄清楚的是網路中包含哪些具有相互聯繫的節點,這些節點之間又具有怎樣的關係,以及每個節點在整個網路中佔有何種地位。
而有關這方面節點的數據都是在做關係圖之前需要準備好的。
本文包含兩個案例,第一個案例詳細列出步驟便於理解,第二個案例為演練。
第一個案例中用到的軟體有Ucinet和NetDraw(文末提供軟體安裝包),其用途為:
- Ucinet:輸出給NetDraw分析需要的矩陣數據
- NetDraw:繪製社會網路
第二個案例中用到GooSeeker分詞軟體,主要目的是生成詞頻統計表。
案例一:社交網分析
首先,我自己在Excel準備了一份簡單的數據。
這份數據很好理解,第一行和第一列代表人物,若他們之間有聯繫,那麼人物A與人物B對應的單元格數字為1,無聯繫則為0。比如:張三和王五、陳七、楊九有聯繫,與其他人無聯繫。
先用Ucinet輸出用於NetDraw分析的矩陣數據,打開Ucinet,選擇數據>輸入>Excel矩陣。
輸入文件路徑選擇前面準備的Excel共現矩陣表,其他可不改動,選擇確定。
接著Ucinet會進行處理,彈出處理日誌,並在與輸入相同的路徑中輸出.##h矩陣文件。
數據準備完畢,打開NetDraw準備繪製,選擇file>open>ucinet dataset>network。
在彈窗中選擇剛剛Ucinet生成的.##h矩陣文件,點擊OK。
社會網路圖繪製完畢。
然後NetDraw會進行繪製,繪製的社會網路圖如下:
這個數據比較簡單,通過上圖可以直接看出楊九是核心人物,如果數據量較大較複雜的話,肉眼是比較難看出來的,可以通過節點中心性分析來進行研究,讓NetDraw繪製出節點大小與中心度正相關的社會網路圖。
在NetDraw選擇analysis>centrality measures。
然後在彈出界面的set node size by下選擇degree,點擊ok。
接著NetDraw重繪製,結果圖如下:
從上圖來看,楊九的中心節點大小最大,與最多的人相聯繫,可以將他理解為該社交網的中心人物。
度中心性(Degree Centrality)是在網路分析中刻畫節點中心性(Centrality)的最直接度量指標。一個節點的節點度越大就意味著這個節點的度中心性越高,該節點在網路中就越重要。
對度中心性計算原理感興趣的同學可以自行去了解,從結論來說,節點越大就意味著越重要。另外,度中心性只是衡量節點中心性的指標之一,還有三個衡量節點中心性的主要指標有接近中心性(Closeness Centrality)、中介中心性/中間中心性(Between Centrality)和特徵向量中心性(Eigenvector Centrality)。這裡就不進行贅述了。
案例二:微博研究主題共詞分析
前面我的一篇文章《畢業論文寫什麼——微博數據挖掘相關的論文》其中有一塊對微博數據挖掘相關論文的研究主題進行分析,下面就詳細講解一下對微博主題進行共詞分析的具體操作方法。
數據:知網微博數據挖掘的論文-「論文主題」欄位數據
數據進行共享了,有興趣的話可以自己試驗一下。
先用GooSeeker分詞軟體提取詞頻統計表
進入GooSeeker分詞軟體,新建任務,將實驗數據導入進去。
如下部分數據截圖所示,每篇論文主題關鍵詞之間其實已經通過空格進行分隔了,所以我希望分詞軟體能夠以空格為間隔,將這些關鍵詞分離出來。但不管通過哪個分詞軟體,它們本身是有一個詞庫的,如果通過軟體自身詞庫來切詞的話,切詞的粒度會更精細,這樣就破壞了一些詞語的完整性。比如「社會網路分析」可能會切分成「社會」、「社會網路」、「分析」等詞語,因為在這個分析場景下,主要是研究微博挖掘相關論文研究的主題,所以我更希望不進行切分,直接保留為「社會網路分析」。
用分詞軟體自身的切詞不能達到我的切詞目的,所以我事先用Excel的分列功能,將這些關鍵詞分離出來。部分截圖如下圖所示。
回到GooSeeker分詞軟體,第一步「導入數據」之後,跳過第二步「篩選詞語」,因為後面我的詞頻統計結果是基於我剛剛通過Excel分列得到的詞語, 而GooSeeker分詞軟體是支持自定義詞語手動補充的。所以直接來到第三步「選詞結果」,點擊「添加詞語」
將Excel分列去重後的關鍵詞導入。
然後點擊「下載」,將結果文件導出。
結果文件中,表名為「選詞結果」是後面我們將用到的。
用Excel構建共詞矩陣表
第一個案例的共詞矩陣是自己隨機造的一個,現在第二個案例數據量較大,分出的詞語有四千多個,要形成共詞矩陣,我們要藉助Excel的公式來進行計算了。
先說下公式的原理,如下圖所示,左邊為樣例數據,右上為共詞矩陣,假設需要構造矩陣的片語有(「微時代」、「媒體」、「文化」、「微博」、「社交網路」、「傳播」),片語行和列相交的單元格填入公式
(=SUMIFS($B:$B,數據!$A:$A,"*"&$C2&"*",$A:$A,"*"&D$1&"*")),公式理解:在A列表查找,看是否包含C2(微時代)和D1(微時代),如果有就統計該包含這兩個字元所在行的另外一列的數進行求和。
回到案例二,新建一個Excel,將詞語粘貼至第一行和第一列,詞語相交的單元格套用剛剛的公式,其他單元格自動拉公式,然後讓Excel自行運行計算即可。共詞矩陣部分結果如下圖所示。
合併同義詞和提取高頻詞
有了共詞矩陣表之後,不要著急將數據導入著手繪製。要知道這是一個4349*4349的共詞矩陣,可以設想,直接導入Ucinet和NetDraw繪製出來就是一團黑影,最重要的是,沒有必要將全部矩陣導入,因為很多詞語是沒有價值的,因為有些詞語作為論文的主題可能就少數出現過。所以在繪圖之前,先進行合併同義詞和提取高頻詞。
1) 合併同義詞
同義詞即詞語含義相同的,比如「微博」和「微博客」,因為案例而的目的是論文研究主題,所以先創建一個同義片語表。部分截圖如下:
根據同義片語表,將共詞矩陣表中的同義詞進行合併計算處理,將同義片語中每個詞的數字求和作為一組同義片語的最終結果值,如下圖所示(部分截圖):
2) 提取高頻詞
用同樣的方法將同義詞處理完畢後,同時用根據同義片語表更新最開始在GooSeeker分詞軟體下載的詞頻統計表。
接著根據詞頻統計表將高頻詞提取出來,本次實驗我提取了前100個,根據這100個高頻詞形成100*100的共詞矩陣表。
將共詞矩陣表導入Ucinet
完成上面的步驟之後就可以開始導入數據繪製了。第一個案例是通過Ucinet導入共詞矩陣Excel表,下面用另一種方法導入,就是直接複製。點擊Ucinet第二個表格圖標,如下圖紅框所示。
彈出一個表格,然後將在上一步Excel里完成的共詞矩陣表CRTL+C、CRTL+V直接複製進去,結果如下圖所示。記得點擊保存一份,一方面拿來接下來繪圖,另一方面防止以後調整數據的時候需要。
通過Netdraw繪製微博主題關係圖
最後打開NetDraw打開.##h文件準備繪製並進行度中心性分析,不知道怎麼操作倒回去看案例一的操作過程。
繪製結果圖如下所示:
從NetDraw生成的可視化關鍵詞網路結構圖可以看出,「社交網路、爬蟲、輿情、話題、傳播、推薦、影響力、營銷、媒體」等關鍵詞的中心度較高,這些是人們比較關注的微博研究主題,處於邊緣位置主題表示對其研究的關注度較低,但從中可以看出微博數據挖掘多元話的研究方向。
假如說跳過前面合併同義詞的步驟,並且我只選取詞頻為前100的詞語形成共詞矩陣表,繪製的結果圖如下,可以看到密密密麻麻的一片。所以如果既不進行同義詞合併也不進行詞頻提取,那繪製出來的結果圖就可想而知了。
拓展—詞雲圖製作
我用PPT的插件Pro Word Cloud製作中文詞雲,使用方法可以參看我原來的文章《用PPT自帶的Pro Word Cloud製作中文詞雲》。
結果圖如下:
微博數據挖掘的關鍵詞雲圖一目了然,最後吐槽一下,詞雲圖比NetDraw繪製的圖好看多了。當然,分析目的不一樣,用的工具自然不同。
在分析的過程中,數據的準備和處理是最花時間的,工欲善其事,必先利其器。有分析思路固然重要,利用好的工具進行數據處理則能夠事半功倍。
總的來說,上面兩個案例都比較簡單,本篇文章重點講解3個工具的操作過程,大家可以找一些其他數據進行分析。
常見問題:
1, Excel矩陣數據可以直接導入NetDraw中繪製嗎?
NetDraw支持兩種外部數據導入方式,一是導入描述有節點信息的記事本文件,另外一種是導入當前使用較為普遍的社會網路分析軟體輸出的相應格式的文件(如:Ucinet、Pajek)。
我所使用的NetDraw版本不支持Excel文件直接導入,所以上面的案例中要先通過Ucinet輸出用於NetDraw分析的矩陣數據。
2, 社會網路圖的儲存格式?
繪製完成的社會網路圖,可以選擇兩種方式輸出,一是以圖片的形式導出,可以選擇jpeg、emf、bmp等三種圖元文件格式,無法再修改。
另一種是以可以再修改的文件格式保存。
3, 怎麼在Ucinet中查看之前保存的共詞矩陣?
點擊Ucinet第二個表格圖標,在彈出的窗口中選擇「文件>打開」,選擇之前保存的.##h數據集文件即可。
軟體安裝包:
- Ucinet:點擊下載安裝包
- NetDraw: 點擊下載安裝包
參考文獻:
- 社會網路分析與可視化工具NetDraW的應用案例分析
推薦閱讀:
※Data Science for Business 是怎樣一本書?
※1.1 商業數據分析筆記(持續更新。。。)
※2017年度學習計劃之一起快樂學習數據分析
※2.3 R商業分析3:廣告投入是怎樣提高新用戶數的(嶺回歸及主成分回歸)