首页 > 编程语言 >Python时间序列模型分析太阳能光伏发电数据:灰色模型GM(1,1)、ARIMA、指数平滑法可视化分析

Python时间序列模型分析太阳能光伏发电数据:灰色模型GM(1,1)、ARIMA、指数平滑法可视化分析

时间:2024-07-04 23:32:19浏览次数:22  
标签:预测 Python 模型 ARIMA 残差 光伏 序列 数据

全文链接:https://tecdat.cn/?p=36660

原文出处:拓端数据部落公众号

在可再生能源领域中,太阳能光伏发电作为一种清洁、可再生的能源形式,近年来得到了广泛关注与应用。随着技术的进步和成本的降低,光伏发电已成为全球能源结构转型的重要方向之一。然而,光伏发电的发电量受多种因素影响,如天气条件、设备状态、地理位置等,导致发电量呈现出高度的不确定性和波动性。因此,准确预测光伏发电量对于电网调度、能源管理以及投资者决策具有重要意义。

本文旨在通过Python编程语言,结合灰色模型GM(1,1)、ARIMA模型和指数平滑法,帮助客户对太阳能光伏发电数据进行时间序列分析,并可视化展示预测结果。通过对比不同模型的预测精度和适用场景,为光伏发电量预测提供一种更为科学、合理的方法。同时,本文的研究成果也将为电网调度、能源管理以及投资者决策提供有价值的参考依据。

时间序列分析

时间序列分析作为预测领域的重要工具,在光伏发电量预测中发挥着关键作用。通过时间序列模型,可以对历史数据进行深入分析,挖掘数据背后的规律和趋势,从而实现对未来光伏发电量的合理预测。在众多时间序列模型中,灰色模型GM(1,1)、ARIMA模型和指数平滑法因其独特的优势,在光伏发电量预测中得到了广泛应用。

灰色模型GM(1,1)是由我国学者邓聚龙教授创立的灰色系统理论中的一个基本模型。该模型特别适用于处理小样本和不完全信息情况下的预测问题。在光伏发电量预测中,由于数据收集难度大、数据质量参差不齐,GM(1,1)模型能够在数据不足的情况下,通过一定的数据处理和模型构建,实现对光伏发电量的有效预测。此外,GM(1,1)模型还具有计算简便、预测精度较高的特点,因此在经济分析、环境预测等领域得到了广泛应用。

ARIMA模型,即自回归积分滑动平均模型,是一种经典的时间序列预测模型。该模型通过结合自回归(AR)、差分(I)和滑动平均(MA)三个部分,实现对时间序列数据的拟合和预测。ARIMA模型在光伏发电量预测中的应用,可以通过对历史发电量数据的分析,提取出数据中的季节性、周期性等特征,从而实现对未来光伏发电量的准确预测。该模型在多个领域的应用中均表现出了较高的预测精度和稳定性。

指数平滑法是一种基于移动平均的时间序列预测方法,通过赋予不同时间点的观测值不同的权重,实现对时间序列的平滑处理。在光伏发电量预测中,指数平滑法可以较好地反映光伏发电量的变化趋势,同时减少随机波动对预测结果的影响。该方法具有计算简便、易于实现的特点,在光伏发电量短期预测中得到了广泛应用。

数据可视化分析

首先,我将打开数据文件,以了解其内容和结构。这将帮助我决定如何最好地进行数据可视化分析。

image.png

根据数据的性质和内容选择合适的图表进行展示。

   
python复制
import pandas as pd

# 载入Excel文件
file_path = '太阳能光伏发电数据.xlsx'

接下来,查看'Quarter'工作表的内容。

为了进行可视化分析,我将首先整理这些数据,使其格式适合进行图表展示。然后,我将根据数据的性质选择合适的图表类型进行可视化。让我们开始整理数据。

   
python复制
# 重新整理Quarter工作表的数据
# 考虑到表格的复杂性,我们需要小心地处理合并单元格和跨列标题

# 提取年份和季度信息
years = quarter_sheet_full.iloc[2, 1:].dropna().values
quarters = quarter_sheet_full.iloc[3, 1:].dropna().values

# 创建一个新的DataFrame来存储整理后的数据
organized_data = pd.DataFrame()

# 遍历年份和季度,提取对应的数据
for i, year in enumerate(years):
    for j, quarter in enumerate(quarters):
        # 计算当前年份和季度的列索引
        col_index = i * 5 + j + 1
        # 提取对应列的数据
        year_quarter_data = quarter_sheet_full.iloc[6:, [0, col_index]].dropna()
        year_quarter_data.columns = ['Country', f'{year}-{quarter}']
        year_quarter_data['Year'] = year
        # 合并到总数据中
        organized_data = pd.concat([organized_data, year_quarter_data], ignore_index=True)

organized_data.head()

python复制
# 查看Month工作表的内容
month_sheet_full = all_sheets['Month']
month_sheet_full.head(20)  # 显示前20行以了解表格结构

'Month'工作表包含了按月份划分的太阳能光伏发电的累计容量数据。这个表格包括了不同类别下的月度数据,如“MCS registered (GB only)”、“ROO-FiT accredited (GB only)”等。

为了进行可视化分析,我将整理这些数据,使其格式适合进行图表展示。然后,我将根据数据的性质选择合适的图表类型进行可视化。

接下来,我将使用这些数据进行可视化分析。考虑到数据的性质,我计划使用以下几种图表类型:

  1. 折线图:展示不同类别随时间的变化趋势。
  2. 柱状图:比较不同类别在特定月份的累计容量。

image.png

image.png

  1. 折线图:展示了2018年1月至3月各类别太阳能光伏发电累计容量的变化趋势。从图中可以看出,不同类别的太阳能光伏发电累计容量在这三个月内有所变化,其中某些类别的增长趋势较为明显。
  2. 柱状图:比较了2018年1月至3月各类别太阳能光伏发电的累计容量。这个图表直观地展示了在不同月份中,哪些类别的太阳能光伏发电累计容量较高。

使用'Quarter'工作表中的数据进行时间序列的可视化分析。这个工作表包含了按季度划分的太阳能光伏发电数据,适合进行时间序列分析。

接下来,我将使用这些数据进行可视化分析。考虑到数据的性质,我计划使用以下几种图表类型:

  1. 折线图:展示2018年各季度各类别太阳能光伏发电累计容量的变化趋势。
  2. 柱状图:比较2018年各季度不同类别的太阳能光伏发电累计容量。

1.png

image.png

  1. 折线图:展示了2018年各季度各类别太阳能光伏发电累计容量的变化趋势。从图中可以看出,不同类别的太阳能光伏发电累计容量在2018年的四个季度内有所变化。
  2. 柱状图:比较了2018年各季度不同类别的太阳能光伏发电累计容量。这个图表直观地展示了在不同季度中,哪些类别的太阳能光伏发电累计容量较高。

依次处理2019年、2020年和2021年的数据,并进行可视化分析。

image.png

image.png

接下来,我将对2020年和2021年的数据进行类似的分析。

image.png

image.png

接下来,我将对2021年的数据进行类似的分析。

image.png

image.png

时间序列分析

时间序列分析通常需要较长的时间范围来捕捉数据中的模式和趋势,我们将选择一个具有足够长时间范围的数据集。考虑到'Quarter'工作表包含了多年的季度数据,我们将使用这些数据进行分析。

我将首先使用ARIMA模型进行时间序列分析。ARIMA(自回归整合移动平均模型)是一种常用的时间序列预测方法,适用于具有趋势和季节性的数据。

进行ARIMA模型的时间序列分析。

   

# 获取模型摘要
model_summary = model_fit.summary()
model_summary

ARIMA模型的拟合结果如下:

  • 模型类型:ARIMA(1, 1, 1)
  • 观测值数量:131
  • 对数似然值:-1128.342
  • AIC:2262.684
  • BIC:2271.286
  • 样本范围:0至131
  • 协方差类型:opg

模型参数估计结果:

  • AR(1)系数:-0.5105
  • MA(1)系数:-1.0000
  • 方差:1.954e+06

模型诊断:

  • Ljung-Box (L1) (Q)测试:3.54,p值为0.06
  • Jarque-Bera (JB)测试:506.98,p值为0.00
  • 异方差性 (H)测试:10.06,p值为0.00

这些结果提供了模型拟合的统计信息,包括参数估计和模型诊断测试。根据这些结果,可以对模型的适用性和预测能力进行评估。

接下来,我将进行模型的可视化分析,展示模型的预测结果和实际数据的对比,以及模型的残差分析。这将有助于进一步评估模型的性能。

image.png

image.png

image.png

我已经完成了ARIMA模型的预测结果与实际数据的对比可视化,以及模型残差的可视化分析。

  1. 预测结果与实际数据对比:第一张图展示了ARIMA模型的预测结果与实际数据的对比。可以看到预测曲线与实际数据曲线的趋势相似,但存在一定的偏差。
  2. 模型残差密度图:第二张图是模型残差的密度图,展示了残差的分布情况。
  3. 模型残差直方图:第三张图是模型残差的直方图,也展示了残差的分布情况。

指数平滑法

使用指数平滑法进行时间序列分析。这种方法适用于具有趋势和季节性的数据。

进行指数平滑法的时间序列分析。

image.png image.png

image.png

  1. 模型摘要:指数平滑法的模型摘要提供了模型的统计信息,包括参数估计和模型诊断测试。
  2. 预测结果与实际数据对比:第一张图展示了指数平滑法的预测结果与实际数据的对比。可以看到预测曲线与实际数据曲线的趋势相似,但存在一定的偏差。
  3. 模型残差密度图:第二张图是模型残差的密度图,展示了残差的分布情况。
  4. 模型残差直方图:第三张图是模型残差的直方图,也展示了残差的分布情况。

灰色模型GM(1,1)

使用灰色模型GM(1,1)进行时间序列分析。灰色模型是一种单变量时间序列模型,适用于具有不确定性的数据。

进行灰色模型GM(1,1)的时间序列分析。

image.png

image.png

image.png

  1. 模型摘要:灰色模型GM(1,1)的模型摘要提供了模型的统计信息,包括参数估计和模型诊断测试。
  2. 预测结果与实际数据对比:第一张图展示了灰色模型GM(1,1)的预测结果与实际数据的对比。可以看到预测曲线与实际数据曲线的趋势相似,但存在一定的偏差。
  3. 模型残差密度图:第二张图是模型残差的密度图,展示了残差的分布情况。
  4. 模型残差直方图:第三张图是模型残差的直方图,也展示了残差的分布情况。

2020_leading-off-520x290.jpg

标签:预测,Python,模型,ARIMA,残差,光伏,序列,数据
From: https://www.cnblogs.com/tecdat/p/18284889

相关文章

  • R语言武汉流动人口趋势预测:灰色模型GM(1,1)、ARIMA时间序列、logistic逻辑回归模型|附代
    全文链接:http://tecdat.cn/?p=32496原文出处:拓端数据部落公众号人口流动与迁移,作为人类产生以来就存在的一种社会现象,伴随着人类文明的不断进步从未间断。人力资源是社会文明进步、人民富裕幸福、国家繁荣昌盛的核心推动力量。当前,我国经济正处于从以政府主导的投资驱动型的经......
  • Python性能测试框架:Locust实战教程
    01认识Locust Locust是一个比较容易上手的分布式用户负载测试工具。它旨在对网站(或其他系统)进行负载测试,并确定系统可以处理多少个并发用户,Locust在英文中是蝗虫的意思:作者的想法是在测试期间,放一大群蝗虫攻击您的网站。当然事先是可以用Locust定义每个蝗虫(或测试......
  • python爬虫爬取图片初级
    声明本人也是编程菜鸟用的是pycharm,全是我自已的理解若有错误的地方欢迎指出1.首先导入包importrequestsimportreimporttimerequests网页请求re正侧表达式time防止过快爬取导致网站崩溃2.爬虫基础代码获取网页请求这里我爬的是彼岸图:https://pic.netbian.com......
  • 2024年7月3日Arxiv语言模型相关论文
    RankRAG:在大语言模型中统一上下文排名与检索增强生成原标题:RankRAG:UnifyingContextRankingwithRetrieval-AugmentedGenerationinLLMs作者:YueYu,WeiPing,ZihanLiu,BoxinWang,JiaxuanYou,ChaoZhang,MohammadShoeybi,BryanCatanzaro机构:乔治......
  • 阿里Qwen2-72B大模型已是开源榜的王者,为什么还要推出其他参数模型,被其他模型打榜?
    6月27日,全球知名的开源平台HuggingFace的联合创始人兼首席执行官Clem在社交平台激动宣布,阿里Qwen2-72B成为了开源模型排行榜的王者。这是一件大好事,说明了我们在大模型领域从先前的追赶,逐渐走向了领导,未来完全有可能会引领着全球开源模型的发展潮流,这是我们的骄傲!不......
  • 同步、异步、阻塞、非阻塞、Linux五种 I/O 模型,一篇文章搞定
    ● 什么是同步、什么是异步?什么是阻塞、什么非阻塞?我自己的理解,大白话啊,同步和异步指的是函数调用完成任务的程度。一个任务的完成,包括发起、执行和结果返回三个阶段。 同步(synchronize)调用涵盖了这三个阶段。调用结束之后,任务肯定是有结果的,无论成败。 ......
  • 手把手教你,利用机器学习模型,构建量化择时策略(附全流程代码)
    歌神演唱会人脸识别抓逃犯,阿尔法狗战胜人类围棋手,AI绘图《太空歌剧院》惊艳艺术博览会,ChatGPT一问解千愁~~~这些震撼成果的背后,都是人工智能在蓬勃发力。既然人工智能/机器学习这么厉害,在其他领域都取得了丰硕的成果和巨大的成功,那么是不是可以让计算机帮咱预测市场大盘、......
  • 【机器学习】Google开源大模型Gemma2:原理、微调训练及推理部署实战
    目录一、引言二、模型简介2.1 Gemma2概述2.2Gemma2 模型架构三、训练与推理3.1Gemma2 模型训练3.1.1下载基座模型3.1.2 导入依赖库3.1.3量化配置3.1.4分词器和模型实例化3.1.5引入PEFT进行LORA配置 3.1.6样本数据清洗与加载3.1.7模型训练与保存3.......
  • 2024华为OD机试真题-根据IP查找城市-(C++/Python)-C卷D卷-200分
    2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++)       题目描述某业务需要根据终端的IP地址获取该终端归属的城市,可以根据公开的IP地址池信息查询归属城市。地址池格式如下:城市名=起始IP,结束IP起始和结束地址按照英文逗号分隔,多个地址段采用英文分号分隔。比......
  • python logging 自定义备份的日志文件命名
    importtimeimportloggingfromlogging.handlersimportTimedRotatingFileHandlerdeflog_file_namer(log_file_name):log_file_name_split=log_file_name.split('.')log_suffix=log_file_name_split.pop(1)log_file_name_split.append(l......