複雜網路分析之數據準備篇

《文本分析之網路關係

上一篇文章直接給大家發了個封裝好的複雜網路分析腳本,bug比較多。也不方便自己DIY,今天咱么就條分縷析,一點點拆解。然後大家根據需要,自己DIY吧。

關係圖之原始數據

我給大家編了下面兩組原始數據,試圖畫出abcd四元素之間的關係

nodes_data = [a, b, c, d]

raw_data = [acW, aca, caE, ec, cd, dc]

我們做關係網路前的最初始數據最好就是上面這樣子,這種數據格式還是比較簡單的。

nodes_data表示節點數據,用來在圖中畫節點

raw_data中含有共現的相互關係,但是需要進一步的清理規整。

關係圖之數據格式

{source: {target: weight}}

source 起點

target 終點

weight 權重(起點到終點次數)

nodes_data = [a, b, c, d]

raw_data = [acW, aca, caE, ec, cd, dc]

nodes_data和raw_data整理成有權有向數據格式如下:

{a: {c: 4},

c: {a: 4, d: 2},

d: {c: 2}}

上面的格式即可用來畫有權有向圖,也可用到無權無向圖,還可畫有權無向圖、無權有向圖。

所以數據保存,盡量保存為有權有權有向格式。儘可能保存多的信息,請用有權有向數據格式。

後面所有的關係圖數據格式均以有權有向格式為基準。

如何實現有權有向數據格式

nodes_data = [a, b, c, d]

raw_data = [acW, aca, caE, ec, cd, dc]

||

|| ?

/

{a: {c: 4},

c: {a: 4, d: 2},

d: {c: 2}}

這裡很難,我估計我今天也說不太清除。這個只能希望大家悟性比我高,在就是運行下,編點簡單的數據實驗試驗下,發現規律,也就懂了。

networkx需要的數據格式

有了上面富有信息量的有向有權格式數據還不行,我們要再將數據微調下,才能使用networkx庫。

networkx需要啥數據格式?

data = {a:{b:1},

c:{a:2},

e:{b:3},

b:{a:4}}

nodes = {a,b,c,d,e}

networkx節點

#首先導入庫,解決中文顯示問題

import networkx as nxnimport matplotlib.pyplot as pltnfrom pylab import mplnn#解決顯示中文問題n# 指定默認字體nmpl.rcParams[font.sans-serif] = [SimHei] nn# 解決保存圖像是負號-顯示為方塊的問題nmpl.rcParams[axes.unicode_minus] = False n

可見networkx創建節點需要的數據很簡單,就是字元串或者列表(集合也可以的)。而且本身nodes數據就是列表,直接就能用到networkx構建節點中來。

但是networkx構建邊時候,要用什麼樣式的呢?

networkx無向邊

可見networkx無向邊的構建只需要元組或列表數據,但是如何從有權有向格式數據轉化為元組或者列表(集合也可以的)數據呢?

data = {a:{b:1},

c:{a:2},

e:{b:3},

b:{a:4}}

一、無權無向邊

a->b 和b->a是一條邊

data的邊的集合是{(e, b), (c, a), (a, b)}

生成無權無向邊數據的代碼:

二、 有權無向邊

a->b和b->a使得 ab共出現5次。

有權無向邊應為{(c, a, 2), (a, b, 5), (e, b, 3)}

networkx有向邊

可見networkx無向邊的構建只需要元組或列表數據,但是如何從有權有向格式數據轉化為元組或者列表(集合也可以的)數據呢?

data = {a:{b:1},

c:{a:2},

e:{b:3},

b:{a:4}}

一、無權有向邊

a->b 和b->a是一條邊

data的邊的集合是{(a, b), (b, a), (c, a), (e, b)}

生成無權有向向邊數據的代碼:

二、有權有向邊

[(a, b, 1), (c, a, 2), (e, b, 3), (b, a, 4)]

這樣更好理解些

weight = data.get(node_k).get(node_v)

其實涉及到有權的邊畫圖,比如讓邊顯示粗細以表示權重大小。這個我還沒有實現,主要是剛剛學networkx。不過今天這篇文章的探討還是很有用的。可以將數據整理成其他繪圖軟體指定格式。繪製有權圖。

寫了這麼多也不知道大家搞糊塗了沒有,反正我寫的有點暈!

公眾號原文

附有文中所有代碼的下載資源

更多內容

文本分析

python居然有情感??真的嗎??

文本分析之網路關係

自然語言處理庫之snowNLP

數說中南大學研究生感情狀況及擇偶觀

用gensim庫做文本相似性分析

基於共現發現人物關係的python實現

用python計算兩文檔相似度

神奇的python

憐香惜玉,我用python幫助辦公室文秘

逆天的量化交易分析庫-tushare

酷炫的matplotlib

開扒皮自己微信的秘密

8行代碼實現微信聊天機器人

使用Python登錄QQ郵箱發送QQ郵件

爬蟲

初識Python的GUI編程

爬蟲實戰視頻專輯

【視頻】手把手教你抓美女~

當爬蟲遭遇驗證碼,怎麼辦

知易行難

用詞雲圖解讀「於歡案」

【視頻】於歡案之網民的意見(1)?

【視頻】有了selenium,小白也可以自豪的說:「去TMD的抓包、cookie」

【視頻】快來get新技能--抓包+cookie,爬微博不再是夢

【視頻教程】用python批量抓取簡書用戶信息

爬豆瓣電影名的小案例(附視頻操作)

爬豆瓣電影名的小案例2(附視頻操作)

用Python抓取百度地圖裡的店名,地址和聯繫方式


推薦閱讀:

TAG:Python | Python入门 | 数据分析 |