networkx 算法中是不是有一个函数可以返回我指定的某些节点周围的集团/集群/组件?

Posted

技术标签:

【中文标题】networkx 算法中是不是有一个函数可以返回我指定的某些节点周围的集团/集群/组件?【英文标题】:Is there a function in networkx algorithm that returns the cliques/clusters/components around certain nodes that I specify?networkx 算法中是否有一个函数可以返回我指定的某些节点周围的集团/集群/组件? 【发布时间】:2021-08-21 08:37:35 【问题描述】:

我在电信 CDR 数据中使用 networkx 来定义网络影响者及其影响圈。我将影响者定义为特征向量中心性高于某个阈值的节点,但我仍然无法定义他们的影响圈,即与影响者节点直接连接的节点,距离 = 1。我们有一个函数在networkx 也一样吗?顺便说一下,我的图是有向图。

G = nx.DiGraph()
G = nx.from_pandas_edgelist(CDR1, 'A', 'B', ['WEIGHT'], create_using=nx.DiGraph())



df = pd.DataFrame(dict(
    DEGREE = dict(G.degree),
    DEGREE_CENTRALITY = nx.degree_centrality(G),
    CLUSTERING = nx.clustering(G),
    EIGENV_CENTRALITY=nx.eigenvector_centrality(G)
    ))




df['Influencer']=np.where(df['EIGENV_CENTRALITY']> 1.022186e-05,1,0)

【问题讨论】:

【参考方案1】:

假设你有一个无向图,这是

G.neighbors(node)

如果它是定向的并且你想要从节点到达的那些,它又是

G.neighbors(node)

G.successors(node) 也可以。

如果它是定向的,并且您只想要那些与节点有边缘的人

G.predecessors(node)

【讨论】:

但是它们会返回一个迭代器,而不是一个列表。如何获取影响圈内的用户数量列表? 要将迭代器转换为列表,只需执行list(G.neighbors(node)) 从 G.successors(node) 返回的列表是关键迭代器的列表。应用 list() 函数不会改变任何东西。它仍然是一个关键迭代器列表。 你有什么版本的networkx?对我来说:H=nx.DiGraph()....H.add_edge(1,2)....list(H.successors(1)) 得到输出[2]【参考方案2】:

我已经找到了我的问题的答案。我使用了以下代码行:

circle_pre=[]
for inf in influencers_pre.index:
    for n in G_pre.neighbors(inf):
        circle_pre.append(n)
len(circle_pre)

其中 circle_pre 是直接连接到影响者节点的节点名称列表,我将其定义为影响圈。

【讨论】:

以上是关于networkx 算法中是不是有一个函数可以返回我指定的某些节点周围的集团/集群/组件?的主要内容,如果未能解决你的问题,请参考以下文章

python-networkx学习

在函数中使用错误的 networkx 前辈

python中的Networkx min_weighted_vertex_cover返回整个集合而不是顶点覆盖

再说最短路径——Networkx

如何使用networkx图作为sklearn的输入

如何使用 python 的 networkx 模块从节点列表生成完全连接的子图