Можно ли получить значения центральности степени на основе атрибутов узла, используя Networkx и Python? - PullRequest
1 голос
/ 08 апреля 2020

Я новичок в Networkx, и я хотел бы знать, есть ли способ вывести следующее:

Допустим, у меня есть сеть, узлами которой являются имена людей, а их атрибутами - их пол (M, F). При получении степени центральности степень_цент = nx.degree_centrality (г)

Вместо того, чтобы иметь что-то вроде этого:

[('Анна', 1,0), ('Бен', 0,6),. ..

Возможно ли иметь что-то подобное:

[(«Анна», М: 0,4, F: 0,6), («Бен», М: 0,3, F: 0,3 ), ... где я могу различить guish количество узлов с атрибутами M и F, которые связаны с интересующими меня узлами?

Спасибо.

1 Ответ

1 голос
/ 13 апреля 2020

Вам нужно написать собственную функцию степени:

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}
...