Source code for metrics.edges
import pandas as pd
import networkx as nx
[docs]
class EdgeMetrics:
"""Handles edge-level metric calculations."""
[docs]
@staticmethod
def extract_edge_metrics(dpg_model, nodes_list):
"""
Extracts metrics from the edges of a DPG model, including:
- Edge Load Centrality
- Trophic Differences
Args:
dpg_model: A NetworkX graph representing the DPG.
nodes_list: List of (node_id, label) tuples.
Returns:
df: A pandas DataFrame containing the metrics for each edge in the DPG.
"""
# Map node IDs to labels for fast lookup.
node_id_to_label = {node_id: label for node_id, label in nodes_list}
# Calculate edge weights (assuming edges have 'weight' attribute).
edge_weights = nx.get_edge_attributes(dpg_model, "weight")
# Build edge rows with labels and IDs.
edge_data_with_labels = []
for u, v in dpg_model.edges():
u_label = node_id_to_label.get(u)
v_label = node_id_to_label.get(v)
edge_data_with_labels.append([
f"{u}-{v}",
edge_weights.get((u, v), 0),
u_label,
v_label,
u,
v,
])
# Build a DataFrame with edges, labels, and IDs.
df_edges_with_labels = pd.DataFrame(
edge_data_with_labels,
columns=[
"Edge",
"Weight",
"Node_u_label",
"Node_v_label",
"Source_id",
"Target_id",
],
)
return df_edges_with_labels