使用Gephi绘制动态网络的三种方法
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                使用Gephi绘制动态网络的三种方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                作者: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中你可以在“數據實驗室”中看到時間區間是如何被創建的。如果網絡是縱向的,將會有一個時間區間列。這列給出了元素的應該存在的時間區間。你可以通過在數據實驗室配置對話框,開啟展示時間區間圖表選項,這樣你就可以可視化了。
二、 導入動態GEXF文件
1、基本的例子:
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.1drafthttp://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:點擊數據實驗室-合并列
四. 使用時間框架,導入多個靜態的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格式的列。此外,邊的權重也是動態的。
總結
以上是生活随笔為你收集整理的使用Gephi绘制动态网络的三种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 五、python实现人工蜂群算法(简单明
- 下一篇: 实战第一步:市场调研
