是否可以使用 Networkx 和 Python 根据节点属性获取度中心性值?

Posted

技术标签:

【中文标题】是否可以使用 Networkx 和 Python 根据节点属性获取度中心性值?【英文标题】:Is it possible to obtain the degree centrality values based on the node attributes using Networkx and Python? 【发布时间】:2020-07-20 04:44:52 【问题描述】:

我是 Networkx 的新手,我想知道是否有任何方法可以输出以下内容:

假设我有一个网络,其节点是人名,属性是他们的性别(M,F)。 获得度中心性时 degree_cent = nx.degree_centrality(g)

而不是这样:

[('安娜', 1.0),('本',0.6), ...

有没有可能是这样的:

[('Anna', M:0.4, F:0.6),('Ben', M:0.3, F:0.3),... 在这里我可以区分具有 M 和 F 属性的节点数连接到我感兴趣的节点?

谢谢。

【问题讨论】:

您能否提供一个最小的图表示例以及您想要的中心性值?度中心性如何是浮点数而不是整数?你的图表中有权重吗? 我有一个无向的蛋白质-蛋白质相互作用网络(无权重)。在这个网络中,蛋白质可以根据它们的属性分为不同的类型。因此,假设在网络中,我有 A、B 和 C 类型的蛋白质。我想获得网络中每个蛋白质的度中心性,但不是只有每个蛋白质的连接总数,我想知道有多少 A、B 和 C 型蛋白质与它们相连。 Networkx有可能吗?浮点数只是标准化值。谢谢 【参考方案1】:

你需要自己写度函数:

import networkx as nx
import random

random.seed(42)

graph = nx.erdos_renyi_graph(20, .1)

classes = ["A", "B", "C"]

for node in graph:
    graph.nodes[node]["attribute"] = random.choice(classes)


def attribute_degree(G, node):
    degree = 

    for neighbor in G.neighbors(node):
        attribute = G.nodes[neighbor]["attribute"]
        degree[attribute] = degree.get(attribute, 0) + 1

    return degree


print(attribute_degree(graph, 0))
# 'B': 1, 'A': 2, 'C': 1
print(attribute_degree(graph, 1))
# 'B': 1, 'A': 1, 'C': 1

【讨论】:

以上是关于是否可以使用 Networkx 和 Python 根据节点属性获取度中心性值?的主要内容,如果未能解决你的问题,请参考以下文章

在 NetworkX 中创建大图时出现内存错误

python networkx绘制图

使用 python 和 networkx 进行大图可视化

python 使用networkx绘制带权无向图和带权有向图,以及标注特定路径

Python 学习 第十六篇:networkx

可以使用 python 3 从 networkx 获取分层图吗?