天天看點

複雜網絡分析之資料準備篇

複雜網絡分析之資料準備篇

關系圖之原始資料

我給大家編了下面兩組原始資料,試圖畫出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和raw_data整理成有權有向資料格式如下:

{‘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 無向邊 的建構隻需要元組或清單資料,但是如何從 有權有向格式資料 轉化為 元組 或者 清單(集合也可以的) 資料呢?

一、無權無向邊

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’), (‘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。不過今天這篇文章的探讨還是很有用的。可以将資料整理成其他繪圖軟體指定格式。繪制有權圖。

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

本文作者:鄧旭東hit

來源:51cto

繼續閱讀