时间序列分析【python代码实现】

时间序列分析是一种用于建模和分析时间上连续观测的统计方法。 它涉及研究数据在时间维度上的模式、趋势和周期性。常见的时间序列分析包括时间序列的平稳性检验、自相关性和部分自相关性分析、时间序列模型的建立和预测等。

下面是一个使用Python实现时间序列分析的示例:

# 导入所需的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm# 读取时间序列数据
data = pd.read_csv('time_series_data.csv', parse_dates=['date'], index_col='date')# 绘制时间序列折线图
plt.figure(figsize=(10, 6))
plt.plot(data)
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series Data')
plt.show()# 检验时间序列的平稳性
result = sm.tsa.adfuller(data['value'])
print('ADF Statistic:', result[0])
print('p-value:', result[1])# 分解时间序列
decomposition = sm.tsa.seasonal_decompose(data['value'], model='additive')
trend = decomposition.trend
seasonal = decomposition.seasonal
residual = decomposition.resid# 绘制分解后的时间序列
plt.figure(figsize=(12, 8))
plt.subplot(411)
plt.plot(data, label='Original')
plt.legend(loc='best')
plt.subplot(412)
plt.plot(trend, label='Trend')
plt.legend(loc='best')
plt.subplot(413)
plt.plot(seasonal, label='Seasonality')
plt.legend(loc='best')
plt.subplot(414)
plt.plot(residual, label='Residuals')
plt.legend(loc='best')
plt.tight_layout()
plt.show()# 计算自相关性和部分自相关性
sm.graphics.tsa.plot_acf(data['value'])
plt.show()sm.graphics.tsa.plot_pacf(data['value'])
plt.show()# 建立时间序列模型(ARIMA)
model = sm.tsa.ARIMA(data['value'], order=(1, 0, 1))
model_fit = model.fit(disp=0)# 模型预测
forecast = model_fit.forecast(steps=10)[0]
print('Forecasted Values:', forecast)

在这个示例中,我们首先导入所需的库,然后使用pd.read_csv函数读取时间序列数据,其中日期列被解析为日期对象,并设置为索引列。接下来,我们使用plt.plot函数绘制了时间序列数据的折线图。

然后,我们使用sm.tsa.adfuller函数对时间序列数据进行平稳性检验。该函数返回ADF统计量和p值,用于判断时间序列数据的平稳性。

接下来,我们使用sm.tsa.seasonal_decompose函数对时间序列进行分解,得到趋势、季节性和残差。然后,使用plt.subplotplt.plot函数绘制了分解后的时间序列图。

之后,我们使用sm.graphics.tsa.plot_acfsm.graphics.tsa.plot_pacf函数计算并绘制了时间序列数据的自相关性和部分自相关性图。

最后,我们使用sm.tsa.ARIMA函数建立ARIMA模型,并使用fit方法拟合模型。然后,我们使用forecast方法对未来的10个时间步进行预测,并打印出预测值。

请注意,在运行代码之前需要安装statsmodels、pandas和matplotlib等库,并将时间序列数据保存为CSV文件(文件名为’time_series_data.csv’)。

一个使用更复杂的时间序列分析算法的例子是通过使用长短期记忆网络(Long Short-Term Memory, LSTM)进行时间序列预测。LSTM是一种适用于处理具有长期依赖关系的序列数据的深度学习模型。
下面是一个使用Python和Keras库实现LSTM进行时间序列预测的示例:

# 导入所需的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense# 读取时间序列数据
data = pd.read_csv('time_series_data.csv', parse_dates=['date'], index_col='date')# 将数据归一化到0-1的范围
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data)# 划分训练集和测试集
train_size = int(len(scaled_data) * 0.8)
train_data = scaled_data[:train_size]
test_data = scaled_data[train_size:]# 准备训练数据
def prepare_data(data, lookback):X, Y = [], []for i in range(len(data) - lookback - 1):X.append(data[i:(i + lookback), 0])Y.append(data[i + lookback, 0])return np.array(X), np.array(Y)lookback = 10
train_X, train_Y = prepare_data(train_data, lookback)
test_X, test_Y = prepare_data(test_data, lookback)# 转换数据为LSTM所需的输入格式 [样本数, 时间步长, 特征数]
train_X = np.reshape(train_X, (train_X.shape[0], train_X.shape[1], 1))
test_X = np.reshape(test_X, (test_X.shape[0], test_X.shape[1], 1))# 构建LSTM模型
model = Sequential()
model.add(LSTM(50, input_shape=(lookback, 1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')# 训练模型
model.fit(train_X, train_Y, epochs=100, batch_size=16, verbose=2)# 在测试集上进行预测
test_predict = model.predict(test_X)# 将预测数据进行逆归一化
test_predict = scaler.inverse_transform(test_predict)
test_Y = scaler.inverse_transform([test_Y])# 绘制预测结果和实际值的对比图
plt.figure(figsize=(12, 6))
plt.plot(test_Y.flatten(), label='True')
plt.plot(test_predict.flatten(), label='Prediction')
plt.xlabel('Time')
plt.ylabel('Value')
plt.title('Time Series Prediction using LSTM')
plt.legend()
plt.show()

在示例中,我们首先导入所需的库。然后使用pd.read_csv函数读取时间序列数据,并使用MinMaxScaler将数据归一化到0-1的范围。接下来,我们将数据集划分为训练集和测试集。

然后,我们定义了一个prepare_data函数,用于将时间序列数据转换为LSTM所需的输入格式。然后,我们使用该函数准备训练数据。

接下来,我们将训练数据转换为LSTM所需的输入格式,并使用Sequential函数构建了一个含有一个LSTM层和一个全连接层的模型。然后,我们使用compile方法编译模型,并使用fit方法在训练集上训练模型。

在模型训练完毕后,我们使用训练好的模型对测试集进行预测。然后,我们使用inverse_transform函数将预测结果和实际值逆归一化。最后,我们使用plt.plot函数绘制了预测结果和实际值的对比图。

请注意,在运行代码之前需要安装Keras、scikit-learn、pandas和matplotlib等库,并将时间序列数据保存为CSV文件(文件名为’time_series_data.csv’)。

如果你想更深入地了解人工智能的其他方面,比如机器学习、深度学习、自然语言处理等等,也可以点击这个链接,我按照如下图所示的学习路线为大家整理了100多G的学习资源,基本涵盖了人工智能学习的所有内容,包括了目前人工智能领域最新顶会论文合集和丰富详细的项目实战资料,可以帮助你入门和进阶。

人工智能交流群(大量资料)

在这里插入图片描述

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

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

相关文章

通过分析波形,透彻理解 UART 通信

UART是一种异步全双工串行通信协议,由 Tx 和 Rx 两根数据线组成,因为没有参考时钟信号,所以通信的双方必须约定串口波特率、数据位宽、奇偶校验位、停止位等配置参数,从而按照相同的速率进行通信。 异步通信以一个字符为传输单位…

Vue修改密码功能的源代码

基本需求 输入框不能为空 旧密码表单提交时必须正确 两次输入新密码一致 限定新密码的复杂度&#xff0c;这里是长度在 6 到 20 个字符 <template><el-form ref"form" :model"user" :rules"rules" label-width"80px"><…

给企业做公众号运营你都有哪些宝贵经验?

运营企业公众号需要长期的坚持和不断的创新&#xff0c;如何运营好一个企业公众号&#xff0c;使其成为企业与受众互动、传递价值、提升品牌形象的平台&#xff0c;是许多企业所面临的挑战。但只要不断学习&#xff0c;总结经验&#xff0c;就一定能够找到适合自己企业的公众号…

数据集笔记 :PEMS-BAY

数据地址&#xff1a;DCRNN - Google 云端硬盘 各station 位置&#xff1a;DCRNN/data/sensor_graph/graph_sensor_locations_bay.csv at master liyaguang/DCRNN (github.com) 1 读取 数据 import h5py fileDownloads/pems-bay.h5fh5py.File(file,r) f.keys()f[speed] #&…

JMeter+Jenkins接口压力测试持续集成

项目介绍 接口功能测试应用&#xff1a; http://www.weather.com.cn/data/cityinfo/<city_code>.html 测试功能&#xff1a;获取对应城市的天气预报 请求方法&#xff1a;Get 压测脚本开发工具&#xff1a;jmeter 源码脚本位置&#xff1a; https://github.com/shife…

基于SpringCloud的动漫论坛

基于SpringCloud的动漫论坛《BOKI》 摘要&#xff1a;鉴于现如今的互联网网站的存在形式&#xff0c;网站内部有可能内嵌论坛&#xff0c;因此&#xff0c;该项目中实现一个整体的、可移植性强的插件式论坛&#xff0c;论坛就有可能突破ACG主题的限制&#xff0c;实现论坛与主…

ZKP15.3 Formal Methods in ZK (Part II)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 15: Secure ZK Circuits via Formal Methods (Guest Lecturer: Yu Feng (UCSB & Veridise)) 15.3 Formal Methods in ZK (Part II) Formally prove that a circuit is NOT underconstrained Existing Strategies Static …

异步操作的方法

在高级语言中已经有了异步的原语言&#xff0c;而在C 中的最好的方式就是 libevent 的方式,我这还是相当认同的&#xff0c;高级语言就不需要在苦哈哈的&#xff0c;事件转圈了&#xff0c;但是原理还是以事件为基础的 一句话就是在一个循环中等着他执行完,这个循环中有很多其他…

NX二次开发UF_CURVE_create_arc_thru_3pts 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_arc_thru_3pts Defined in: uf_curve.h int UF_CURVE_create_arc_thru_3pts(int create_flag, double first_point [ 3 ] , double second_point [ 3 ] , double th…

Git提示 Connection closed by remote host

问题如下图&#xff1a; 解决&#xff1a; 删除./ssh目录下的config文件&#xff0c;如下图config文件是新增的 原因&#xff1a;不知道什么原因&#xff0c;连接外网后突然断开或导致自动增加config文件。

【Python】jieba分词基础

jieba分词主要有3种模式&#xff1a; 1、精确模式&#xff1a;jieba.cut(文本, cut_allFalse) 2、全模式&#xff1a;jieba.cut(文本, cut_allTrue) 3、搜索引擎模式&#xff1a;jieba.cut_for_search(文本) 分词后的关键词提取&#xff1a; jieba.analyse.textrank(txt,t…

PPP/INS紧组合代码学习

前言&#xff1a; 本文是基于IGNAV的PPP/INS紧组合学习&#xff0c;在此之前需要具备GNSS/INS松组合知识&#xff0c;武汉大学的i2nav实验室的KF-GINS项目可以作为学习模板。可以参考这篇优秀博文&#xff0c;链接&#xff1a;KF-GINS源码阅读_李郑骁学导航的博客-CSDN博客 IG…

Kubernetes技术与架构-安全性

本文主要从不同层面与多个维度描述Kubernetes技术与架构的安全性。 云原生的安全性 从系统分层架构的角度分析&#xff0c;自底向上&#xff0c;云原生的安全性主要包括云、集群、容器以及代码四个层面&#xff0c;简称云原生4C安全&#xff0c;其架构图如下所示&#xff1a;…

Vue3水印(Watermark)

APIs 参数说明类型默认值必传width水印的宽度&#xff0c;默认值为 content 自身的宽度numberundefinedfalseheight水印的高度&#xff0c;默认值为 content 自身的高度numberundefinedfalserotate水印绘制时&#xff0c;旋转的角度&#xff0c;单位 number-22falsezIndex追加…

ubuntu系统进入休眠后cuda初始化报错

layout: post # 使用的布局&#xff08;不需要改&#xff09; title: torch.cuda.is_available()报错 # 标题 subtitle: ubuntu系统进入休眠后cuda初始化报错 #副标题 date: 2023-11-29 # 时间 author: BY ThreeStones1029 # 作者 header-img: img/about_bg.jpg #这篇文章标题背…

解锁Jira本地部署的数据中心版高级功能,打造高效、智能、精细化的项目管理

近日&#xff0c;在龙智携手Atlassian与JFrog共同举办的“大规模开发创新&#xff1a;如何提升企业级开发效率与质量”的线下研讨会中&#xff0c;龙智高级咨询顾问、Atlassian认证专家叶燕秀为大家带来了精彩演讲&#xff0c;解锁Jira Data Center版的诸多高级功能&#xff0c…

【LeetCode刷题-字符串】--71.简化路径

71.简化路径 思路&#xff1a; 对于给定的字符串&#xff0c;先根据/分割成一个由若干字符串组成的列表&#xff0c;记为names&#xff0c;根据题意names中包含的字符串只能是以下几种&#xff1a; 空字符串一个点两个点只包含英文字母、数字或_的目录名 对于空字符串和一个…

Windows下命令行启动与关闭WebLogic的相关服务

WebLogic 的服务器类型 WebLogic提供了三种类型的服务器&#xff1a; 管理服务器节点服务器托管服务器 示例和关系如下图&#xff1a; 对应三类服务器&#xff0c; 就有三种启动和关闭的方式。本篇介绍使用命令行脚本的方式启动和关闭这三种类型的服务器。 关于WebLogic 的…

分析某款go端口扫描器之一

一、概述 进来在学go的端口检测部分&#xff0c;但是自己写遇到很多问题&#xff0c;又不知道从何入手&#xff0c;故找来网上佬们写的现成工具&#xff0c;学习一波怎么实现的。分析过程杂乱&#xff0c;没啥思路&#xff0c;勿喷。 项目来源&#xff1a;https://github.com/…

如何高效解析不定长度的协议帧

通信设计中考虑协议的灵活性&#xff0c;经常把协议设计成“不定长度”。一个实例如下图&#xff1a;锐米LoRa终端的通信协议帧。 如果一个系统接收上述“不定长度”的协议帧&#xff0c;将会有一个挑战--如何高效接收与解析。 为简化系统设计&#xff0c;我们强烈建议您采用“…