Source code for netcenlib.algorithms.cluster_rank_centrality

import networkx as nx
import numpy as np
from networkx import Graph

from netcenlib.constants import INFINITY


[docs] def cluster_rank_centrality(network: Graph) -> dict[str, int]: """ Compute the ClusterRank Centrality for each node in the graph G. Ref: https://www.centiserver.org/centrality/ClusterRank/ :param network: NetworkX graph :return: Dictionary of nodes with computed centrality as the value """ centrality = {} if network.is_directed(): cc = nx.clustering(network, nodes=None, weight=None, mode="dot") mode = "out" else: cc = nx.clustering(network, nodes=None, weight=None) mode = "all" for node in network.nodes(): if np.isnan(cc[node]): centrality[node] = INFINITY else: if mode == "out": neighbors = set(network.successors(node)) else: neighbors = set(nx.neighbors(network, node)) cr = sum(network.degree(nb, weight=None) for nb in neighbors) + len( neighbors ) centrality[node] = cr * cc[node] return centrality