【数据分析】时间序列

news2024/12/23 6:15:44

UTC时间:时间戳是以格林威治时间1970年01月01日00时00分00秒为基准计算所经过时间的秒数,是一个浮点数。Python的内置模块time和datetime都可以对时间格式数据进行转换,如时间戳和时间字符串的相互转换。

报错记录:AR has been removed from statsmodels and replaced with statsmodels.tsa.ar_model.AutoReg.

statsmodels版本太新了。根据提示将sm.tsa.AutoReg换成statsmodels.tsa.ar_model.AutoReg()还是没用,提示module ‘statsmodels.tsa.api’ has no attribute ‘ar_model’。

解决方案:改成sm.tsa.AutoReg. 或者事先from statsmodels.tsa.ar_model import AutoReg

一些小使用

获取当前日期

# datetime模块date类的today()方法获取当前日期
import datetime
print(datetime.date.min)
print(datetime.date.max)
print(datetime.date.today())
print(datetime.date.today().year)
print(datetime.date.today().month)
print(datetime.date.today().day)

在这里插入图片描述


# datetime模块datetime类的today()方法获取当前日期和时间
import datetime
print(datetime.datetime.now())
print(datetime.datetime.min)
print(datetime.datetime.max)
print(datetime.datetime.today())
print(datetime.datetime.today().year)
print(datetime.datetime.today().month)
print(datetime.datetime.today().day)
print(datetime.datetime.today().hour)
print(datetime.datetime.today().hour)

在这里插入图片描述


UTC时间

import datetime
# 创建一个时间戳(以秒为单位)
timestamp = 22  
# 带UTC时区时间
dt_with_timezone = datetime.datetime.fromtimestamp(timestamp, tz=datetime.timezone.utc)
print("带UTC时区时间:", dt_with_timezone)
# 不带UTC时区时间
dt_without_timezone = datetime.datetime.fromtimestamp(timestamp)
print("不带UTC时区时间", dt_without_timezone)

在这里插入图片描述


# 时间戳
import time 
print(time.time())
print(time.localtime())  # 获取到当前时间的元组
print(time.mktime(time.localtime()))  
# 一周的第几天(周一是0,0-6)、一年的第几天(从1开始,1-366)、夏时令(是夏时令1,不是0,未知-1)。

在这里插入图片描述


字符串和时间转换

# 字符串和时间转换
#利用time模块的strftime()函数可以将时间戳转换成系统时间。
import time
time_str = time.strftime(("%Y-%m-%d %H:%M:%S"),time.localtime())
print(time_str)

# 可以用strptime函数将日期字符串转换为datetime数据类型,
import datetime 
print(datetime.datetime.strptime('2022-01-15','%Y-%m-%d'))

# 可以用Pandas的to_datetime()函数将日期字符串转换为datetime数据类型。
# to_datetime()函数转化后的时间是精准到时分秒精度的
import pandas as pd
print(pd.to_datetime('2022/01/15'))

时间差

# 3. 时间运算--时间差
# 利用datetime将时间类型数据进行转换,然后利用减法运算计算时间的不同之处
# 默认输出结果转换为用(“天”,“秒”)表达
import datetime
delta = datetime.datetime(2022,1,16)-datetime.datetime(2021,1,1,9,15)
print(delta)
print(delta.days)
print(delta.seconds)

自回归模型AR(Autoregressive model/AR)

定义

这里只介绍一下AR的定义,具体步骤见参考里的文章

通俗一点讲,就是用过去时间点的数据预测未来时间点的数据。
具体公式如下:
X t = a 1 X t − 1 + a 2 X t − 2 + . . . + a p X t − p = ∑ j = 1 p a j X t − j + ε t X_t = a_1X_{t-1} + a_2X_{t-2} +...+a_pX_{t-p} =\sum^{p}_{j=1}a_jX_{t-j}+\varepsilon_t Xt=a1Xt1+a2Xt2+...+apXtp=j=1pajXtj+εt
X t X_t Xt=历史数据 X t − j X_{t-j} Xtj的加权和+随机扰动 ε t \varepsilon_t εt的叠加;
p p p为自回归模型的阶数,因此成为 p p p阶自回归模型,记为 A R ( p ) AR(p) AR(p)
a 1 , a 2 . . . a p a_1,a_2...a_p a1,a2...ap A R ( p ) AR(p) AR(p)模型的自回归系数
ε t ∼ N ( 0 , 2 ) \varepsilon_t \sim N(0,^2 ) εtN(0,2)

python实现

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm  # 导入模型

IndexData = pd.read_csv('./data/timeseries_data.csv')
data = IndexData['close']  # 选择关闭交易时的数据
temp = np.array(data)  # 转换成数组
model =sm.tsa.AutoReg(temp,lags = 1)  # 训练模型 
results_AR = model.fit() # 训练模型

plt.figure(figsize=(20,10)) 
plt.plot(temp,'b',label='Close')
plt.plot (results_AR.fittedvalues,'r',label='AR model')  # results_AR.fittedvalues是模型拟合后的结果
plt.legend()

滑动平均模型(moving average model/MA)

滑动平均(moving average model/MA)模型也称移动平均模型,是用过去各个时期的随机干扰预测误差的线性组合来表达当前预测值。
q q q阶MA模型(MA( q q q))的公式:
X t = μ + a t − θ 1 a t − 1 − . . . − θ q a t − q = μ + a t − ∑ i = 1 p θ i a t − i X_t = \mu+a_t-\theta_1a_{t-1}-...-\theta_qa_{t-q} = \mu + a_t -\sum^{p}_{i=1}\theta_{i}a_{t-i} Xt=μ+atθ1at1...θqatq=μ+ati=1pθiati
其中 μ \mu μ为常量。
MA(1)举例: X t X_t Xt为第 t t t天股价,而 a t a_t at为第 t t t天的新闻影响。当天的股价受当天新闻影响,也受昨天新闻影响 a t − 1 a_{t-1} at1(但影响力要弱些,所以要乘上系数)。

python实现

报错记录:AttributeError: module ‘statsmodels.tsa.api’ has no attribute ‘ARMA’
从版本 0.12 开始,statsmodels 库不再具有单独的 ARMA 类。应该使用 ARIMA 类,该类可以处理自回归 (AR) 和移动平均 (MA) 分量。

import warnings
warnings.filterwarnings("ignore")
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm

IndexData = pd.read_csv('./data/timeseries_data.csv')
data = IndexData['close']
temp = np.array(data)

model = sm.tsa.ARIMA(temp, order=(0, 0,10))
results_MA = model.fit()

plt.figure(figsize=(20, 10))
plt.plot(temp, 'b', label='close')
plt.plot(results_MA.fittedvalues,color = 'red',label ='MA')
plt.legend(fontsize = 15)
plt.show()

自回归滑动平均(Autoregressive moving average model/ARMA)模型

定义

ARMA模型就是AR模型和MA模型混合,具体公式如下:
X t = [ ∑ i = 1 p a i X t − i ] + [ μ + a t − ∑ i = 1 q θ i a t − i ] X_t = [ \sum^{p}_{i=1}a_{i}X_{t-i} ]+ [ \mu +a_t -\sum^{q}_{i=1}\theta_{i}a_{t-i}] Xt=[i=1paiXti]+[μ+ati=1qθiati]
由此可见,ARMA( p p p,0)模型就是AR ( p p p) 模型,ARMA(0, q q q)模型就是MA( q q q)模型。 μ \mu μ?

python实现

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
IndexData= pd.read_csv('./data/timeseries_data.csv')
data =IndexData['close']
temp =np.array(data)
p = 3
q = 10
model = sm.tsa.ARIMA (temp,order=(p,0,q))
results_ARMA = model.fit()

plt.figure(figsize=(20,4*5))
plt.plot(temp,'b',label='close')
plt.plot(results_ARMA.fittedvalues,'r',label='ARMA model')
plt.legend()

在这里插入图片描述

自回归差分滑动平均(Autoregressive Integrated Moving Average model/ARIMA)模型

ARIMA模型在ARMA模型基础上考虑了时间序列的差分,ARIMA模型有三个参数ARIMA(p,d,q),p为自回归AR项数,q为滑动平均MA项数,d为使序列平稳所做的差分次数(阶数)。
差分后是对序列的差分的结果建立模型而不是真正的序列:例如**ARIMA(p,1,q)**相当于对差分序列 { x t – x t − 1 } \{x_t–x_{t−1}\} {xtxt1}进行 ARMA(p,q) 回归。

# 输出ARIMA模型的拟合效果图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
IndexData = pd.read_csv('./data/timeseries_data.csv')
IndexData = IndexData.set_index(IndexData['date'])

IndexData['colseDiff_1']=IndexData['close'].diff(1)#1阶差分处理
IndexData['closeDiff_2']=IndexData['colseDiff_1'].diff(1)#2阶差分处理
IndexData.plot(subplots=True,figsize=(20,15))

data = IndexData['closeDiff_2']
temp = np.array (data)
p=2;d = 2;q=10
model = sm.tsa.ARIMA(temp,order = (p,d,q))
results_ARIMA = model.fit()
plt.figure (figsize=(20,10))
plt.plot (temp,'b',label='closeDiff_2')
plt.plot (results_ARIMA.fittedvalues,'r',label='ARIMA model')
plt.legend()

在这里插入图片描述
在这里插入图片描述

参考

时间序列分析—自回归(AR) - 蜡笔小xi的文章 - 知乎
时间序列(二):初识自回归模型AR、滑动平均模型MR - Big冯的文章 - 知乎
建模算法系列二十三:ARMA模型 - Lvy-呀的文章 - 知乎

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

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

相关文章

【C++设计模式之组合模式:结构型】分析及示例

简介 组合模式是一种结构型设计模式,它能够将对象组合成树形结构以表示“整体-部分”的层次结构,并且能够使用相同的方式处理单个对象和组合对象。组合模式使得客户端可以一致地处理单个对象和组合对象,无需关心具体的对象类型。 组合模式将对…

一、Excel VBA 是个啥?

Excel VBA 从入门到出门一、Excel VBA 是个啥?二、Excel VBA 简单使用 👋Excel VBA 是个啥? ⚽️1. Excel 中的 VBA 是什么?⚽️2. 为什么 VBA 很重要?⚽️3. 是否有无代码方法可以在 Excel 中实现工作流程自动化&…

QT基础入门——界面布局和常用控件(四)

前言: 所谓 GUI 界面,归根结底,就是一堆组件的叠加。我们创建一个窗口,把按钮放上面,把图标放上面,这样就成了一个界面。在放置时,组件的位置尤其重要。我们必须要指定组件放在哪里&#xff0c…

2023-IDEA插件推荐

CamelCase 链接 https://plugins.jetbrains.com/plugin/7160-camelcase https://github.com/netnexus/camelcaseplugin 介绍 提供下划线、驼峰等代码风格的切换。快捷键是⇧ ⌥ U / Shift Alt U GsonFormatPlus 链接 https://plugins.jetbrains.com/plugin/14949-gs…

比较好用的在线项目管理系统推荐

好的项目管理系统首先要能满足你在管理项目中的要求,不同的团队规模、不同的项目对项目管理的要求都是不一样的。其次,引入项目管理系统的本身是为了提高管理和协作的效率,因此工具应该是要简单易用的,很多企业引入工具之后形同虚…

十、pygame小游戏开发

目录 一、安装pygame二、pygame快速入门2.1 坐标系认识2.2 创建游戏主窗口2.3 实现图像绘制2.4 游戏循环和游戏时钟2.5 简单动画实现的实现2.6 监听事件2.7 精灵和精灵组三、游戏框架搭建3.1 实现飞机大战主游戏类3.2 完成游戏初始化部分3.3 使用常量代替固定的数值3.4 完成游戏…

VulnHub BREAKOUT

一、信息收集 1.端口扫描 nmap -sS -A 192.168.103.178.24发现开发了80、10000、20000 以及有smb协议 2.查看80端口 右击查看源代码&#xff0c;发现尾部有个密文加密 一看就是 Brainfuck/Ook! 加密&#xff0c;解得&#xff1a;.2uqPEfj3D<Pa-3 3.查看10000端口 是个登…

项目需求分析5大常见问题及解决方案

需求分析过程中&#xff0c;往往容易导致需求不准确和不完整&#xff0c;引起需求频繁变更&#xff0c;导致项目进度延误和成本增加&#xff1b;而需求分析的误解问题&#xff0c;导致交付产品无法满足客户期待&#xff0c;降低用户满意度和资源浪费。 那么在需求分析中&#x…

buuctf-[WUSTCTF2020]CV Maker 文件上传漏洞

打开环境 随便登录注册一下 进入到了profile.php 其他没有什么页面&#xff0c;只能更换头像上传文件&#xff0c;所以猜测是文件上传漏洞 上传一句话木马看看 <?php eval($_POST[a]);?>回显 搜索一下 添加文件头GIF89a。上传php文件 查看页面源代码&#xff0c;看…

使用python利用merge+sort函数对excel进行连接并排序

好久没更新了&#xff0c;天天玩短视频了。现在发现找点学习资料真的好难。 10.1期间偶然拿到一本书 本书是2022年出版的&#xff0c;看了一下不错&#xff0c;根据上面的案例结合&#xff0c;公司经营整合案例&#xff0c;分享一下。 数据内容来源于书中内容&#xff0c;仅供…

Dubbo3应用开发—Dubbo3注册中心(zookeeper、nacos、consul)的使用

Dubbo3注册中心的使用 zookeeper注册中心的使用 依赖引入 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper-curator5</artifactId><version>${dubbo.version}</version><type>p…

MySQL Cluster

文章目录 1.简介2.组成参考文献 1.简介 MySQL Cluster 是官方推出的基于 NDB&#xff08;Network DataBase&#xff09;存储引擎的高可用和可伸缩的分布式数据库系统。 以下是 MySQL NDB Cluster 的主要特点和能力&#xff1a; 高可用&#xff1a;MySQL Cluster 具有内置的高…

python+selenium实现UI自动化(入门篇)

一、基础准备。 python环境安装&#xff0c;参考&#xff1a;CSDN pycharm安装&#xff0c;参考&#xff1a;CSDN 谷歌浏览器驱动配置&#xff0c;参考&#xff1a;CSDN二、新建pycharm项目 截图中&#xff0c;上面是项目地址&#xff08;可以提前在指定位置创建文件夹&#xf…

TenDB Cluster 简介

文章目录 1.简介2.TSpider3.TenDB4.Tdbctl5.TenDB Cluster Operator参考文献 1.简介 TenDB Cluster 是腾讯游戏 CROS DBA 团队提供的 MySQL 分布式关系型数据库解决方案。主要特点包括&#xff1a;透明分库分表、高可用的 MySQL 集群服务&#xff0c;透明及在线的扩容及缩容&a…

AI绘画-Stable Diffusion笔记

软件&#xff1a;Stable Diffusion 视频教程来自 https://www.bilibili.com/video/BV1As4y127HW/?spm_id_from333.337.search-card.all.click 提示词 提示词类别 内容型提示词 人物主题特征&#xff1a; 服饰穿搭&#xff1a;white dress 发型发色&#xff1a;blonde hair,l…

Docker 安装 MongoDB

一、什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库。是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 二、MongoDB的安装 这里使用docker来安装MongoD 1.docker 拉取mysql镜像 docker pu…

基于SSM+Vue的物流管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;VueHTML 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 …

Notepad++提取含有特定字符串的行

ctrl M快捷键&#xff0c;进入"标记" 页面 标记所在行–循环查找-- 正则表达式 – 输入关键字 – 全部标记 – Copy Marked Text 关键字格式如下&#xff1a; .*关键字.*ctrl v&#xff0c;粘贴即可。

vue模版语法-{{}}/v-text/v-html/v-once

一、{{}}双括号&#xff1a;用于文本渲染 1、 {{变量名}}:data中返回对象的变量名 2、{{js表达式}}:可以直接进行js表达式处理 3、注意&#xff1a;双大括号中不要写等式书写 二、v-text 指令&#xff0c;用于文本渲染 1、为了解决双大括号渲染数据出现闪烁问题 三、v-cloak …

Mysql bin-log日志恢复数据与物理备份-xtrabackup

主打一个数据备份与恢复 binlog与xtarbackup bin-log日志恢复开启bin-log配置bin-log日志恢复 物理备份-xtrabackup三种备份方式安装xtrabackup备份全量备份增量备份差异备份 bin-log日志恢复 bin-log 日志&#xff0c;就记录对数据库进行的操作&#xff0c;什么增删改的操作全…