如何使用Python可视化社交网络

时间:2011-11-03 06:44:56

标签: python graph social-graph

我需要定义一个social network,分析并绘制它。我可以手工绘制并手工分析(计算各种指标)。但我不想重新发明轮子。

我曾尝试使用matplotlib,但我需要以交互方式使用它,并在几行中告诉它如何加载数据,然后调用渲染函数,将图形渲染为SVG。

如何以所描述的方式可视化社交网络?

4 个答案:

答案 0 :(得分:28)

networkx 是一个非常强大且灵活的Python库,用于处理网络图。定向和非定向连接可用于连接节点。可以通过添加节点然后连接它们的边来构建网络,或者简单地通过列出边对(可以自动创建未定义的节点)来构建网络。创建后,节点(和边)可以使用任意标签进行注释。

虽然 networkx 可用于可视化网络(请参阅文档),但您可能更喜欢使用网络可视化应用程序,例如 Gephi (可从{{3获得) }})。 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')

答案 1 :(得分:14)

有三个答案提到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/

答案 2 :(得分:1)

另一种方式是Cytoscape。您也可以使用gml文件。

像psychemedia所说,您可以使用Networkx绘制图表并导出到gml文件。

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

之后,在Cytoscape中单击From Network File并选择您的gml文件。在那里,你也可以改变风格。

答案 3 :(得分:0)

最近在这里发生了很多事情! Netwulf是一个致力于使用Python轻松实现可重现的交互式网络可视化的库(免责声明:我是贡献者)。

img

也请检出webweb,如果要将网络导出为html,则更好。