復雜網絡分析之數據準備篇
關系圖之原始數據
我給大家編了下面兩組原始數據,試圖畫出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 nx
- import matplotlib.pyplot as plt
- from pylab import mpl
- #解決顯示中文問題
- # 指定默認字體
- mpl.rcParams['font.sans-serif'] = ['SimHei']
- # 解決保存圖像是負號'-'顯示為方塊的問題
- mpl.rcParams['axes.unicode_minus'] = False
可見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。不過今天這篇文章的探討還是很有用的。可以將數據整理成其他繪圖軟件指定格式。繪制有權圖。
寫了這么多也不知道大家搞糊涂了沒有,反正我寫的有點暈!