1. 桑基图基础与Python实现方案
桑基图(Sankey Diagram)作为数据流向分析的神器,在能源管理、供应链追踪和资金流动分析等领域有着不可替代的作用。我第一次接触这种图表是在分析公司年度能源消耗报告时,当时就被它直观展示复杂流向的能力所震撼。
1.1 桑基图的核心特征
桑基图最显著的特点是它的"能量守恒"特性。图中所有主支宽度的总和必须与分支宽度的总和严格相等,这种特性使得它特别适合展示转化率、损耗分析等场景。举个例子,当我们分析电商用户行为路径时,从首页到商品页的流量宽度,应该等于商品页到购物车、收藏夹等所有分支流量的总和。
典型的桑基图包含三个核心元素:
- 节点(Node):表示流程中的不同阶段或状态
- 连线(Link):表示流量路径,宽度与流量值成正比
- 流向(Flow):数据移动的方向,通常用颜色深浅区分
1.2 Python生态中的桑基图方案
Python中有多个库可以生成桑基图,经过多次实践对比,我总结出以下方案选择建议:
-
pyecharts(推荐方案):
- 优势:交互性强,支持动态效果,中文文档完善
- 适合场景:需要展示给非技术人员的报告、网页嵌入
- 典型应用:销售漏斗分析、用户行为路径
-
plotly:
- 优势:支持3D桑基图,与Dash框架无缝集成
- 适合场景:需要高度定制化的分析仪表盘
- 典型应用:供应链物流追踪、能源系统监控
-
matplotlib(基础方案):
- 优势:无需额外依赖,适合简单静态图
- 适合场景:快速验证数据、学术论文插图
- 典型应用:科研数据可视化、简单流程展示
提示:如果项目需要长期维护,建议优先考虑pyecharts。我在三个实际项目中使用过它,其API稳定性和社区支持都令人满意。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据准备与预处理实战
2.1 Excel数据规范设计
正确的数据结构是生成桑基图的前提。根据我的项目经验,推荐使用以下标准化模板:
| Source | Target | Value | Category | Notes |
|---|---|---|---|---|
| 煤炭 | 发电 | 100 | 能源 | 主能源输入 |
| 发电 | 工业 | 45 | 能源 | 工业用电 |
| 发电 | 居民 | 30 | 能源 | 居民用电 |
关键规范要求:
- 必须包含三列基础数据:Source(起点)、Target(终点)、Value(流量值)
- 分类列(Category)非必需但强烈建议添加,可用于后续分组着色
- 避免使用特殊字符作为节点名称(如@#等)
- 空值处理:建议用"Unknown"替代空值,避免解析错误
2.2 Python数据清洗技巧
从Excel导入数据后,通常需要以下预处理步骤:
python复制import pandas as pd
# 读取数据时的实用参数
data = pd.read_excel('energy_flow.xlsx',
usecols=['Source','Target','Value'], # 明确指定列
dtype={'Value': float}, # 强制类型转换
na_values=['NA','-']) # 自定义
