Source code for upxo.netops.kchar

"""
Contains a list of definitions to enable charactyerizaion of networkx data.

Created on Fri Jun  7 11:38:09 2024

@author: Dr. Sunil Anandatheertha
"""
import numpy as np
from upxo._sup.dataTypeHandlers import IS_ITER


[docs] def calculate_kdegrees(networks): """ Get degree distribution of every network graph in networks. Parameters ---------- networks: list List of networkx network graphs. Return ------ kd: list List of list of degree of every node in each network graph. Data structures --------------- networks = [k1, k2, ..., kp, ... kP] Where, kp: pth network graph ks = [k1d, k2d, ..., kid, ..., knd] Where, kid: degree distribution of ith network. kid = [dn1, dn2, ..., dnj,... dnJ] Where, dnj: degree of node j. """ kd = [] for k in networks: kd.append(np.array([k.degree(node) for node in k.nodes()])) return kd
[docs] def calculate_kdegrees_equalbinning(networks): """ Calculate the pairwise degree distributions, and equally bin them. Parameters ---------- tgt_graph: networkx graph Target graon structure O(n) neighbour network graph. smp_graph: networkx graph Sample graon structure O(n) neighbour network graph. Return ------ kd_tgt: List of degree of every node in target network. kd_smp: List of degree of every node in sample network. Data structures --------------- networks = [k1, k2, ..., kp, ... kP] Where, kp: pth network graph ks = [k1d, k2d, ..., kid, ..., knd] Where, kid: degree distribution of ith network. kid = [dn1, dn2, ..., dnj,... dnJ] Where, dnj: degree of node j. Explanations ------------ Some tests are sensitive to differences in the cumulative distribution functions (CDFs) of the data. Directly using the raw degree sequences can be misleading if the sample sizes (number of nodes) differ significantly between the two networks. Histograms normalize the data, providing a better representation of the underlying probability distributions. """ if not IS_ITER(networks): networks = [networks] # Calculate network degree distributions kd = calculate_kdegrees(networks) # Calculate histograms with the same bins for fair comparison min_degree = min([min(_kd_) for _kd_ in kd]) max_degree = max([max(_kd_) for _kd_ in kd]) # min_degree = min(np.min(kd_tgt), np.min(kd_smp)) # max_degree = max(np.max(kd_tgt), np.max(kd_smp)) bins = np.arange(min_degree, max_degree + 2) # In the above line, +2 for inclusive range kdeg = [] for _kd_ in kd: _kdeg_, _ = np.histogram(_kd_, bins=bins, density=True) kdeg.append(_kdeg_) return kdeg def calculate_degree_centrality(networks): """Calculate degree centrality.""" degree_centrality = [nx.degree_centrality(k) for k in networks] return degree_centrality def calculate_betweenness_centrality(networks): """Calculate betweenness centrality.""" btw_centrality = [nx.betweenness_centrality(k) for k in networks] return btw_centrality def calculate_closeness_centrality(networks): """Calculate closeness centrality.""" closeness_centrality = [nx.closeness_centrality(k) for k in networks] return closeness_centrality def calculate_eigenvector_centrality(networks): """Calculate eigenvector centrality.""" eigenvector_centrality = [nx.eigenvector_centrality(k) for k in networks] return eigenvector_centrality def calculate_centrality_measures(self): """Calculate centrality measures.""" # Node Properties pass