2011-11-03 45 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