2011-11-03 215 views
25

對於一個學校的項目,我需要定義一個social network,對其進行分析和繪製。我可以手工繪製並手動分析它(計算各種指標)。但作爲一個Python愛好者,我希望有一個Python工具。使用Python輕鬆實現社交網絡的可視化和分析?

我做夢matplotlib的社交圖當量。即我可以交互地使用它,並在幾行中告訴它如何加載數據,然後調用渲染函數,將圖形渲染爲svg。也許在其上顯示一些指標,例如每個節點的關係計數,平均關係等。

如果你知道這樣一個Python模塊,那麼可以在你的答案中提供一個玩具例子,而不是僅僅回答一個模塊的名稱。

回答

21

networkx是一個功能強大且靈活的Python庫,用於處理網絡圖。有向和無向連接可用於連接節點。可以通過添加節點,然後連接它們的邊來構建網絡,或者簡單地通過列出邊緣對(未定義節點將自動創建)來構建網絡。一旦創建,節點(和邊)可以用任意標籤註釋。

雖然networkx可以被用於可視化的網絡(參見文檔),則可能更喜歡使用一個網絡的可視化應用如Gephi(購自gephi.org)。 networkx支持廣泛的導入和導出格式。如果使用諸如GraphML之類的格式導出網絡,則導出的文件可以很容易地加載到Gephi中並在那裏可視化。

import networkx as nx 
G=nx.Graph() 
G.add_edges_from([(1,2),(1,3),(1,4),(3,4)]) 
G 
>>> <networkx.classes.graph.Graph object at 0x128a930> 
G.nodes(data=True) 
>>> [(1, {}), (2, {}), (3, {}), (4, {})] 
G.node[1]['attribute']='value' 
G.nodes(data=True) 
>>> [(1, {'attribute': 'value'}), (2, {}), (3, {}), (4, {})] 
nx.write_graphml(G,'so.graphml') 
+0

如何通過ajax調用將此n/w圖表轉換爲html? – NoobEditor

4

networkx是一個很好的一個。可能需要graphviz來進行可視化。

+0

Graphviz不是必需的,但是可取的。 –

1

嚴格雖然不是你的參數範圍內,我已經使用Python做過一些社會網絡分析。沒關係,我最終使用了NodeXL(http://www.nodexl.codeplex.com/),一個用於項目的Excel(agast!)插件,我認爲它非常棒。用GUI和代碼編寫的方式進行編程幾乎可以滿足您的要求。

8

networkx和Gephi組合涼爽。 networkx能夠輸出graphml格式。有關gephi更多信息:http://gephi.org/

+0

Gexf文件格式對Gephi來說更爲「原生」(例如管理動態),並且networkx輸出也是如此:https://networkx.github.io/documentation/networkx-1.10/reference/readwrite.gexf。 html – seinecle

0

Networkx確實是一個整潔的圖書館。我也會建議它與Gephi我會知道使用Python console(我還沒有測試這個組合)。

我曾經使用Ubigraph進行可視化,但它不能很好地擴展,它是專有的。

1

另一種方式是Cytoscape。你也可以使用gml文件。

就像psychemedia說的那樣,你可以使用Networkx來繪製你的圖形並導出到gml文件。

nx.write_graphml(G,'my_file.gml') 

之後,在Cytoscape中點擊從網絡文件並選擇您的gml文件。在那裏,你也可以改變風格。

+0

堆棧溢出時,強烈建議您不要使用僅限鏈接的答案。相反,[這是最好的](http://meta.stackoverflow.com/q/8259)包括一個使用Cytoscape社交網絡的基本示例。 – drs

+0

對不起,drs。但我剛剛完成了其他答案。我會更好。 – anapaulagomes

9

有三個答案提到了Networkx和Gephi,但沒有人提到graph-tool。主要區別在於算法是用C++實現的,與例如相比較,給出了一個performance boost。 Networkx。

而且,它還涵蓋可視化。來自網站:

方便地繪製您的圖形,使用各種算法和 輸出格式(包括屏幕)。圖形工具擁有自己的 佈局算法和基於 cairo和GTK +的多功能交互式繪圖例程,但它也可以作爲非常舒適的界面 用於卓越的graphviz軟件包。

這裏是一個整潔的例子from the docs(還有很多很多):

Block partition of a political blogs network

(政治博客網的分塊)。

而且,對於它的代碼:

>>> g = gt.collection.data["polblogs"] 
>>> g = gt.GraphView(g, vfilt=gt.label_largest_component(gt.GraphView(g, directed=False))) 
>>> state = gt.BlockState(g, B=g.num_vertices(), deg_corr=True) 
>>> state = gt.multilevel_minimize(state, B=2) 
>>> gt.graph_draw(g, pos=g.vp["pos"], vertex_fill_color=state.get_blocks(), output="polblogs_agg.pdf") 
<...> 

(注:每個節點的位置是預定的在本例中,所以沒有佈局算法已經將要運行)

下面是另一個示例使用相同的數據(結果令人難以置信): http://ryancompton.net/2014/10/05/graph-tools-visualization-is-pretty-good/

+0

'output =「polblogs_agg.pdf」'如果必須將這些圖嵌入到html頁面中,會出現問題嗎?可能返回'html'或'div'? – NoobEditor

+1

@NoobEditor查看[文檔](https://graph-tool.skewed.de/static/doc/draw.html?highlight=output):'fmt:輸出文件格式。可能的值是「auto」,「ps」,「pdf」,「svg」和「png」。如果該值是「自動」,則格式從輸出參數中猜測出來。' 例如,你會得到一個PNG。然後下一步是將這個圖像包含在你的html中。 – keyser

+0

在Mac上2017年安裝graphtool是不可能的。需要os x mavericks – swyx