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

41

我需要定义一个社交网络,并对其进行分析和绘制。我可以手工绘制并手动分析(计算各种指标),但我不想重复造轮子。

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

如何用上述方式可视化社交网络?


7
哇,我不喜欢你编辑我的帖子的方式,Bhargav Rao!通常我喜欢有自由去改进别人写的问题,也许你确实在某种程度上改进了,尽管我看不出来。1)你删除了关键部分(例如“分析”,现在只剩下“可视化”)2)你添加了一些我从未想说的非必要内容,“但我不想重复造轮子。”3)你使用了糟糕的语言“但我不想重复造轮子。”,应该是“不想重复造轮子”。 - Mads Skjern
4个回答

33

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')

如何通过Ajax调用将此网络图形提取到HTML中? - NoobEditor

19
有三个答案提到了Networkx和Gephi,但没有人提到graph-tool。主要区别在于算法是用C++实现的,与例如Networkx相比,可以获得性能提升
此外,它还涵盖了可视化。从网站上可以看到:

方便地绘制您的图形,使用各种算法和输出格式(包括屏幕)。Graph-tool具有自己的布局算法和基于cairo和GTK+的多功能交互式绘图例程,但它也可以作为一个非常舒适的接口来使用优秀的graphviz软件包。

这里有一个很棒的例子来自文档(还有很多很多):

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/


“output="polblogs_agg.pdf"如果要将这些图形嵌入到HTML页面中,会有问题吗?是否可以返回htmldiv`? - NoobEditor
1
@NoobEditor 请参考文档fmt : 输出文件格式。可能的值包括 "auto", "ps", "pdf", "svg" 和 "png"。如果值为 "auto",则会从输出参数中猜测格式。因此,只需将其命名为例如 .png,您就会得到一个 png 文件。然后下一步是将此图像包含在您的 HTML 中。 - keyser
在2017年的Mac上安装Graphtool是不可能的。需要OS X Mavericks。 - swyx

12

最近这里发生了很多事情! Netwulf 是一个专门为 Python 提供易于重复、交互式网络可视化的库(声明:我是贡献者)。

img

另外还可以看看 webweb,如果你想将网络导出为 HTML,则更好用。


3
另一种方法是使用Cytoscape。您也可以将其用于gml文件。
像psychemedia所说,您可以使用Networkx绘制图形并导出到gml文件。
nx.write_graphml(G,'my_file.gml')

接下来,在Cytoscape中点击“从网络文件导入”,选择你的gml文件。在那里,你可以修改样式。


在Stack Overflow上,强烈反对仅提供链接的回答。相反,最好包含一个使用Cytoscape进行社交网络分析的基本示例。参考链接 - drs
很抱歉,drs。但我刚刚完成了其他答案。下次我会做得更好的。 - anapaulagomes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接