如何从pyvis图中提取节点in_degree、out_degree属性,能否转换为networkx?
pyvis图转networkx图的实现方案及出入度获取方法
该方案完全可以实现,是目前获取pyvis图节点出入度的成熟方案之一。
实现原理
pyvis的Network实例内置nodes、edges两个公开属性,分别存储所有节点、边的元数据,格式为包含字典的列表,可直接读取这两个属性完成到networkx图的转换。
具体实现代码
1. 依赖导入
import networkx as nx from pyvis.network import Network
2. 图转换逻辑
需要匹配pyvis图的有向/无向属性,创建对应类型的networkx图:
# 此处pyvis_graph替换为你已经创建好的pyvis图实例名 if pyvis_graph.directed: # 有向图对应创建DiGraph nx_graph = nx.DiGraph() else: # 无向图对应创建Graph nx_graph = nx.Graph() # 添加所有节点,保留节点的全部自定义属性 nx_graph.add_nodes_from((node["id"], node) for node in pyvis_graph.nodes) # 添加所有边,保留边的全部自定义属性 nx_graph.add_edges_from((edge["from"], edge["to"], edge) for edge in pyvis_graph.edges)
3. 出入度获取
转换完成后直接调用networkx原生方法即可:
- 获取全图所有节点入度:
nx_graph.in_degree() - 获取全图所有节点出度:
nx_graph.out_degree() - 获取单个指定节点的入度:
nx_graph.in_degree(你的节点ID)
轻量替代方案(无需转换图结构)
如果你只需要统计出入度,不想额外引入networkx的转换开销,可直接基于pyvis的edges属性统计:
from collections import defaultdict # 统计入度 in_degree = defaultdict(int) for edge in pyvis_graph.edges: in_degree[edge["to"]] += 1 # 统计出度 out_degree = defaultdict(int) for edge in pyvis_graph.edges: out_degree[edge["from"]] += 1
两种方案可根据你的后续需求选择:如果后续还需要做最短路径、社区发现等复杂图分析,选择转networkx的方案;如果仅需要统计出入度,直接统计的方案更轻量。
内容的提问来源于stack exchange,提问作者sumanth s
相关产品推荐
相关产品推荐

