使用Gephi绘制动态网络的三种方法
来源:互联网 发布:文字照片软件 编辑:程序博客网 时间:2024/06/05 19:57
作者:JUDGE_MENT
邮箱:gao19920804@126.com
CSDN博客:http://blog.csdn.net/sinat_23137713
最后编辑时间:2016.12.5 V1.1
声明:
1)该资料结合官方文档及网上大牛的博客进行撰写,如有参考会在最后列出引用列表。
2)本文仅供学术交流,非商用。如果不小心侵犯了大家的利益,还望海涵,并联系博主删除。
3)本人才疏学浅,难免出错,还望各位大牛悉心指正。
4)转载请注明出处。
一、 纵向网络/动态网络是一种包括时间信息的简单网络。你可以想象一下关你的朋友关系网络;节点数和连接数随着时间的增长而增长,属性值也随之变化。如果每个人都有一个"孩子数"属性,这个属性也是可能会增长的《o(* ̄︶ ̄*)o, 还不去生孩子》。我们称之为动态属性,他们的值是与根据特定的时间段相关的。
纵向网络
为了使用gephi对这些特征进行建模,我们使用区间的概念来定义一段时间。有两种基本的方式来对纵向网络进行建模,一种是每个网络集合都有一个特定的时间点(一天,一个月,…),或是网络片段中的每个元素都有其存在时间。这可以分别看作是离散时间与连续时间的表示方式。本文中我们选择第二种方式,因为他更加灵活。
举例来说:
如果我们有一个三年包含三个点的网络。下面左边的是方法1(网络集合)在不同的三个时间点。右边是相应的方法2(每个元素)表示使用间隔。(右边n1的右区间是开的,因为这个点只在2008有,2009就没了)
在Gephi中你可以在“数据实验室”中看到时间区间是如何被创建的。如果网络是纵向的,将会有一个时间区间列。这列给出了元素的应该存在的时间区间。你可以通过在数据实验室配置对话框,开启展示时间区间图表选项,这样你就可以可视化了。
在Gephi中你可以在“数据实验室”中看到时间区间是如何被创建的。如果网络是纵向的,将会有一个时间区间列。这列给出了元素的应该存在的时间区间。你可以通过在数据实验室配置对话框,开启展示时间区间图表选项,这样你就可以可视化了。
二、 导入动态GEXF文件
你在GEXF中增加开始和结束的位置就是设置一个点或边的开始或消失。
1、基本的例子:
<?xml version="1.0" encoding="UTF-8"?><gexfxmlns="http://www.gexf.net/1.1draft" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.1draft http://www.gexf.net/1.1draft/gexf.xsd" version="1.1"> <graphmode="dynamic"defaultedgetype="directed"> <nodes> <nodeid="n1"label="Node 1"start="2007"endopen="2009" /> <nodeid="n2"label="Node 2"start="2007"end="2009" /> <nodeid="n3"label="Node 3"start="2008"end="2009" /> </nodes> <edges> <edgesource="n1"target="n2" /> <edgesource="n1"target="n3"start="2008"/> <edgesource="n3"target="n2"start="2008"endopen="2009"/> </edges> </graph></gexf>注意以下几点:
1. 我们将图模式设为“dynamic”,这是必须的,因为GEXF格式也可以展现静态图。
2. 对于闭区间的就用start和end;如果是开区间的就用startopen和endopen。
3. 不强制一定要对于每一个元素都设定一个开始和结束时间。如果不设置自动创建一个[-infinity,+infinity]这么个时间间隔,从正无穷到负无穷。如果只有一个边界被定义了,像上诉代码第二条边似的,那么将会自动变成[2009,+inf].
2、动态属性
<gexfxmlns="http://www.gexf.net/1.1draft" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.1draft http://www.gexf.net/1.1draft/gexf.xsd" version="1.1"> <graphmode="dynamic"defaultedgetype="directed"> <attributesclass="node"mode="dynamic"> <attributeid="price"title="Price"type="float"/> </attributes> <nodes> <nodeid="n1"label="Node 1"start="2007"endopen="2009" > <attvalues> <attvaluefor="price"value="25.5"start="2007"end="2008"/> <attvaluefor="price"value="42.5"start="2008"/> </attvalues> </node> <nodeid="n2"label="Node 2"start="2007"end="2009" > <attvalues> <attvaluefor="price"value="12"start="2008"/> </attvalues> </node> <nodeid="n3"label="Node 3"start="2008"end="2009" > <attvalues> <attvaluefor="price"value="40.5"start="2008"end="2009" /> </attvalues> </node> </nodes> <edges> <edgesource="n1"target="n2" /> <edgesource="n1"target="n3"start="2008"/> <edgesource="n3"target="n2"start="2008"endopen="2009"/> </edges> </graph></gexf>attvalues:属性值
注意以下几点:
不强制到处设置属性值,为了防止没值,我们可以使用默认值。
对于节点n2,他的价格“12”从2008年开始,但是没有定义结束时间,这会自动调整为[2008,+infinity]。
3. 动态权值
方法就是定义边的时候加上“weight”。然后,使用“attvalue”来设置weight的变化。跟节点属性那一样。
<attributes class="edge" mode="dynamic"> <attribute id="weight" title="Weight" type="float"/></attributes>
三. 时间列转换为动态网络
想象你和一些朋友的社交网络。每个节点都是一个朋友,一个属性列是你遇到一个朋友的日期。问题是我们怎样才能将这个列转换成一个动态的时间间隔,然后通过时间线探索整个网络。
步骤1:点击数据实验室-合并列
注意,开区间似乎已经被弃用了
步骤3:选择哪列是开始,选择哪列是结束。如果没有结束时间,就留空。如果列是数字化的(整数,浮点型,长浮点型),那么就选择“parse numbers”。如果数据是string形式的,他们也可以被解析转换为时间间隔。我们的“fiist met”列就是一年中的某一天,就是一个数字而已。四. 使用时间框架,导入多个静态的GEXF充当动态的GEXF
注意,这个方法的实现仍然处于试验阶段,而且可能不会在所有的情况下工作。一定要确认以下几点:
- 不同文件中,节点标识符完全要一样(至少标签要一致)。
- GEXF文件中设置为static
- gephi工作区要保持干净,不要有别的图
- 属性列在所有GEXF中都是一样的
1. 数据集
假如说我们有三个静态GEXF,分别是2007年的GEXF,2008年的GEXF和2009年的GEXF。2007年的静态网络如下,注意价格属性:
<?xml version="1.0" encoding="UTF-8"?><gexfxmlns="http://www.gexf.net/1.1draft"version="1.1"> <graphmode="static"defaultedgetype="directed"> <attributesclass="node"type="static"> <attributeid="price"title="Price"type="int"/> </attributes> <nodes> <nodeid="1"label="Node 1"> <attvaluefor="price"value="12"/> </node> <nodeid="2"label="Node 2"> <attvaluefor="price"value="8"/> </node> <nodeid="3"label="Node 3"> <attvaluefor="price"value="5"/> </node> </nodes> <edges> <edgesource="1"target="2"weight="1" /> <edgesource="1"target="3"weight="2" /> </edges> </graph></gexf>2008年的静态网络如下,节点“3”消失了,一个节点出现“4”。价格和边缘的权重也已经改变了。
<?xml version="1.0" encoding="UTF-8"?><gexfxmlns="http://www.gexf.net/1.1draft"version="1.1"> <graphmode="static"defaultedgetype="directed"> <attributesclass="node"type="static"> <attributeid="price"title="Price"type="int"/> </attributes> <nodes> <nodeid="1"label="Node 1"> <attvaluefor="price"value="15"/> </node> <nodeid="2"label="Node 2"> <attvaluefor="price"value="6"/> </node> <nodeid="4"label="Node 4"> <attvaluefor="price"value="8"/> </node> </nodes> <edges> <edgesource="1"target="2"weight="4" /> <edgesource="1"target="4"weight="3" /> <edgesource="2"target="4"weight="1" /> </edges> </graph></gexf>静态网络在2009年, 节点“3”回来了,节点“2”消失了, 并且再次改变价格。
<?xml version="1.0" encoding="UTF-8"?><gexfxmlns="http://www.gexf.net/1.1draft"version="1.1"> <graphmode="static"defaultedgetype="directed"> <attributesclass="node"type="static"> <attributeid="price"title="Price"type="int"/> </attributes> <nodes> <nodeid="1"label="Node 1"> <attvaluefor="price"value="10"/> </node> <nodeid="3"label="Node 3"> <attvaluefor="price"value="3"/> </node> <nodeid="4"label="Node 4"> <attvaluefor="price"value="12"/> </node> </nodes> <edges> <edgesource="1"target="3"weight="5" /> </edges> </graph></gexf>
2. 导入Gephi
步骤1:导入第一个GEXF文件,并在导入报告是选择Time Frame,单击OK。这将显示一个设置对话框。
步骤2:选择一个日期或一个数字作为时间。默认选择是一个数字,这里我们把2007年输入。单击OK,文件导入。
步骤3: 现在你重复步骤2。只是相应的时间,第二个文件选择2008、..2009等。
结果就会得到在Gephi里出现的纵向/动态网络,节点和边有他们相应的时间段。同样的,所有属性都是动态属性。数据集中的“价格”属性是DYNAMIC_INTEGER格式的列。此外,边的权重也是动态的。
2 0
- 使用Gephi绘制动态网络的三种方法
- 推荐一款网络可视化的工具gephi
- OpengGL绘制立方体的三种方法
- iOS 绘制虚线的三种方法
- iOS 绘制虚线的三种方法
- 修改Gephi最大内存的方法
- 利用python、Gephi绘制人人的社交网络图
- 使用networkx导出关系网络并用gephi进行简单分析
- 使用Java解析网络数据流的三种特殊方法
- 网络拓扑结构的绘制(三)
- 如何用两种不同的方法动态绘制饼状图
- opengl es绘制四边形的三种方法
- NetworkX学习笔记-4-NetworkX输出Gephi文件的方法
- NetworkX学习笔记-5-NetworkX输出Gephi文件的方法
- [iOS 绘制虚线] 转: iOS 绘制虚线的三种方法
- 【复杂网络系列】gephi绘图
- 动态加载CSS的三种方法
- 创建动态代理的三种方法
- 二重指针:结构体指针的指针A** b,其成员变量的调用
- 组合与继承
- NFS(network file system)网络文件系统1
- 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
- Ubuntu忘记root密码恢复方法
- 使用Gephi绘制动态网络的三种方法
- 加油站--只要总汽油量要大于总的消耗量,那么肯定是有解的--不用构成环来判断。
- sort之结构体排序1
- maven 教程五 将项目发布到私服
- python xpath 语法
- 向指定URL发送GET或POST请求(调第三方接口)
- 模式识别(Pattern Recognition)学习笔记(四)——最小风险贝叶斯决策
- HDU 1574 RP问题(01背包变形)
- java中的栈与堆