添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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的定义,具体步骤见参考里的文章

通俗一点讲,就是用过去时间点的数据预测未来时间点的数据。
具体公式如下:
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)模型也称移动平均模型,是用过去各个时期的随机干扰预测误差的线性组合来表达当前预测值。
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
其中

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模型混合,具体公式如下:
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)**相当于对差分序列 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-呀的文章 - 知乎

这里只介绍一下AR的定义,具体步骤见参考里的文章通俗一点讲,就是用过去时间点的数据预测未来时间点的数据。Xta1Xt−1a2Xt−2apXt−p∑j1pajXt−jεtXt​a1​Xt−1​a2​Xt−2​...ap​Xt−p​j1∑p​aj​Xt−j​εt​XtX_tXt​=历史数据Xt−jX_{t-j}Xt−j​。
python Pyinstaller 打包 statsmodels.api失败no module named: statsmodels.tsa.statespace._filters
最近用pyinstaller打包的时候,程序中包含statsmodels.api这个第三方库,然后打包完后运行EXE时遇到找不到包的:“no module named statsmodels.tsa.XXXXX”错误,搞得我焦头烂额,钻研了一下终于总算是解决了。不过我找遍国内外网站,都没有相关解决办法, 也是靠自己摸索出来的,所以就做个好人好事,分享出来。 当导入statsmodels.api的...
statsmodels v0.11.1 链接: https://www.statsmodels.org/stable/user-guide.html#time-series-analysis. 如有翻译总结错误,欢迎指出! 时间序列分析 statsmodels.tsa包含可用于时间序列分析的模型和函数。 基本模型包括单变量自回归模型(AR)、向量自回归模型(VAR)和单变量自回归移动平均模型(ARMA)。非线性模型包括马尔可夫切换动态回归和自回归。 它还包括时间序列的描述性统计,如自相关、偏自相关函数和周期
cat_fish = pd.read_csv('./data/catfish.csv',parse_dates=[0],index_col=0,squeeze=True) cat_fish.head() 1986-0
这种使用方法已经弃用了,改成下面即可 import statsmodels.api as sm model = sm.tsa.arima.ARIMA(train_data, order=(1,1,1)) result = model.fit()
时间序列分析预测小工具。自回归模型分析,卡尔曼滤波自回归模型,AIC, BIC, FPE, MDL, SBC, CAT, PHI自回归模型检验。The TSA toolbox is useful for analysing Time Series. - Stochastic Signal processing - Autoregressive Model Identification - adaptive autoregressive modelling using Kalman filtering - multivariate autoregressive modelling - maximum entropy spectral estimation - matched (inverse) filter design - Histogram analysis - Calcution of the entropy of a time series - Non-linear analysis (3rd order statistics) - Test for UnitCircle- and Hurwitz- Polynomials - multiple signal processing - Several criteria (AIC, BIC, FPE, MDL, SBC, CAT, PHI) for model order selection an autoregressive model are included. - Fast algorithms are used - missing values (encoded as NaN's) are considered
NotImplementedError: statsmodels.tsa.arima_model.ARMA and statsmodels.tsa.arima_model.ARIMA have been removed in favor of statsmodels.tsa.arima.model.ARIMA (note the . between arima and model) and sta ValueError: too many values to unpack (expected 3)
小波分析是一种通过将时间序列数据进行频域和时间域的分析来揭示数据的特征和模式的方法。通过小波变换,可以将时间序列数据转换为不同尺度的小波系数,从而可以分析数据在不同频率和时间尺度上的变化。小波分析在信号处理、图像处理、金融分析等领域有广泛的应用。 根据引用,在应用小波分析对时间序列数据进行分析时,可以完成如下任务: 1. 计算小波变换系数,这些系数反映了数据在不同尺度上的频率特征。 2. 绘制小波系数实部的等值线图,可以直观地显示数据的频率特征。 3. 绘制小波系数模和模方的等值线图,可以显示数据的振幅特征。 4. 绘制小波方差图,可以显示数据在不同尺度上的方差变化情况。 5. 绘制不同时间尺度的小波图,可以观察数据在不同时间尺度上的频率特征。 根据引用,进行小波尺度谱变换时,可以选择一个默认的小波函数,计算小波的尺度范围,并绘制信号的小波图。小波尺度谱变换可以展示数据在不同尺度和时间上的频率特征,帮助我们理解数据的变化规律。 总之,小波分析可以帮助我们从时间序列数据中提取出不同尺度和频率上的特征信息,进而分析数据的模式和变化规律。