光伏发电预测(一)

鉴于看得人变多了,说明一下:博主本职是Python开发,现在偏向全栈的移动端开发·······这个比赛和文章是在大三想尝试这个方向才去做(写)的。实在是很业余,首先希望不要误人子弟,其次对大家有帮助最好
代码早就不在了,数据还有,看到都会发的
2021/07/19. 以下为原文


最近参加了一个光伏发电预测的比赛,第一次接触这类课题,看了很多关于光伏发电预测和负荷预测的论文,算是入了一个门。主要工作还是在数据清理上和特征工程上。做好了这两项后面的预测过程倒是比较简单。比赛要求:利用之前若干时段的光伏发电参数,预测未来两个月的正向有功总电量。
具体见下文。

一、数据分析

原始数据表 “data.csv”,提供了用户 A1-A5 的 2016 年 12 月 31 日-2018 年 1 月 1 日 瞬时有功、瞬时无功、A相电流、B 相电流、C 相电流、A 相电压、B 相电压、C 相电压、正向有功总 9 个属性的数据表,共 342768 条数据,其中正向有功为预测对象。截取其中一个月的数据图形如下图1所示,可知预测对象正向有功为累计值,呈其他 8 个属性数据为瞬时值,需对正向有功进行差分处理,转化为瞬时值。另外,每日数据为从晚至早逆序排列,也需逆序处理。

图1 2016年12月正向有功总值变化图

图2 2016年12月主要属性变化图

图3 2016年12月正向有功总值差分变化图

通过对每日采集点的频数统计,显示每日数据值小于 96 点的日期,缺失情况如图4,发现数据集中存在缺失值,需补充完整。

图4 A1公司数据缺失日期统计

二、算法原理

本次预测算法,采用 python2.7.12(比赛环境要求) 编写,程序分为 LoadData.py 和 PredictLabel.py 两部分。

1、LoadData.py

LoadData.py 程序的主要功能为数据清洗,具体函数如下:
(1)splitDataSet():主要功能是划分数据:将“data.csv”数据集按用户类型A1-A5划分为五个数据集,以便分别处理和预测。
(2)reduceDataSet(work):主要功能是对数据进行清洗:其一,根据属性相关性计算结果剔除瞬时无功、A相电流、B相电流、C相电流、A相电压、B相电压、C相电压等7列属性,增加A相功率、B相功率和C相功率3列。其二,由于预测值正向有功是连续数据,按照缺失值等于前期值,补全所有数据缺失点,并计算每日增量,将正向有功累积值转化为瞬时值。其三,将数据表中属性值倒叙累加,得到每天0点时刻瞬时有功、A相功率、B相功率和C相功率的每天累加值,并根据初赛要求,提取所有0点时刻采集的数据。
(3)loadDataSet(work):主要功能是提取经过数据清晰的训练数据集
(4)loadWeatherData():主要功能是提取外部天气数据集。
(5)normData(dataSet):主要功能是对数据进行无量纲归一化处理。
(6)loadFutureWeatherData():主要功能是提取预测数据集的属性值(2018年8月-9月天气数据)
(7)saveFile(work):主要功能是保存程序运行的中间数据文件

2、PredictLabel.py

PredictLabel.py程序的主要功能是执行样本训练和数据预测,具体函数如下:
(1)nn_model()主要功能为利用训练样本训练神经网络模型
(2)nn_model_weather():主要功能利用预测数据训练预测模型
(3)predictLabel(predictData,trainData,trainLabel,lastLabel):主要功能为执行电力预测,利用训练好的模型(模型为keras中的全连接神经网络nn_model),调用预测数据,输出正向有功预测结果。
(4)predictDataFunc(predictData,trainData,trainLabel):主要功能为执行属性预测,利用训练好的模型(模型为keras中的全连接神经网络nn_model),调用外部数据,输出属性预测结果。
(5)concatCSV():主要功能为拼接预测数据表。

三、方案设计

1、数据处理

步骤1:将原始数据划分为A1-A5五个用户数据集;
步骤2:将用户数据集的缺失数据补全;
步骤3:根据初赛要求,提取每日0点数据;
步骤4:将正向有功总值进行每日增量计算,得到正向有功每日瞬时值;

2、指标筛选

步骤1:新增A相功率、B相功率和C相功率3列属性;
步骤2:将瞬时有功、A相功率、B相功率和C相功率数据倒序累加得到累计值;
步骤3:计算瞬时无功、A相电流、B相电流、C相电流、A相电压、B相电压、C相电压瞬时值和瞬时有功、A相功率、B相功率和C相功率累计值与预测对象正向有功每日瞬时值之间的相关性;
步骤4:计算外部数据集中日平均气温、日最高气温、日最低气温、日照时长和降水量等属性指标与预测对象瞬时有功之间的相关性;
步骤5:根据相关性结果,选择高相关性的指标形成用户电量预测数据集(具体为瞬时有功、A相功率、B相功率、C相功率);根据相关性结果,选择高相关性的指标形成瞬时有功预测数据集(具体为日平均气温、日最高气温、日最低气温、日照时长和降水量);

3、模型优化

步骤1:在用户电量预测数据集中,选择80%数据样本进行模型训练,以最小 MSE 为标准优化模型参数,重复10次;在瞬时有功预测数据集中,选择80%数据样本进行模型训练,以最小 MSE 为标准优化模型参数,重复10次。
步骤2:在用户电量预测数据集中,选择剩下20%数据,带入训练好的模型中进行电量预测,计算预测结果的MESE;在瞬时有功预测数据集中,选择剩下20%数据,带入训练好的模型中进行电量预测,计算预测结果的MESE;
步骤3:根据预测结果MSE,确定预测模型

4、预测结果

步骤1:将2018年8月-2018年9月的外部数据作为属性值代入瞬时有功预测模型,得到2018年8月-2018年9月的瞬时有功预测值。
步骤2:利用步骤一中预测的2018年8月-2018年9月的瞬时有功预测值,调用另一个模型预测2018年8月-2018年9月的每天正向有功的增量的值
步骤3:将增量累加到2018年7月31日的正向有功值,得到每天的累计正向有功值。

四、模型效果

使用K-交叉验证,每次取 0.8 的数据集作为样本,和 0.2 的验证集比较。
模型1的准确率:80%以上。
模型2:80%以上。
最终值(累加后的)准确率:99%左右

由于最终值是一个累加值,初始值达数千,而每天的增量范围为0-50,因此最终的预测结果非常理想。

数据 链接:https://pan.baidu.com/s/1pHvFtv_2DO4YKDrge5JU2Q 密码:wkat 代码不在了

  • 14
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
光伏发电预测在Python中可以使用各种方法和库来实现。以下是一种常见的方法: 1. 数据收集:首先,你需要收集历史光伏发电数据,包括发电量和相关的气象数据,如太阳辐射、温度等。这些数据可以通过传感器、气象站或其他数据源获取。 2. 数据预处理:对收集到的数据进行预处理,包括数据清洗、缺失值处理、异常值处理等。确保数据的质量和完整性。 3. 特征工程:根据领域知识和相关背景,选择合适的特征。可能的特征包括日期、时间、太阳辐射、温度、湿度等。还可以考虑添加时序特征,如前一天的发电量等。 4. 数据划分:将数据集划分为训练集和测试集。通常可以选择将最近一段时间的数据作为测试集,其余数据作为训练集。 5. 模型选择和训练:选择适合的预测模型进行训练。常见的模型包括线性回归、支持向量机、决策树等。你可以使用Python中的机器学习库,如scikit-learn来实现这些模型。 6. 模型评估:使用测试集对训练好的模型进行评估。常见的评估指标包括均方根误差(RMSE)、平均绝对误差(MAE)等。 7. 预测:使用训练好的模型对未来的光伏发电进行预测。可以根据需要选择预测的时间范围和时间间隔。 以上是一个简单的光伏发电预测的Python流程。具体实现会根据数据集和模型选择的不同而有所差异。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值