【问题标题】:How to graph only top 50-100 connected component subgraphs in NetworkX; drawing multiple subgraphs at once如何在 NetworkX 中仅绘制前 50-100 个连通分量子图;一次绘制多个子图
【发布时间】:2019-07-02 02:05:00
【问题描述】:

对不起,如果这很粗略:这是我在 Stackoverflow 上的第一篇文章!我很抱歉没有发布代码,但我所做的一切都不复杂(也许这就是问题所在),所以描述应该有效。如果我不擅长描述问题,我也很抱歉,因为我是 Python 新手;我不太确定如何在没有数据的情况下重新创建示例:(

在使用 NetworkX 时,我经常在从 pandas 导入数据后运行具有数千个节点的大型无向图(我们称之为 G)。绝大多数节点只有一个或两个边缘,这对我来说只是噪音。我感兴趣的是具有大量节点的集群,而这实际上是少数。

然后我将运行 nx.connected_components 命令来列出 G 包含的所有子图集的长列表,查看排名靠前的结果,并一次打印一个我感兴趣的单个子图。

因此,当我获得所有连接组件子图(通常很长)的生成器列表/字典时,我通常也会只查看前 50-100 个结果。因为这些往往有我正在寻找的东西。

我试过nx.connected_component_subgraphs,但是有太多我不需要这种方式,这几乎和一次可视化整个网络一样糟糕。

简而言之:我如何获取 nx.connected_components 给我的集合生成器/列表(然后我将其缩短到前 50 个)并将其制成新图表?

我尝试将nx.component_components 的输出转换为列表,但都是集合。

没有错误消息。

【问题讨论】:

  • 欢迎来到 StackOverflow。我认为@Andreas 的评论并不完全有根据,但我确实认为带有一些虚假数据的最小工作示例(MWE)在这里会有所帮助。证明问题只是 MWE 的原因之一。 IMO 更重要的是,它显示了您自己对问题的假设,并迫使您指定解决方案的形式。例如,在您的情况下,标题说您正在努力解决绘图问题,而文本建议(对我而言)您只想将组件融合到一个网络中。很少有人会尝试解决一个不明确的问题。
  • 感谢两位的意见;承认很尴尬,但我在制作自己的 MWE 时遇到了麻烦,而且我知道你所说的一切 @Andreas。感谢下面的专业人士,我得到了需要的解决方案,现在我还学会了如何让我自己的例子向前发展。很抱歉在我这么新的时候发帖,但是,我自己尝试了很多事情,以至于我不知道从哪里开始,并尽力描述问题。

标签: python networkx


【解决方案1】:

一种方法可能如下所示:

首先找到所有组件,除了 N 个最大的组件

small_components = sorted(nx.connected_components(G), key=len)[:-N]

然后,从 G 中删除属于这些组件之一的所有顶点:

G.remove_nodes_from(itertools.chain.from_iterable(small_components))

这是一个示例,我们只保留给定图表的两个最大组件:

In [31]: G = nx.Graph()
In [32]: G.add_edges_from([(1, 2), (2, 3), (3, 4), (5, 6), (7, 8), (8, 9)])
In [33]: small_components = sorted(nx.connected_components(G), key=len)[:-2]
In [34]: small_components
Out[34]: [{5, 6}]
In [35]: G.remove_nodes_from(itertools.chain.from_iterable(small_components))
In [36]: G.nodes()
Out[36]: NodeView((1, 2, 3, 4, 7, 8, 9))

【讨论】:

  • 非常感谢!即使有大量子图,这也很有效。你是我的英雄。另外,感谢您向我展示了如何轻松创建假无向图。我很难简单地为他人制作 MWE(我很抱歉@Andreas)。
  • 另外,任何人都可以向我推荐任何好的资源来了解更多信息吗?我参加了 DataCamp 的 NetworkX 课程,但是,我觉得还有很多东西要知道。
  • 站外资源推荐这里跑题了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多