python做社会网络分析_利用GooSeeker分词、Ucient和NetDraw进行社会网络分析
社會網(wǎng)絡(luò)是一個關(guān)系與關(guān)系之間的網(wǎng)絡(luò),進(jìn)行社會網(wǎng)絡(luò)分析,我們要弄清楚的是網(wǎng)絡(luò)中包含哪些具有相互聯(lián)系的節(jié)點(diǎn),這些節(jié)點(diǎn)之間又具有怎樣的關(guān)系,以及每個節(jié)點(diǎn)在整個網(wǎng)絡(luò)中占有何種地位。
而有關(guān)這方面節(jié)點(diǎn)的數(shù)據(jù)都是在做關(guān)系圖之前需要準(zhǔn)備好的。
本文包含兩個案例,第一個案例詳細(xì)列出步驟便于理解,第二個案例為演練。
第一個案例中用到的軟件有Ucinet和NetDraw(文末提供軟件安裝包),其用途為:
Ucinet:輸出給NetDraw分析需要的矩陣數(shù)據(jù)
NetDraw:繪制社會網(wǎng)絡(luò)
第二個案例中用到GooSeeker分詞軟件,主要目的是生成詞頻統(tǒng)計表。
案例一:社交網(wǎng)分析
首先,我自己在Excel準(zhǔn)備了一份簡單的數(shù)據(jù)。
這份數(shù)據(jù)很好理解,第一行和第一列代表人物,若他們之間有聯(lián)系,那么人物A與人物B對應(yīng)的單元格數(shù)字為1,無聯(lián)系則為0。比如:張三和王五、陳七、楊九有聯(lián)系,與其他人無聯(lián)系。
先用Ucinet輸出用于NetDraw分析的矩陣數(shù)據(jù),打開Ucinet,選擇數(shù)據(jù)>輸入>Excel矩陣。
輸入文件路徑選擇前面準(zhǔn)備的Excel共現(xiàn)矩陣表,其他可不改動,選擇確定。
接著Ucinet會進(jìn)行處理,彈出處理日志,并在與輸入相同的路徑中輸出.##h矩陣文件。
數(shù)據(jù)準(zhǔn)備完畢,打開NetDraw準(zhǔn)備繪制,選擇file>open>ucinet dataset>network。
在彈窗中選擇剛剛Ucinet生成的.##h矩陣文件,點(diǎn)擊OK。
社會網(wǎng)絡(luò)圖繪制完畢。
然后NetDraw會進(jìn)行繪制,繪制的社會網(wǎng)絡(luò)圖如下:
這個數(shù)據(jù)比較簡單,通過上圖可以直接看出楊九是核心人物,如果數(shù)據(jù)量較大較復(fù)雜的話,肉眼是比較難看出來的,可以通過節(jié)點(diǎn)中心性分析來進(jìn)行研究,讓NetDraw繪制出節(jié)點(diǎn)大小與中心度正相關(guān)的社會網(wǎng)絡(luò)圖。
在NetDraw選擇analysis>centrality measures。
然后在彈出界面的set node size by下選擇degree,點(diǎn)擊ok。
接著NetDraw重繪制,結(jié)果圖如下:
從上圖來看,楊九的中心節(jié)點(diǎn)大小最大,與最多的人相聯(lián)系,可以將他理解為該社交網(wǎng)的中心人物。
度中心性(Degree Centrality)是在網(wǎng)絡(luò)分析中刻畫節(jié)點(diǎn)中心性(Centrality)的最直接度量指標(biāo)。一個節(jié)點(diǎn)的節(jié)點(diǎn)度越大就意味著這個節(jié)點(diǎn)的度中心性越高,該節(jié)點(diǎn)在網(wǎng)絡(luò)中就越重要。
對度中心性計算原理感興趣的同學(xué)可以自行去了解,從結(jié)論來說,節(jié)點(diǎn)越大就意味著越重要。另外,度中心性只是衡量節(jié)點(diǎn)中心性的指標(biāo)之一,還有三個衡量節(jié)點(diǎn)中心性的主要指標(biāo)有接近中心性(Closeness Centrality)、中介中心性/中間中心性(Between Centrality)和特征向量中心性(Eigenvector Centrality)。這里就不進(jìn)行贅述了。
案例二:微博研究主題共詞分析
前面我的一篇文章《 畢業(yè)論文寫什么——微博數(shù)據(jù)挖掘相關(guān)的論文 》其中有一塊對微博數(shù)據(jù)挖掘相關(guān)論文的研究主題進(jìn)行分析,下面就詳細(xì)講解一下對微博主題進(jìn)行共詞分析的具體操作方法。
數(shù)據(jù)進(jìn)行共享了,有興趣的話可以自己試驗一下。
先用GooSeeker分詞軟件提取詞頻統(tǒng)計表
進(jìn)入GooSeeker分詞軟件,新建任務(wù),將實驗數(shù)據(jù)導(dǎo)入進(jìn)去。
如下部分?jǐn)?shù)據(jù)截圖所示,每篇論文主題關(guān)鍵詞之間其實已經(jīng)通過空格進(jìn)行分隔了,所以我希望分詞軟件能夠以空格為間隔,將這些關(guān)鍵詞分離出來。但不管通過哪個分詞軟件,它們本身是有一個詞庫的,如果通過軟件自身詞庫來切詞的話,切詞的粒度會更精細(xì),這樣就破壞了一些詞語的完整性。比如“社會網(wǎng)絡(luò)分析”可能會切分成“社會”、“社會網(wǎng)絡(luò)”、“分析”等詞語,因為在這個分析場景下,主要是研究微博挖掘相關(guān)論文研究的主題,所以我更希望不進(jìn)行切分,直接保留為“社會網(wǎng)絡(luò)分析”。
用分詞軟件自身的切詞不能達(dá)到我的切詞目的,所以我事先用Excel的分列功能,將這些關(guān)鍵詞分離出來。部分截圖如下圖所示。
回到GooSeeker分詞軟件,第一步“導(dǎo)入數(shù)據(jù)”之后,跳過第二步“篩選詞語”,因為后面我的詞頻統(tǒng)計結(jié)果是基于我剛剛通過Excel分列得到的詞語, 而GooSeeker分詞軟件是支持自定義詞語手動補(bǔ)充的。所以直接來到第三步“選詞結(jié)果”,點(diǎn)擊“添加詞語”
將Excel分列去重后的關(guān)鍵詞導(dǎo)入。
然后點(diǎn)擊“下載”,將結(jié)果文件導(dǎo)出。
結(jié)果文件中,表名為“選詞結(jié)果”是后面我們將用到的。
用Excel構(gòu)建共詞矩陣表
第一個案例的共詞矩陣是自己隨機(jī)造的一個,現(xiàn)在第二個案例數(shù)據(jù)量較大,分出的詞語有四千多個,要形成共詞矩陣,我們要借助Excel的公式來進(jìn)行計算了。
先說下公式的原理,如下圖所示,左邊為樣例數(shù)據(jù),右上為共詞矩陣,假設(shè)需要構(gòu)造矩陣的詞組有(“微時代”、“媒體”、“文化”、“微博”、“社交網(wǎng)絡(luò)”、“傳播”),詞組行和列相交的單元格填入公式
(=SUMIFS($B:$B,數(shù)據(jù)!$A:$A,"*"&$C2&"*",$A:$A,"*"&D$1&"*")),公式理解:在A列表查找,看是否包含C2(微時代)和D1(微時代),如果有就統(tǒng)計該包含這兩個字符所在行的另外一列的數(shù)進(jìn)行求和。
回到案例二,新建一個Excel,將詞語粘貼至第一行和第一列,詞語相交的單元格套用剛剛的公式,其他單元格自動拉公式,然后讓Excel自行運(yùn)行計算即可。共詞矩陣部分結(jié)果如下圖所示。
合并同義詞和提取高頻詞
有了共詞矩陣表之后,不要著急將數(shù)據(jù)導(dǎo)入著手繪制。要知道這是一個4349*4349的共詞矩陣,可以設(shè)想,直接導(dǎo)入Ucinet和NetDraw繪制出來就是一團(tuán)黑影,最重要的是,沒有必要將全部矩陣導(dǎo)入,因為很多詞語是沒有價值的,因為有些詞語作為論文的主題可能就少數(shù)出現(xiàn)過。所以在繪圖之前,先進(jìn)行合并同義詞和提取高頻詞。
1) 合并同義詞
同義詞即詞語含義相同的,比如“微博”和“微博客”,因為案例而的目的是論文研究主題,所以先創(chuàng)建一個同義詞組表。部分截圖如下:
根據(jù)同義詞組表,將共詞矩陣表中的同義詞進(jìn)行合并計算處理,將同義詞組中每個詞的數(shù)字求和作為一組同義詞組的最終結(jié)果值,如下圖所示(部分截圖):
2) 提取高頻詞
用同樣的方法將同義詞處理完畢后,同時用根據(jù)同義詞組表更新最開始在GooSeeker分詞軟件下載的詞頻統(tǒng)計表。
接著根據(jù)詞頻統(tǒng)計表將高頻詞提取出來,本次實驗我提取了前100個,根據(jù)這100個高頻詞形成100*100的共詞矩陣表。
將共詞矩陣表導(dǎo)入Ucinet
完成上面的步驟之后就可以開始導(dǎo)入數(shù)據(jù)繪制了。第一個案例是通過Ucinet導(dǎo)入共詞矩陣Excel表,下面用另一種方法導(dǎo)入,就是直接復(fù)制。點(diǎn)擊Ucinet第二個表格圖標(biāo),如下圖紅框所示。
彈出一個表格,然后將在上一步Excel里完成的共詞矩陣表CRTL+C、CRTL+V直接復(fù)制進(jìn)去,結(jié)果如下圖所示。記得點(diǎn)擊保存一份,一方面拿來接下來繪圖,另一方面防止以后調(diào)整數(shù)據(jù)的時候需要。
通過Netdraw繪制微博主題關(guān)系圖
最后打開NetDraw打開.##h文件準(zhǔn)備繪制并進(jìn)行度中心性分析,不知道怎么操作倒回去看案例一的操作過程。
繪制結(jié)果圖如下所示:
從NetDraw生成的可視化關(guān)鍵詞網(wǎng)絡(luò)結(jié)構(gòu)圖可以看出,“社交網(wǎng)絡(luò)、爬蟲、輿情、話題、傳播、推薦、影響力、營銷、媒體”等關(guān)鍵詞的中心度較高,這些是人們比較關(guān)注的微博研究主題,處于邊緣位置主題表示對其研究的關(guān)注度較低,但從中可以看出微博數(shù)據(jù)挖掘多元話的研究方向。
假如說跳過前面合并同義詞的步驟,并且我只選取詞頻為前100的詞語形成共詞矩陣表,繪制的結(jié)果圖如下,可以看到密密密麻麻的一片。所以如果既不進(jìn)行同義詞合并也不進(jìn)行詞頻提取,那繪制出來的結(jié)果圖就可想而知了。
拓展—詞云圖制作
我用PPT的插件Pro Word Cloud制作中文詞云,使用方法可以參看我原來的文章《 用PPT自帶的Pro Word Cloud制作中文詞云 》。
結(jié)果圖如下:
微博數(shù)據(jù)挖掘的關(guān)鍵詞云圖一目了然,最后吐槽一下,詞云圖比NetDraw繪制的圖好看多了。當(dāng)然,分析目的不一樣,用的工具自然不同。
在分析的過程中,數(shù)據(jù)的準(zhǔn)備和處理是最花時間的,工欲善其事,必先利其器。有分析思路固然重要,利用好的工具進(jìn)行數(shù)據(jù)處理則能夠事半功倍。
總的來說,上面兩個案例都比較簡單,本篇文章重點(diǎn)講解3個工具的操作過程,大家可以找一些其他數(shù)據(jù)進(jìn)行分析。
常見問題:
1, Excel矩陣數(shù)據(jù)可以直接導(dǎo)入NetDraw中繪制嗎?
NetDraw支持兩種外部數(shù)據(jù)導(dǎo)入方式,一是導(dǎo)入描述有節(jié)點(diǎn)信息的記事本文件,另外一種是導(dǎo)入當(dāng)前使用較為普遍的社會網(wǎng)絡(luò)分析軟件輸出的相應(yīng)格式的文件(如:Ucinet、Pajek)。
我所使用的NetDraw版本不支持Excel文件直接導(dǎo)入,所以上面的案例中要先通過Ucinet輸出用于NetDraw分析的矩陣數(shù)據(jù)。
2, 社會網(wǎng)絡(luò)圖的儲存格式?
繪制完成的社會網(wǎng)絡(luò)圖,可以選擇兩種方式輸出,一是以圖片的形式導(dǎo)出,可以選擇jpeg、emf、bmp等三種圖元文件格式,無法再修改。
另一種是以可以再修改的文件格式保存。
3, 怎么在Ucinet中查看之前保存的共詞矩陣?
點(diǎn)擊Ucinet第二個表格圖標(biāo),在彈出的窗口中選擇“文件>打開”,選擇之前保存的.##h數(shù)據(jù)集文件即可。
軟件安裝包:
Ucinet:點(diǎn)擊下載安裝包
NetDraw:點(diǎn)擊下載安裝包
參考文獻(xiàn):
總結(jié)
以上是生活随笔為你收集整理的python做社会网络分析_利用GooSeeker分词、Ucient和NetDraw进行社会网络分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式系统的那些事儿(六) - SOA架
- 下一篇: python简单实战项目:《冰与火之歌1