複雜網路分析之數據準備篇
上一篇文章直接給大家發了個封裝好的複雜網路分析腳本,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抓取百度地圖裡的店名,地址和聯繫方式
推薦閱讀: