如何用Python可视化社交网络

41 投票
4 回答
54232 浏览
提问于 2025-04-17 05:33

我需要定义一个社交网络,然后分析它并把它画出来。我可以手动画图和计算各种指标,但我不想重复造轮子。

我试过使用matplotlib这个工具,但我希望能更方便地使用它,只需要几行代码就能告诉它怎么加载数据,然后调用一个函数,把图形渲染成SVG格式。

我该如何以这种方式可视化社交网络呢?

4 个回答

12

最近这里发生了很多事情! Netwulf 是一个专门用来在 Python 中轻松制作可重复的互动网络可视化的库(顺便说一下,我是这个项目的贡献者)。

img

另外,如果你想把网络导出为 HTML 格式,可以看看 webweb,这个工具更适合这个需求。

19

这里有三个回答提到了Networkx和Gephi,但没有人提到graph-tool。它们的主要区别在于,graph-tool的算法是用C++实现的,这使得它的性能更强,比起Networkx等工具要快一些。

此外,它还支持可视化。从网站上可以看到:

你可以方便地绘制图形,使用多种算法和输出格式(包括在屏幕上显示)。Graph-tool有自己的一套布局算法和灵活的交互式绘图功能,基于cairo和GTK+,同时它也可以作为一个非常友好的接口,连接到优秀的graphviz工具。

这里有一个很酷的例子,来自文档(还有很多很多其他例子):

政治博客网络的块划分

(政治博客网络的块划分)。

这个图的代码是:

>>> 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/

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

撰写回答