Python基于表格人员数据构建关系图/树的可用库及入门方案咨询
可选Python库
- 图结构处理类:NetworkX:轻量易上手的图数据建模工具,支持快速定义顶点/边属性、查询节点关联关系,适配三层层级关系的结构构建需求
- 交互式可视化类:PyVis:可直接生成带交互能力的HTML格式关系图,支持缩放、拖拽、节点高亮,无需额外前端开发即可实现选中查看逻辑;Plotly:也支持网络图绘制,可搭配Dash开发更复杂的筛选交互
- 本地GUI类:如果要做桌面端应用,可使用PyQt/PySide 搭配 Graphviz 实现,Graphviz的层级布局天然适配你需要的三级节点树状展示效果
- 低代码Demo类:Streamlit + PyVis/Plotly:最快实现可用Demo的组合,Streamlit自带文本输入、下拉筛选组件,几行代码即可完成人员选择触发关系图生成的逻辑
开发步骤
- 数据预处理:先明确表格数据中的关联规则,定义哪些字段属于人员的关联参数(比如所属部门、项目组、毕业院校等),哪些字段对应其他关联人员,把原始表格清洗成可映射的关联对:比如
人员A-关联参数-参数值、参数值-关联人员-人员B的映射关系 - 图结构建模:用NetworkX构建完整的图数据集,给不同层级的节点打分类标记(0级为主人员、1级为关联参数、2级为关联人员),同时可提前配置节点样式属性(颜色、大小、显示名称等)
- 交互逻辑开发:用Streamlit或者PyQt实现交互层,开发人员选择功能,用户选中指定人员后,自动从完整图数据中提取以该人员为中心的三层子图
- 可视化渲染:按照节点层级配置不同的展示样式,用PyVis或者Graphviz渲染为可交互的关系图,展示在前端/桌面界面上
- 功能迭代:可按需新增节点点击查看详情、关联关系筛选、导出图片/数据等附加功能
简易实现模板
以下为Streamlit+PyVis+NetworkX组合的可运行模板,替换数据源即可快速跑通:
import streamlit as st import networkx as nx from pyvis.network import Network import pandas as pd import os # 1. 加载人员表格数据,替换为你自己的数据源路径 @st.cache_data def load_data(): # 示例表格字段参考:人员ID、姓名、部门、项目组、直属领导ID df = pd.read_csv("your_person_data.csv") return df df = load_data() # 2. 人员选择交互组件 person_list = df["姓名"].drop_duplicates().tolist() selected_person = st.selectbox("选择要查询的人员", person_list) # 3. 构建选中人员的三层关系图 if selected_person: G = nx.DiGraph() # 添加一级主节点 main_person = df[df["姓名"] == selected_person].iloc[0] G.add_node(selected_person, level=0, color="#ff4b4b", size=30) # 配置要展示的二级关联参数,可按需增删字段 relate_params = { "所属部门": main_person["部门"], "参与项目": main_person["项目组"], "直属上级": main_person["直属领导ID"] } for param_name, param_val in relate_params.items(): param_node = f"{param_name}:{param_val}" G.add_node(param_node, level=1, color="#4b9bff", size=20) G.add_edge(selected_person, param_node) # 添加三级关联人员节点 relate_persons = df[df[param_name] == param_val]["姓名"].tolist() for p in relate_persons: if p != selected_person: G.add_node(p, level=2, color="#4bff9b", size=15) G.add_edge(param_node, p) # 4. 渲染为交互关系图 net = Network(directed=True, height="600px", width="100%", bgcolor="#222222", font_color="white") net.from_nx(G) # 生成临时HTML文件展示 net.save_graph("temp_graph.html") with open("temp_graph.html", "r", encoding="utf-8") as f: html = f.read() st.components.v1.html(html, height=600) # 清理临时文件 os.remove("temp_graph.html")
依赖安装命令:
pip install streamlit networkx pyvis pandas,运行命令:streamlit run 你的脚本文件名.py
内容的提问来源于stack exchange,提问作者Everlast
相关产品推荐
相关产品推荐

