Networkx Центральность измеряет «количество» входящих / исходящих границ - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь получить абсолютное количество входящих / исходящих ребер ориентированного графа. Центральность дает мне долю узлов, подключаемых от выбранного узла. я хочу сравнить несколько подграфов, доля / отношение не дают мне точного сравнения.

В настоящее время я умножаю DiGraph.number_of_nodes()-1 на меры централизации. но я не уверен, что это самый простой способ. Существуют ли какие-либо встроенные алгоритмы или функции Networkx?

G=nx.from_pandas_edgelist(df,'Id_From','Id_To',edge_attr=True,create_using=nx.DiGraph)
size=G.number_of_nodes()
DegreeCentrality=nx.degree_centrality(G)
DegreeCentrality.update(x*size for x in DegreeCentrality.items())


Example expected result
Node1: InDegreeCentrality: 4 (number of incoming edges to node1)
Node1: OutDegreeCentrality: 3 (number of outgoing edges from node1)
Node1: DegreeCentrality: 7 (Total number of edges linked to node1)
..
..

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Пройдя учебник по Networkx, я могу достичь того, что хотел выше, используя ресурсы на этой странице: https://jfinkels -networkx.readthedocs.io / en / latest / reference / classes / digraph.html

В частности;

DiGraph.in_degree https://jfinkels -networkx.readthedocs.io / en / latest / reference / classes / Генерируемый / networkx.DiGraph.in_degree.html # networkx.DiGraph.in_degree

DiGraph.out_degree https://jfinkels -networkx.readthedocs.io / en / latest / reference / classes / made /networkx.DiGraph.out_degree.html # networkx.DiGraph.out_degree

PS: «центральность» преобразуется в отношения.

0 голосов
/ 24 мая 2019

Похоже, вы хотите получить итоговую степень для всех узлов. В Networkx есть встроенные функции - in_degree и out_degree. Вы можете использовать генераторы, которые перебирают узлы и эти функции:

import networkx as nx
import numpy as np

G = nx.fast_gnp_random_graph(20, 0.3, directed=True)
print('IN AVG:', np.mean([G.in_degree(n) for n in G.nodes]))
print('OUT AVG:', np.mean([G.out_degree(n) for n in G.nodes]))
print('ALL AVG:', np.mean([G.degree(n) for n in G.nodes]))
print('IN SUM:', np.sum([G.in_degree(n) for n in G.nodes]))
print('OUT SUM:', np.sum([G.out_degree(n) for n in G.nodes]))
print('ALL SUM:', np.sum([G.degree(n) for n in G.nodes]))

Будет напечатано:

IN AVG: 5.65
OUT AVG: 5.65
ALL AVG: 11.3
IN SUM: 113
OUT SUM: 113
ALL SUM: 226
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...