毕设选题-深度学习光伏功率预测系统实战附源码及资料

基于 Flask + VMD + BiGRU-Transformer 的光伏功率预测系统实战:从数据上传到 96 点功率预测可视化

项目源码及资料:https://download.csdn.net/download/DeepLearning_/92814199

一、项目简介

最近做了一个面向光伏场景的功率预测项目:光伏功率预测系统。它不仅仅是一个单纯的模型脚本,而是一个完整的 Web 系统,支持用户登录、数据上传、预测分析、日历展示、仪表盘统计、消息管理等功能。

和很多“只停留在模型训练阶段”的项目不同,这个系统更强调“模型 + 平台化展示 + 业务落地”的结合:

  • 后端用 Flask 搭建 Web 服务
  • 数据层使用 SQLite 封装访问
  • 预测核心采用 VMD 分解 + 8 模态融合预测
  • 单模态模型基于 BiGRU + Transformer
  • 前端通过原生 HTML + CSS + JavaScriptChart.js 完成页面展示

如果你正在做:

  • 光伏功率预测
  • 时间序列预测系统
  • 深度学习模型的 Web 部署
  • 毕设/课程设计/工程实训

那么这个项目会很有参考价值。


二、项目能做什么?

这个系统并不是“上传文件 -> 返回一个数值”这么简单,而是围绕光伏功率预测场景做了完整设计。

1. 用户认证

系统支持用户注册、登录、退出,并通过会话机制控制访问权限。

适合做多用户的数据管理和预测结果隔离。

2. 数据文件上传与管理

用户可以上传光伏功率 Excel 数据文件,系统会自动:

  • 校验文件格式
  • 保存原始文件
  • 记录文件信息到数据库
  • 自动触发预测流程

同时支持文件列表、分类筛选、信息编辑、数据预览和删除。

3. 仪表盘可视化

系统首页提供了比较完整的业务指标展示,例如:

  • 当日预测总功率
  • 当日预测准确率
  • 异常报警数
  • 过去 7 天预测值与实际值对比
  • 月度预测曲线
  • 年度收益趋势

这类页面非常适合作为课程设计答辩或者项目展示首页。

4. 发电日历

发电日历页面可以按月查看每日功率情况,将预测值、实际值、异常统计结合起来展示,更接近真实业务系统的交互方式。

5. 96 点细粒度功率预测

项目的一大亮点,是将一天按照 15 分钟一个时间点 进行划分,总共得到 96 个时间点 的预测结果。

相比简单的“日总发电量预测”,这种方式具有更高的业务价值:

  • 能反映一天内功率波动变化
  • 更适合调度、消纳、异常监控
  • 更接近实际电站运行分析需求

三、技术栈总览

后端技术

  • Flask 3.0.0
  • Flask-CORS
  • Werkzeug
  • SQLite

数据与算法

  • Pandas
  • NumPy
  • Scikit-learn
  • TensorFlow 2.16.1
  • Keras 3.0.0
  • vmdpy
  • joblib

前端技术

  • HTML5
  • CSS3
  • JavaScript
  • Chart.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.h5daily_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. 优化前端交互体验

比如:

  • 增加更细粒度图表联动
  • 提供更多筛选维度
  • 支持导出预测报表

十三、结语

总体来说,这是一个完成度较高的光伏功率预测项目。

它的价值不只是“用了什么模型”,更在于把 预测算法、数据处理、数据库、可视化、用户交互 串成了一个完整闭环。

如果你正在做新能源预测相关项目,这类“算法 + 系统展示”的路线,往往比单纯给出一个模型精度更有说服力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onnx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值