当前位置: 首页 > news >正文

【数据分析】时间序列

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 smIndexData = 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.lryc.cn/news/184919.html

相关文章:

  • 【图像算法相关知识点】
  • 竹云筑基,量子加密| 竹云携手国盾量子构建量子身份安全防护体系
  • 数据结构P46(2-1~2-4)
  • 基于BERT模型进行文本处理(Python)
  • 妙鸭相机功能代码复现
  • 使用Java Spring Boot构建高效的爬虫应用
  • 归并排序与非比较排序详解
  • 第85步 时间序列建模实战:CNN回归建模
  • 【MATLAB源码-第36期】matlab基于BD,SVD,ZF,MMSE,MF,SLNR预编码的MIMO系统误码率分析。
  • Uniapp 新手专用 抖音登录 获取用户头像、名称、openid、unionid、anonymous_openid、session_key
  • openssl引擎开发踩坑小记
  • ubuntu 设置x11vnc服务
  • 物理备份xtrabackup
  • 1.springcloudalibaba nacos2.2.3部署
  • Linux 查看是否安装memcached
  • 设计模式14、命令模式 Command
  • 【Go】excelize库实现excel导入导出封装(一),自定义导出样式、隔行背景色、自适应行高、动态导出指定列、动态更改表头
  • 【开发篇】二十、SpringBoot整合RocketMQ
  • OpenCV实现求解单目相机位姿
  • 深入解析PostgreSQL:命令和语法详解及使用指南
  • Elasticsearch数据搜索原理
  • vue模版语法-{{}}/v-text/v-html/v-once
  • 前端埋点上传
  • 第11章 Redis(一)
  • freertos信号量之二值信号量
  • notepad++ 如何去除换行
  • PPT NO.2 ​插入透明校徽
  • Linux系统部署PostgreSQL 单机数据库
  • 好用的办公摸鱼神器
  • 手写Java序列化工具