基于 Flask + VMD + BiGRU-Transformer 的光伏功率预测系统实战:从数据上传到 96 点功率预测可视化
项目源码及资料:https://download.csdn.net/download/DeepLearning_/92814199
一、项目简介
最近做了一个面向光伏场景的功率预测项目:光伏功率预测系统。它不仅仅是一个单纯的模型脚本,而是一个完整的 Web 系统,支持用户登录、数据上传、预测分析、日历展示、仪表盘统计、消息管理等功能。
和很多“只停留在模型训练阶段”的项目不同,这个系统更强调“模型 + 平台化展示 + 业务落地”的结合:
- 后端用
Flask搭建 Web 服务 - 数据层使用
SQLite封装访问 - 预测核心采用 VMD 分解 + 8 模态融合预测
- 单模态模型基于 BiGRU + Transformer
- 前端通过原生
HTML + CSS + JavaScript与Chart.js完成页面展示
如果你正在做:
- 光伏功率预测
- 时间序列预测系统
- 深度学习模型的 Web 部署
- 毕设/课程设计/工程实训
那么这个项目会很有参考价值。
二、项目能做什么?
这个系统并不是“上传文件 -> 返回一个数值”这么简单,而是围绕光伏功率预测场景做了完整设计。
1. 用户认证
系统支持用户注册、登录、退出,并通过会话机制控制访问权限。
适合做多用户的数据管理和预测结果隔离。
2. 数据文件上传与管理
用户可以上传光伏功率 Excel 数据文件,系统会自动:
- 校验文件格式
- 保存原始文件
- 记录文件信息到数据库
- 自动触发预测流程
同时支持文件列表、分类筛选、信息编辑、数据预览和删除。
3. 仪表盘可视化
系统首页提供了比较完整的业务指标展示,例如:
- 当日预测总功率
- 当日预测准确率
- 异常报警数
- 过去 7 天预测值与实际值对比
- 月度预测曲线
- 年度收益趋势
这类页面非常适合作为课程设计答辩或者项目展示首页。
4. 发电日历
发电日历页面可以按月查看每日功率情况,将预测值、实际值、异常统计结合起来展示,更接近真实业务系统的交互方式。
5. 96 点细粒度功率预测
项目的一大亮点,是将一天按照 15 分钟一个时间点 进行划分,总共得到 96 个时间点 的预测结果。
相比简单的“日总发电量预测”,这种方式具有更高的业务价值:
- 能反映一天内功率波动变化
- 更适合调度、消纳、异常监控
- 更接近实际电站运行分析需求
三、技术栈总览
后端技术
Flask 3.0.0Flask-CORSWerkzeugSQLite
数据与算法
PandasNumPyScikit-learnTensorFlow 2.16.1Keras 3.0.0vmdpyjoblib
前端技术
HTML5CSS3JavaScriptChart.js
从技术复杂度来看,这个项目属于比较典型的“机器学习/深度学习 + Web 系统集成”方案,很适合作为完整项目案例。
四、项目结构解析
项目目录比较清晰,核心结构如下:
guangfufa/
├── app.py # Flask 主应用
├── model_predictor.py # 核心预测逻辑
├── sqlite_db.py # SQLite 数据库封装
├── requirements.txt # 依赖文件
├── database.sql # 数据库脚本
├── daily_power_model.h5 # 兼容旧模型
├── daily_power_scaler.pkl # 兼容旧标准化器
├── NEW_MODELS/ # 新版 8 模态模型目录
├── templates/ # 页面模板
├── static/ # 静态资源
├── uploads/ # 上传数据文件
├── instance/
│ └── solar_power_forecast.db
└── docs/
└── VMD融合预测模型文档.md
核心文件职责
app.py
负责:
- 路由定义
- 用户认证
- 文件上传与管理
- 页面渲染
- 接口返回
- 调用预测器完成预测
model_predictor.py
负责:
- VMD 分解
- 特征工程
- 8 个模态模型加载
- 多模态预测结果融合
- 结果写入数据库
sqlite_db.py
负责:
- 初始化数据库
- 创建表结构
- 封装 SQLite 连接与游标
- 将
%s风格 SQL 自动适配到 SQLite
这一点很巧妙:上层业务代码可以保留类似 MySQL 的写法,但底层由封装层自动转成 SQLite 执行。
五、系统核心:预测模型是怎么设计的?
这套系统最有含金量的地方,在于它不是用一个普通 LSTM 直接预测,而是采用了更完整的多阶段预测方案。
1. 整体流程
完整流程如下:
原始光伏功率数据
→ VMD 分解为 8 个模态分量
→ 每个模态分别输入独立深度学习模型
→ 各模态预测结果融合求和
→ 得到最终 96 点功率预测结果
2. 为什么要先做 VMD 分解?
光伏功率序列往往具有以下特点:
- 非平稳
- 多尺度波动明显
- 受天气、季节、时间共同影响
- 噪声较多
VMD(变分模态分解)可以把原始复杂信号拆成多个频率成分更稳定的模态,从而让后续模型更容易学习规律。
简单理解就是:
先把复杂问题拆开,再分别建模,最后再融合,比“一把梭”直接预测更稳。
3. 单模态模型结构
每个模态并不是简单回归,而是使用了 BiGRU + Transformer 的组合:
- BiGRU:提取双向时序依赖
- Transformer 编码器:强化长距离依赖建模能力
- Dense 层:输出下一天的 96 个时间点预测结果
这样的结构兼顾了:
- 时序信息建模
- 局部与全局依赖提取
- 对复杂序列的表达能力
4. 预测窗口设计
系统使用 14 天历史数据 作为输入窗口,预测下一天的 96 个时间点。
这比仅用 1~3 天历史的方式更容易学习季节变化、周内周期和近期波动模式。
六、特征工程怎么做?
很多时候,模型效果好不好,不只是网络结构的问题,特征工程也非常关键。
这个项目在推理阶段构建了多类特征:
1. 时间特征
通过周期编码提取时间规律:
- 年内日期正余弦编码
- 月份正余弦编码
- 星期特征
- 是否周末
这有助于模型学习季节性和周期性。
2. 统计特征
对每日 96 点功率计算:
- 日总功率
- 日最大值
- 日均值
- 日标准差
并加入滞后统计量,帮助模型理解最近一段时间的变化趋势。
3. 滚动特征
例如:
- 7 天滚动均值
- 7 天滚动标准差
- 14 天滚动均值
这类特征对时间序列预测非常实用。
4. Lag 特征
对 96 个时间点分别构造滞后值,让模型学习“昨天同一时间点”和“今天预测点”之间的映射关系。
七、异常检测也考虑进去了
这个项目不仅预测功率,还考虑了异常数据问题。
系统中使用了 Isolation Forest(孤立森林) 做异常检测,用于识别功率数据中的异常情况。
这在实际场景里非常重要,因为光伏功率数据经常会受到以下因素影响:
- 设备故障
- 传感器异常
- 极端天气
- 缺失值或突刺值
加入异常检测之后,系统不仅可以“预测”,还可以辅助“监测”。
八、数据库设计思路
这个项目当前采用 SQLite,非常适合本地演示、课程设计和轻量部署。
主要数据表
1. users
存储用户信息。
2. data_files
记录用户上传的数据文件,包括:
- 文件名
- 文件路径
- 上传时间
- 数据分类
- 描述信息
- 状态
3. predictions
保存按天聚合的预测结果。
4. predictions_96point
保存最关键的 96 点预测明细,包括:
- 预测日期
- 时间点名称
- 时间点序号
- 预测功率
- 实际功率
5. messages
支持系统消息或用户间消息功能。
从这里也能看出,作者并不是只做了个“算法 demo”,而是按照小型业务系统的思路来设计数据结构的。
九、项目亮点总结
我认为这个项目至少有下面几个亮点:
亮点 1:不是单纯模型,而是完整系统
很多项目只到 .ipynb 或训练脚本结束,而这个项目已经完成了:
- 模型预测
- 数据上传
- 数据持久化
- 可视化展示
- 用户系统
- 页面交互
完整度很高。
亮点 2:预测粒度足够细
按 15 分钟输出一次,一天共 96 点,比“只预测日总发电量”更实用。
亮点 3:采用 VMD + 多模态融合思路
相比传统单模型预测,这种结构更适合复杂非平稳时序。
亮点 4:适合答辩和展示
这个项目具备典型“可演示特征”:
- 有登录页
- 有仪表盘
- 有图表
- 有数据管理页面
- 有预测结果页面
无论是课程答辩、毕业设计还是比赛作品展示,都比较加分。
十、如何运行这个项目?
1. 安装依赖
pip install -r requirements.txt
2. 准备模型文件
确保项目目录下存在:
NEW_MODELS/中的 8 个模态模型及对应 scaler/config- 或者兼容旧模型
daily_power_model.h5与daily_power_scaler.pkl
3. 启动项目
python app.py
启动后即可通过浏览器访问本地服务。
4. 上传数据进行预测
上传的 Excel 文件需要包含:
SDATE日期列DATA_小时_分钟格式的 96 个功率点列
例如:
SDATE, DATA_0_0, DATA_0_15, DATA_0_30, ..., DATA_23_45
十一、这个项目适合哪些人参考?
我觉得以下几类同学会比较需要这个项目:
1. 做毕业设计的同学
尤其是这些方向:
- 光伏功率预测
- 风电/新能源预测
- 时间序列分析
- 智慧能源系统
- 深度学习部署
2. 做课程设计/实训的同学
因为它同时涵盖:
- 后端开发
- 前端页面
- 数据处理
- 深度学习推理
- 数据库存储
3. 想把算法“做成系统”的同学
很多人会训练模型,但不会部署。这个项目正好能提供一套从模型到系统的完整思路。
十二、可以继续优化的方向
当然,这个项目还有不少可扩展空间。
1. 接入天气特征
目前主要围绕功率历史序列建模,如果加入:
- 辐照度
- 温度
- 云量
- 湿度
- 风速
通常还能进一步提升预测精度。
2. 增加模型训练管理页面
目前项目更偏向“推理部署”,如果增加训练任务管理、模型版本管理,会更像工业级平台。
3. 支持多站点预测
当前数据结构已经具备一定扩展性,可以继续支持电站级管理。
4. 优化前端交互体验
比如:
- 增加更细粒度图表联动
- 提供更多筛选维度
- 支持导出预测报表
十三、结语
总体来说,这是一个完成度较高的光伏功率预测项目。
它的价值不只是“用了什么模型”,更在于把 预测算法、数据处理、数据库、可视化、用户交互 串成了一个完整闭环。
如果你正在做新能源预测相关项目,这类“算法 + 系统展示”的路线,往往比单纯给出一个模型精度更有说服力。

1060

被折叠的 条评论
为什么被折叠?



