• 短期光伏发电量短期预测(Python代码,先对异常值处理,再基于XGBoost模型预测)


    一.代码流程(运行效果:短期光伏发电量短期预测(Python代码,先对异常值处理,再基于XGBoost模型预测)_哔哩哔哩_bilibili

    模型流程:

    1. 导入所需的库,包括NumPy、Pandas、Matplotlib、Seaborn等。

    2. 读取发电数据和天气传感器数据,将它们存储在df_plt1_gendf_plt1_weather中。

    3. 数据预处理:

      • 对发电数据进行了一些处理,包括删除不需要的列、将日期时间列转换为日期时间类型,并根据逆变器创建了新的逆变器列。
      • 天气数据也被处理,删除了不需要的列,将日期时间列转换为日期时间类型。
    4. 确保数据完整性:

      • 创建了一个完整的日期时间序列,以确保数据中没有缺失值。
      • 初始化一个空列表,用于存储处理后的发电数据。
    5. 遍历每个逆变器:

      • 选择特定逆变器的数据。
      • 使用完整的日期时间序列合并数据,以确保没有缺失值。
      • 添加逆变器列并将数据附加到列表中。
    6. 合并所有逆变器的数据,创建了一个完整的数据集df

    7. 提取并映射日期时间特征,计算特征之间的相关性,并检查是否有负值。

    8. 创建一个新的数据集df_eda,用于探索性数据分析(EDA)。

    9. 处理异常值:

      • 创建用于统计异常值的数据集,包括低异常值、高异常值和标准差范围内的数据点。
      • 绘制散点图可视化数据点。
    10. 统计低异常值的数量,包括低异常值且AC功率为0的数量。

    11. 绘制逆变器异常值计数的条形图,包括AC功率为0的部分。

    12. 定义一个函数outliers用于处理异常值,并绘制散点图可视化处理后的数据。

    13. 处理DAILY_YIELD特征的异常值,包括将夜间时间段的发电功率设为0。

    14. 插补缺失值:

      • 使用KNNImputer插补缺失值。
      • 使用时间插值、线性插值和多项式插值方法插补缺失值。
    15. 计算每天的总发电量,并将目标变量向后移动一天,以便进行预测。

    16. 使用季节性分解方法对目标变量进行分解,以查看趋势和季节性成分。

    17. 创建基准模型,计算基准模型的RMSE(均方根误差)。

    18. 准备数据用于机器学习模型和深度学习模型的训练和测试。

    19. 使用XGBoost模型进行训练和测试,评估模型的性能,并绘制预测结果。

    20. 最后,绘制了模型的特征重要性图表。

    二.数据集(68779条数据)

    这些数据是在印度的两个太阳能发电厂收集的,时间跨度为34天。每对文件包含一个电力发电数据集和一个传感器读数数据集。电力发电数据集是在逆变器级别收集的,每个逆变器都连接着多行太阳能电池板。传感器数据是在发电厂级别收集的,是单个传感器阵列在发电厂中的最佳放置。

    • DATE_TIME: 表示日期和时间的时间戳,记录数据采集的具体时间点。
    • PLANT_ID: 发电厂的唯一标识符,用于区分不同的太阳能发电厂。
    • SOURCE_KEY: 太阳能发电设备的唯一标识符,用于区分不同的发电设备。
    • DC_POWER: 直流功率的测量值,表示从太阳能电池板产生的直流电功率。
    • AC_POWER: 交流功率的测量值,表示从逆变器转换后的交流电功率。
    • DAILY_YIELD: 每天的发电量,表示在给定日期内生成的总电量。
    • TOTAL_YIELD: 总发电量,表示从安装以来生成的总电量。

    这些列提供了关于太阳能发电厂的重要信息,包括发电设备的功率输出、每天的发电量以及总发电量。通过这些数据,可以进行发电量的分析、设备性能的评估以及故障检测等任务。

    开始时间

    DATE_TIMEPLANT_IDSOURCE_KEYDC_POWERAC_POWERDAILY_YIELDTOTAL_YIELD
    15-05-2020 00:0041350011BY6WEcLGh8j5v70006259559
    15-05-2020 00:0041350011IF53ai7Xc0U56Y0006183645
    15-05-2020 00:0041350013PZuoBAID5Wc2HD0006987759
    15-05-2020 00:0041350017JYdWkrLSPkdwr40007602960
    15-05-2020 00:004135001McdE0feGgRqW7Ca0007158964
    15-05-2020 00:004135001VHMLBKoKgIrUVDU0007206408
    15-05-2020 00:004135001WRmjgnKYAwPKWDb0007028673
    15-05-2020 00:004135001ZnxXDlPa8U1GXgE0006522172
    15-05-2020 00:004135001ZoEaEvLYb1n2sOq0007098099
    15-05-2020 00:004135001adLQvlD726eNBSB0006271355
    15-05-2020 00:004135001bvBOhCH3iADSZry0006316803
    15-05-2020 00:004135001iCRJl6heRkivqQ30007177992
    15-05-2020 00:004135001ih0vzX44oOqAx2f0006185184
    15-05-2020 00:004135001pkci93gMrogZuBj0007169102
    15-05-2020 00:004135001rGa61gmuvPhdLxV0007111493
    15-05-2020 00:004135001sjndEbLyjtCKgGv0007016832
    15-05-2020 00:004135001uHbuxQJl8lW7ozc0007038681
    15-05-2020 00:004135001wCURE6d3bPkepu20006782598
    15-05-2020 00:004135001z9Y9gH1T5YWrNuG0007007866
    15-05-2020 00:004135001zBIq5rxdHJRwDNY0006339380
    15-05-2020 00:004135001zVJPv84UY57bAof0007116151
    15-05-2020 00:1541350011BY6WEcLGh8j5v70006259559
    15-05-2020 00:1541350011IF53ai7Xc0U56Y0006183645
    15-05-2020 00:1541350013PZuoBAID5Wc2HD0006987759
    15-05-2020 00:1541350017JYdWkrLSPkdwr40007602960
    15-05-2020 00:154135001McdE0feGgRqW7Ca0007158964
    15-05-2020 00:154135001VHMLBKoKgIrUVDU0007206408
    15-05-2020 00:154135001WRmjgnKYAwPKWDb0007028673
    15-05-2020 00:154135001ZnxXDlPa8U1GXgE0006522172

    中期时间段数据展示

    20-05-2020 06:454135001uHbuxQJl8lW7ozc947.87592.087540.257071238.25
    20-05-2020 06:454135001wCURE6d3bPkepu2944.2591.72541.256815390.25
    20-05-2020 06:454135001z9Y9gH1T5YWrNuG953.87592.662540.3757040505.375
    20-05-2020 06:454135001zBIq5rxdHJRwDNY936.759139.6256372010.625
    20-05-2020 06:454135001zVJPv84UY57bAof933.62590.67540.1257148377.125
    20-05-2020 07:0041350011BY6WEcLGh8j5v71564.714286152.9571429686290165
    20-05-2020 07:0041350011IF53ai7Xc0U56Y1790.375175.237576.6256216506.625
    20-05-2020 07:0041350013PZuoBAID5Wc2HD1728.714286169.157142973.714285717020585.714
    20-05-2020 07:0041350017JYdWkrLSPkdwr41690.571429165.428571474.857142867635282.857
    20-05-2020 07:004135001McdE0feGgRqW7Ca1628.714286159.257142971.428571437192169.429
    20-05-2020 07:004135001VHMLBKoKgIrUVDU1727.428571169.042857176.571428577239618.571
    20-05-2020 07:004135001WRmjgnKYAwPKWDb1700166.357142972.571428577061004.571
    20-05-2020 07:004135001YxYtjZvoooNbGkE1593.857143155.7857143707212546
    20-05-2020 07:004135001ZnxXDlPa8U1GXgE1638.428571160.185714359.571428576555195.571
    20-05-2020 07:004135001ZoEaEvLYb1n2sOq1567153.185714369.571428577130401.571
    20-05-2020 07:004135001adLQvlD726eNBSB1818.12517879.1256304592.125
    20-05-2020 07:004135001bvBOhCH3iADSZry1535.71428615066.857142866346973.857
    20-05-2020 07:004135001iCRJl6heRkivqQ31568.857143153.285714369.857142867210787.857
    20-05-2020 07:004135001ih0vzX44oOqAx2f1584.142857154.8571429696217346
    20-05-2020 07:004135001pkci93gMrogZuBj1550.571429151.568.571428577201417.571
    20-05-2020 07:004135001rGa61gmuvPhdLxV1542150.671428668.571428577143880.571
    20-05-2020 07:004135001sjndEbLyjtCKgGv1587.714286155.242857169.571428577049353.571
    20-05-2020 07:004135001uHbuxQJl8lW7ozc1588.571429155.369.714285717071267.714
    20-05-2020 07:004135001wCURE6d3bPkepu21578.571429154.3706815419

    截止时间的数据展示

    17-06-2020 23:304135001wCURE6d3bPkepu20058837028601
    17-06-2020 23:304135001z9Y9gH1T5YWrNuG0058197251204
    17-06-2020 23:304135001zBIq5rxdHJRwDNY0058176583369
    17-06-2020 23:304135001zVJPv84UY57bAof0059107363272
    17-06-2020 23:4541350011BY6WEcLGh8j5v70055216485319
    17-06-2020 23:4541350011IF53ai7Xc0U56Y0060346433566
    17-06-2020 23:4541350013PZuoBAID5Wc2HD0060527237425
    17-06-2020 23:4541350017JYdWkrLSPkdwr40058567846821
    17-06-2020 23:454135001McdE0feGgRqW7Ca0059927408587
    17-06-2020 23:454135001VHMLBKoKgIrUVDU0060077456208
    17-06-2020 23:454135001WRmjgnKYAwPKWDb0059537273532
    17-06-2020 23:454135001YxYtjZvoooNbGkE0058867425442
    17-06-2020 23:454135001ZnxXDlPa8U1GXgE0059296770737
    17-06-2020 23:454135001ZoEaEvLYb1n2sOq0058717341753
    17-06-2020 23:454135001adLQvlD726eNBSB005237.1428576524508
    17-06-2020 23:454135001bvBOhCH3iADSZry0054606539009
    17-06-2020 23:454135001iCRJl6heRkivqQ30059577426263
    17-06-2020 23:454135001ih0vzX44oOqAx2f0057586426129
    17-06-2020 23:454135001pkci93gMrogZuBj0059527415430
    17-06-2020 23:454135001rGa61gmuvPhdLxV0059507356897
    17-06-2020 23:454135001sjndEbLyjtCKgGv0058877261681
    17-06-2020 23:454135001uHbuxQJl8lW7ozc0059677287002
    17-06-2020 23:454135001wCURE6d3bPkepu2005147.6257028601
    17-06-2020 23:454135001z9Y9gH1T5YWrNuG0058197251204
    17-06-2020 23:454135001zBIq5rxdHJRwDNY0058176583369
    17-06-2020 23:454135001zVJPv84UY57bAof0059107363272

     三.效果图

    对项目感兴趣的,可以关注中间一行

    1. import numpy as np
    2. import pandas as pd
    3. import matplotlib.pyplot as plt
    4. import seaborn as sns
    5. sns.set_style('darkgrid')
    6. import warnings
    7. import datetime as dt
    8. import matplotlib.dates as mdates
    9. #代码和数据集的压缩包:https://mbd.pub/o/bread/mbd-ZJ6Zmphv
    10. import numpy as np
    11. import pandas as pd
    12. import matplotlib.pyplot as plt
    13. import seaborn as sns
    14. sns.set_style('darkgrid')
    15. import warnings
    16. import datetime as dt
    17. import matplotlib.dates as mdates

  • 相关阅读:
    springboot自动配置原理面试题(自用)
    godot引擎学习3
    Java性能分析基础(一):常用工具
    Java 代理模式之静态代理与动态代理
    session的状态或者生命周期
    RN6752V1 高性能AHD转MIPI&DVP&BT656&BT601芯片方案,目前适用于车载方案居多
    [YsOI2020]植树
    STM32 IWDG(独立看门狗)
    如何阅读文献
    《Oracle系列》Oracle 通过触发器记录一张表所有数据的增删改操作,然后插入到另外一张表中
  • 原文地址:https://blog.csdn.net/qq_40840797/article/details/133281302