利用prophet实现时间序列数据结果预测及对预测数据进行年度趋势和月度值分解

news2025/1/9 14:10:37

第一部分:prophet的介绍

选取一段chatgpt对该插件的解释,如下:
Prophet(预言家)是由Facebook开发的开源时间序列分析工具,旨在提供一个简单而强大的框架,用于预测时间序列数据。Prophet的设计目标是使时间序列分析更加可靠、易用,并且适用于各种类型的时间序列数据,无论是在商业、金融、自然资源、社会趋势等领域。

以下是Prophet的一些主要特点和优势:

自动检测季节性和节假日效应: Prophet能够自动检测并建模数据中的季节性和节假日效应,包括年度季节性、周季节性和特定的节假日。

可处理缺失数据和异常值: Prophet可以在存在缺失数据或异常值的情况下进行建模,减少了数据预处理的复杂性。

可解释性: Prophet生成的模型具有可解释性,可以通过分析分解后的成分来理解趋势、季节性和节假日效应对预测的影响。

灵活性: 用户可以根据实际情况,通过添加自定义的季节性和节假日效应来进一步改进模型。

支持多变量预测: Prophet支持对多变量时间序列数据进行预测,用户可以根据需要添加其他影响因素。

易用性: Prophet的API设计友好,使用简单,不需要过多的参数调整。

扩展性: Prophet是基于Stan概率编程语言构建的,因此可以通过调整参数来实现更复杂的建模和预测需求。

总之,Prophet是一个适用于时间序列分析的强大工具,尤其适合于那些对时间序列分析领域不太熟悉的用户。它的特点在于自动化的季节性和节假日效应检测,以及可解释性,使得用户能够更好地理解和预测时间序列数据的趋势和变化。

第二部分:prophet的安装方法

安装Prophet非常简单,可以通过以下步骤在Python环境中安装Prophet:

打开终端或命令提示符。

使用以下命令使用pip安装Prophet包:

pip install pystan==2.19.1.1
pip install prophet

请注意,上述安装步骤可能会根据您的系统和环境略有不同。如果您在安装过程中遇到任何问题,请查看Prophet的官方文档或社区支持。

安装完成后,您就可以在Python中导入Prophet并开始使用它进行时间序列分析和预测了。例如:

from prophet import Prophet

记得在导入和使用Prophet之前,确保您已经安装了必要的依赖库,并且Python的环境已经配置正确。

第三步:进行预测

完整代码如下:

import numpy as np
import pandas as pd
from prophet import Prophet
import matplotlib.pyplot as plt
# 示例数据,替换为您的实际数据
data =[{"时间":"2000/02","均值":0.266791999},{"时间":"2000/03","均值":0.310662061},{"时间":"2000/04","均值":0.378926367},{"时间":"2000/05","均值":0.377644122},{"时间":"2000/06","均值":0.509663224},{"时间":"2000/07","均值":0.559362471},{"时间":"2000/08","均值":0.600726485},{"时间":"2000/09","均值":0.533398926},{"时间":"2000/10","均值":0.425571382},{"时间":"2000/11","均值":0.344209075},{"时间":"2000/12","均值":0.276758969},....]
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为SimHei
plt.rcParams['axes.unicode_minus'] = False   # 解决保存图像是负号'-'显示为方块的问题

# 将数据转换为DataFrame
df = pd.DataFrame(data)
df['ds'] = pd.to_datetime(df['时间'])
df.rename(columns={'均值': 'y'}, inplace=True)

# 拆分训练测试数据
# split_index = int(len(df)*0.8)
# train = df[:split_index] 
# test = df[split_index:]
train = df[:-12]
test = df[-12:]

# 初始化Prophet模型
model = Prophet(daily_seasonality=False)

# 添加节假日效应(如果适用)
# model.add_country_holidays(country_name='US')

# 训练模型
model.fit(train)

# 生成未来日期(未来5年,每月)
future = pd.date_range(start='2021-01', periods=60, freq='M')
future = pd.DataFrame({'ds': future})

# 进行预测
forecast = model.predict(future)

# 打印预测结果
print(forecast[['ds', 'yhat']].tail(60))

fig = model.plot_components(forecast)
# 分别设置trend成分的横纵坐标标签
for ax in fig.axes[:1]:
    ax.set_xlabel("年份", fontsize=16)
    ax.set_ylabel("趋势值", fontsize=16)
    ax.set_xticklabels(ax.get_xticklabels(), fontsize=14)
    ax.set_yticklabels(ax.get_yticklabels(), fontsize=14)

# 分别设置yearly成分的横纵坐标标签
for ax in fig.axes[1:]:
    ax.set_xlabel("月份", fontsize=16)
    ax.set_ylabel("季节性值", fontsize=16)
 
    # 设置横坐标标签,这里以月份为例,根据实际情况调整
    x_labels = ['一月',  '三月','五月', 
                '七月', '九月', '十一月', '一月']

    # 设置横坐标刻度和标签
    ax.set_xticklabels(x_labels, fontsize=14)
    ax.set_yticklabels(ax.get_yticklabels(), fontsize=14)
  
# 设置标题
#plt.title('自定义标题')

plt.tight_layout()
plt.savefig('F:/plot.jpg', dpi=600, format='jpg')
plt.show()

结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/836177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用中间人攻击的arp欺骗教程

文章目录 前言一、查看网络接口配置第 1 步:从受害者处获取 IP 配置第 2 步:在 Linux 中打开数据包转发第 3 步:使用 arpspoof 将包重定向到您的计算机步骤4:拦截来自路由器的包裹步骤5:从目标的浏览器历史记录中嗅探图…

LeetCode 热题 100 JavaScript--102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2: 输入:root [1…

Java 线程基础

volatile happens-before原则 1、单一线程原则 在一个线程内,在程序前面的操作线性发生于后面的操作 2、管程锁定原则 一个unlock操作先行发生于后面对同一个锁的lock操作 3、volatile变量原则 对一个volatile变量的写操作先行发生于后面对变量的读操作 4、线…

资深测试经验总结,APP测试-关键点整理,少走3年的弯路...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 APP测试它的关键点…

LeetCode--HOT100题(16)

目录 题目描述:238. 除自身以外数组的乘积(中等)题目接口解题思路代码 PS: 题目描述:238. 除自身以外数组的乘积(中等) 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等…

el-table那些事

el-table那些事 获取el-table所有勾选的行数据 用于记录工作和日常学习遇到的坑,需求。 vue3element-plusts 获取el-table所有勾选的行数据 1、需要先声明一个ref变量,并赋值给el-table 2、通过el-table提供的getSelectionRows()函数获取选中的"行…

嵌入式系统:连接数字世界的未来

嵌入式设备是专用微型计算机,由硬件、系统级软件和应用软件三个层次组成。硬件包括处理器、存储和各种I/O接口。系统级软件涵盖操作系统和各种I/O子系统。应用软件包括基于不同操作系统的开发。 几乎所有带数字接口的设备都使用嵌入式系统,从大型飞机到…

媒介易讲解体育冠军助力品牌解锁市场营销新玩法

在当今竞争激烈的市场中,品牌推广成为企业取得商业成功的重要一环。然而,随着传统市场推广方式的日益饱和,企业急需创新的市场营销策略来吸引消费者的关注和认可。在这样的背景下,体育冠军助力品牌成为了一种备受瞩目的市场营销新…

MongoDB文档-进阶使用-MongoDB索引-createindex()与dropindex()-在MongoDB中使用正则表达式来查找

阿丹: 之前研究了MongoDB的基础增删改查。在学会基础的数据库增删改查肯定是不够的。这个时候就涉及到了数据库搜索的时候的效率。需要提高数据的搜索效率。 MongoDB索引 在所以数据库中如果没有数据索引的时候。如果需要查找到一些数据。都会去主动扫描所有可能存…

无涯教程-Perl - 面向对象

Perl中的面向对象概念很大程度上基于引用以及匿名数组和哈希。让我们开始学习面向对象Perl的基本概念。 定义类 在Perl中定义一个类非常简单。类以最简单的形式对应于Perl软件包。要在Perl中创建一个类,我们首先构建一个包。 Perl软件包在Perl程序中提供了一个单…

Java-day05(面向对象-1)

面向对象 面向对象与面向过程的区别: 面向过程,强调功能行为;面向对象,强调功能的对象。 Java类及类成员 类:对一类事物描述,是抽象的,概念上的定义对象:实际存在的该类事物的每…

(自控原理)线性系统的频域分析法

目录 一、频率特性 1、频率特性的基本概念 2、频率特性的几何表示方法 二、典型环节与开环系统的频率特性 1、典型环节 2、开环对数的频率特性曲线 三、稳定裕度 1、相角裕度 2、幅值裕度 一、频率特性 1、频率特性的基本概念 2、频率特性的几何表示方法 二、典型环节…

<van-empty description=““ /> 滚动条bug

使用 <van-empty description"" /> 时&#xff0c;图片出现了个滚动条&#xff0c;图片可以上下滑动。 代码如下&#xff1a; <block wx:if"{{courseList.length < 0}}"><van-empty description"" /> </block> <…

跨境电商怎么做?Live Market教你创业及做大生意

随着全球化的不断深入和互联网技术的迅猛发展&#xff0c;跨境电商成为了一个蓬勃发展的行业。根据eMarketer的数据&#xff0c;2021年全球跨境电商销售额将达到4.5万亿美元&#xff0c;预计到2025年将增长至6.3万亿美元。这表明&#xff0c;跨境电商行业将继续保持强劲增长的趋…

uni-app:分页实现多选功能

效果 代码解析 一、标签-列表 <view class"item_all" v-for"(item, index) in info" :key"index"><view class"position parameter-info text-over" :class"{checked_parameter: item.checked}" :data-id"i…

EditPlus取消自动.bak备份

Tools->Preferences->File 将√取消

Java正则校验密码至少包含:字母数字特殊符号中的2种

一、语法 字符说明\将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如&#xff0c; n匹配字符 n。\n 匹配换行符。序列 \\\\ 匹配 \\ &#xff0c;\\( 匹配 (。^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性&#xff0c;^ 还会与"\n…

如何开发一个企业ERP系统

企业ERP系统是一种针对企业管理和运营的综合性管理软件&#xff0c;旨在提高企业的效率和生产力。随着信息化时代的发展&#xff0c;越来越多的企业意识到引入ERP系统的重要性。本文将详细介绍如何开发一个企业ERP系统&#xff0c;为读者提供丰富、详细的信息。 一、需求分析 …

基于SpringBoot+Vue的地方美食分享网站设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

SQL SERVER ROW_NUMBER、RANK、DENSE_RANK 分页应用

** ROW_NUMBER 、RANK、DENSE_RANK** ROW_NUMBER () over( order by 列) # 不论【列】是否存在重复&#xff0c; 序号都不会重复的&#xff0c;通常用唯一个标识的列 RANK() over(order by 列) # 列 存在重复&#xff0c; 则 顺序号一致&#xff0c; 两个人并列第一&#xff0c…