使用Gephi绘制动态网络的三种方法

作者:JUDGE_MENT

邮箱:[email protected]

CSDN博客:http://blog.csdn.net/sinat_23137713

最后编辑时间:2016.12.5  V1.1

声明:

1)该资料结合官方文档及网上大牛的博客进行撰写,如有参考会在最后列出引用列表。

2)本文仅供学术交流,非商用。如果不小心侵犯了大家的利益,还望海涵,并联系博主删除。

3)本人才疏学浅,难免出错,还望各位大牛悉心指正。

4)转载请注明出处。


一、 纵向网络/动态网络是一种包括时间信息的简单网络。你可以想象一下关你的朋友关系网络;节点数和连接数随着时间的增长而增长,属性值也随之变化。如果每个人都有一个"孩子数"属性,这个属性也是可能会增长的《o(* ̄︶ ̄*)o, 还不去生孩子》。我们称之为动态属性,他们的值是与根据特定的时间段相关的。

使用Gephi绘制动态网络的三种方法_第1张图片
纵向网络

为了使用gephi对这些特征进行建模,我们使用区间的概念来定义一段时间。有两种基本的方式来对纵向网络进行建模,一种是每个网络集合都有一个特定的时间点(一天,一个月,),或是网络片段中的每个元素都有其存在时间。这可以分别看作是离散时间连续时间的表示方式。本文中我们选择第二种方式,因为他更加灵活。

举例来说:
如果我们有一个三年包含三个点的网络。下面左边的是方法1(网络集合)在不同的三个时间点。右边是相应的方法2(每个元素)表示使用间隔。(右边n1的右区间是开的,因为这个点只在2008有,2009就没了)
Gephi 中你可以在“数据实验室”中看到时间区间是如何被创建的。如果网络是纵向的,将会有一个时间区间列。这列给出了元素的应该存在的时间区间。你可以通过在数据实验室配置对话框,开启展示时间区间图表选项,这样你就可以可视化了。

二、 导入动态GEXF文件

GEXF文件:  XML格式 ,可扩展语言 。包含动态网络(第二种方法)所有信息。
你在GEXF中增加开始和结束的位置就是设置一个点或边的开始或消失。

1、基本的例子:

下面是一个2007-2009年有三个点的动态网络例子。


  
    
      
      
      
    
    
      
      
      
    
  
注意以下几点:
1. 我们将图 模式设为“dynamic”,这是必须的,因为GEXF格式也可以展现静态图。
2. 对于闭区间的就用startend;如果是开区间的就用startopenendopen
3. 不强制一定要对于每一个元素都设定一个开始和结束时间。如果不设置自动创建一个[-infinity,+infinity]这么个时间间隔,从正无穷到负
无穷。如果只有一个边界被定义了,像上诉代码第二条边似的,那么将会自动变成 [2009,+inf].

2、动态属性

上面的例子告诉我们如何通过时间节点、边的添加和移除,来展现网络的拓扑结构。现在让我们来演示一下gephi如何展现随着时间变化的属性值。下面是一个例子,节点拥有一个价格属性。

  
    
      
    
    
      
      
        
        
      
      
      
      
        
      
      
      
      
        
      
      
    
    
      
      
      
    
  
attvalues :属性值
注意以下几点:
不强制到处设置属性值 ,为了防止没值,我们可以使用默认值。
对于节点 n2 ,他的价格“ 12 ”从 2008 年开始,但是没有定义结束时间,这会自动调整为 [2008 +infinity]

3. 动态权值

正常来说一个边的权值直接定义了一个边元素中,然后定一个值。定义了一个动态权值属性允许重写这个值,提供了对动态权值的支持。
方法就是定义边的时候加上“weight”。然后,使用“attvalue”来设置weight的变化。跟节点属性那一样。

   

三. 时间列转换为动态网络

问题是非常简单的,如何转换时间列为动态网络,例如如何转换一年的数值列成为一个动态网络。
想象你和一些朋友的社交网络。每个节点都是一个朋友,一个属性列是你遇到一个朋友的日期。问题是我们怎样才能将这个列转换成一个动态的时间间隔,然后通过时间线探索整个网络。

步骤1:点击 数据实验室 - 合并列
使用Gephi绘制动态网络的三种方法_第2张图片
步骤2:分别把左窗格跟时间有关的列移到右边。如果你有开始时间和结束时间,那么就将这两列移到右边。在下图中,'First Met'只是一个开始列。然后选择时间间隔在那个选择器当中。
使用Gephi绘制动态网络的三种方法_第3张图片
注意,开区间似乎已经被弃用了
步骤 3 :选择哪列是开始,选择哪列是结束。如果没有结束时间,就留空。如果列是数字化的(整数,浮点型,长浮点型),那么就选择“ parse numbers ”。如果数据是 string 形式的,他们也可以被解析转换为时间间隔。我们的“ fiist met ”列就是一年中的某一天,就是一个数字而已。
使用Gephi绘制动态网络的三种方法_第4张图片

四. 使用时间框架,导入多个静态的GEXF充当动态的GEXF

这个方法教你如何通过一些时间点(GEXF文件)创建一个纵向/动态网络。如果你有这么一个不同时间点的复杂网络,然后想去看随着时间改变网络和它的属性都是如何变化的,那么请看这个方法。
注意,这个方法的实现仍然处于试验阶段,而且可能不会在所有的情况下工作。一定要确认以下几点:
  • 不同文件中,节点标识符完全要一样(至少标签要一致)。
  • GEXF文件中设置为static
  • gephi工作区要保持干净,不要有别的图
  • 属性列在所有GEXF中都是一样的

1. 数据集

假如说我们有三个静态GEXF,分别是2007年的GEXF,2008年的GEXF和2009年的GEXF。
2007年的静态网络如下,注意价格属性:


  
    
      
    
    
      
        
      
      
        
      
      
        
      
    
    
      
      
    
  
2008年的静态网络如下,节点“3”消失了,一个节点出现“4”。价格和边缘的权重也已经改变了。


  
    
      
    
    
      
        
      
      
        
      
      
        
      
    
    
      
      
      
    
  
静态网络在2009年, 节点“3”回来了,节点“2”消失了, 并且再次改变价格。


  
    
      
    
    
      
        
      
      
        
      
      
        
      
    
    
      
    
  

2. 导入Gephi

按照如下步骤,可以在一个空项目中导入你的这几个GEXF文件:
步骤1导入第一个GEXF文件,并在导入报告是选择Time Frame,单击OK。这将显示一个设置对话框。
使用Gephi绘制动态网络的三种方法_第5张图片
步骤2选择一个日期或一个数字作为时间。默认选择是一个数字,这里我们把2007年输入。单击OK,文件导入。
使用Gephi绘制动态网络的三种方法_第6张图片
步骤3: 现在你重复步骤2。只是相应的时间,第二个文件选择2008、..2009等。
使用Gephi绘制动态网络的三种方法_第7张图片
结果就会得到在Gephi里出现的纵向/动态网络,节点和边有他们相应的时间段。同样的,所有属性都是动态属性。数据集中的“价格”属性是DYNAMIC_INTEGER格式的列。此外,边的权重也是动态的。

你可能感兴趣的:(数据可视化)