是否可以使用 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 根据节点属性获取度中心性值?的主要内容,如果未能解决你的问题,请参考以下文章