使用NetworkX和PyVis从DataFrame三列构建无权重项目关联网络图
用Pandas、NetworkX和PyVis构建项目-公司-国家关联网络图
步骤1:安装依赖库
先确保安装所需Python库:
pip install pandas networkx pyvis
步骤2:导入库并准备数据
导入库后创建示例DataFrame(真实数据可直接替换示例内容):
import pandas as pd import networkx as nx from pyvis.network import Network # 示例DataFrame data = { 'Company': ['T-mobile', 'T-mobile'], 'Project': ['5G upgrade', 'Network upgrade'], 'Country': ['Germany', 'Kuwait'] } df = pd.DataFrame(data)
步骤3:构建NetworkX无权重图
遍历DataFrame每行数据,添加节点及关联边:
# 初始化无向图 G = nx.Graph() # 遍历数据添加节点与边 for _, row in df.iterrows(): company = row['Company'] project = row['Project'] country = row['Country'] # 添加节点(重复添加会自动忽略) G.add_node(company, label=company, group='company') G.add_node(project, label=project, group='project') G.add_node(country, label=country, group='country') # 建立项目与公司、项目与国家的关联边 G.add_edge(project, company) G.add_edge(project, country)
给节点添加group属性,方便后续可视化时区分节点类型。
步骤4:用PyVis生成交互式网络图
将NetworkX图转换为交互式HTML图:
# 初始化PyVis网络 net = Network(notebook=False, height='750px', width='100%', bgcolor='#222222', font_color='white') # 从NetworkX加载图数据 net.from_nx(G) # 自定义节点颜色(可选) for node in net.nodes: if node['group'] == 'company': node['color'] = '#00ff00' elif node['group'] == 'project': node['color'] = '#0000ff' elif node['group'] == 'country': node['color'] = '#ff0000' # 保存并生成可视化文件 net.show('project_company_country_network.html')
运行后会生成HTML文件,打开即可查看交互式网络图,支持拖拽节点、缩放视图等操作。
关键说明
- 无权重特性:所有边默认权重一致,无需额外配置
- 节点去重:NetworkX的
add_node方法会自动跳过已存在的节点 - 交互优势:PyVis生成的HTML图适合查看复杂关联关系,操作更灵活
内容的提问来源于stack exchange,提问作者German Portes
相关产品推荐
相关产品推荐

