复杂网络分析之数据准备篇

[复制链接]
发表于 : 2017-7-31 16:46:23 最新回复:2017-07-31 16:46:33
1294 1
建赟
建赟  专家

关系图之原始数据

我给大家编了下面两组原始数据,试图画出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}}

上面的格式即可用来画有权有向图,也可用到无权无向图,还可画有权无向图、无权有向图。

http://s4.51cto.com/wyfs02/M00/93/2F/wKiom1kJLVizDB8vAABoBi0PwE4676.jpg

http://s3.51cto.com/wyfs02/M00/93/2F/wKiom1kJLWGzJ0IiAAB0OJwlPFo829.jpg

http://s3.51cto.com/wyfs02/M00/93/2F/wKiom1kJLWyRp_qWAACKyx3FeQg154.jpg

http://s2.51cto.com/wyfs02/M02/93/2F/wKiom1kJLXmgh7WOAACU1-TkWek154.jpg

所以数据保存,尽量保存为有权有权有向格式。尽可能保存多的信息,请用有权有向数据格式。

后面所有的关系图数据格式均以有权有向格式为基准。

如何实现有权有向数据格式

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}}

这里很难,我估计我今天也说不太清除。这个只能希望大家悟性比我高,在就是运行下,编点简单的数据实验试验下,发现规律,也就懂了。

http://s4.51cto.com/wyfs02/M02/93/2E/wKioL1kJLYiQoLstAACgNP5UKP8163.jpg

networkx需要的数据格式

有了上面富有信息量的有向有权格式数据还不行,我们要再将数据微调下,才能使用networkx库。

networkx需要啥数据格式?

data = {‘a’:{‘b’:1},

‘c’:{‘a’:2},

‘e’:{‘b’:3},

‘b’:{‘a’:4}}

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

networkx节点

#首先导入库,解决中文显示问题

  1. import networkx as nx 
  2. import matplotlib.pyplot as plt 
  3. from pylab import mpl 
  4.  
  5. #解决显示中文问题 
  6. # 指定默认字体 
  7. mpl.rcParams['font.sans-serif'] = ['SimHei']    
  8.  
  9. # 解决保存图像是负号'-'显示为方块的问题 
  10. mpl.rcParams['axes.unicode_minus'] = False 

http://s2.51cto.com/wyfs02/M00/93/2E/wKioL1kJLZXyVs0RAABrVcwtVtU625.jpg

http://s4.51cto.com/wyfs02/M02/93/30/wKiom1kJLwfTFiN7AABrazl04Lw249.jpg

http://s3.51cto.com/wyfs02/M00/93/30/wKiom1kJLxHzXFSOAAB5reMlbxM972.jpg

可见networkx创建节点需要的数据很简单,就是 字符串或者列表(集合也可以的) 。而且本身nodes数据就是列表,直接就能用到networkx构建节点中来。

但是networkx构建边时候,要用什么样式的呢?

networkx无向边

http://s4.51cto.com/wyfs02/M02/93/2E/wKioL1kJLx3jbObKAABhqWX2mXo160.jpg

http://s2.51cto.com/wyfs02/M00/93/2E/wKioL1kJLyizGLNJAAB238ok9p8605.jpg

http://s3.51cto.com/wyfs02/M01/93/2E/wKioL1kJLzWAjfj1AABfaOKOwzA644.jpg

可见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’)}

生成无权无向边数据的代码:

http://s2.51cto.com/wyfs02/M01/93/2E/wKioL1kJLiOiv0shAACXMpCPngA257.jpg

二、 有权无向边

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

有权无向边应为{(‘c’, ‘a’, 2), (‘a’, ‘b’, 5), (‘e’, ‘b’, 3)}

http://s3.51cto.com/wyfs02/M01/93/30/wKiom1kJLhfAR-gHAAC1ujRIl7E887.jpg

networkx有向边

http://s4.51cto.com/wyfs02/M00/93/2E/wKioL1kJLgqzFHZ_AABdSuYqnic346.jpg

http://s1.51cto.com/wyfs02/M00/93/30/wKiom1kJLfuTruHdAABpryeleW8072.jpg

可见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’)}

生成无权有向向边数据的代码:

http://s4.51cto.com/wyfs02/M02/93/2E/wKioL1kJLd_wjQPaAAEDTQSBk7E775.jpg

二、有权有向边

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

http://s3.51cto.com/wyfs02/M01/93/2E/wKioL1kJLdLw0-FeAADPlDmmO1U161.jpg

这样更好理解些

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

其实涉及到有权的边画图,比如让边显示粗细以表示权重大小。这个我还没有实现,主要是刚刚学networkx。不过今天这篇文章的探讨还是很有用的。可以将数据整理成其他绘图软件指定格式。绘制有权图。

写了这么多也不知道大家搞糊涂了没有,反正我写的有点晕!


  • x
  • 常规:

点评 回复

跳转到指定楼层
建赟
建赟  专家 发表于 2017-7-31 16:46:33 已赞(0) 赞(0)

顶一个!
  • x
  • 常规:

点评 回复

发表回复
您需要登录后才可以回帖 登录 | 注册

警告 内容安全提示:尊敬的用户您好,为了保障您、社区及第三方的合法权益,请勿发布可能给各方带来法律风险的内容,包括但不限于政治敏感内容,涉黄赌毒内容,泄露、侵犯他人商业秘密的内容,侵犯他人商标、版本、专利等知识产权的内容,侵犯个人隐私的内容等。也请勿向他人共享您的账号及密码,通过您的账号执行的所有操作,将视同您本人的行为,由您本人承担操作后果。详情请参看“隐私声明
如果附件按钮无法使用,请将Adobe Flash Player 更新到最新版本!
登录参与交流分享

登录参与交流分享

登录