Simple moving average(SMA)


使用最近的50天分析,n=20

import numpy
import talib
import pandas as pd
import numpy as np
import os
import re
import statistics as stats
import csv
import pickle
import matplotlib.pyplot as plt
from math import sqrt
from sklearn.metrics import mean_squared_error
'预测模型:Simple moving average(SMA)简单易懂平均'
'我们把一段时间的价格加起来,除以这段时间的长度就可以得到。'
'简单移动平均的思想是,我们给于每一天同样的权值,'
'因为我们假设不管是离我们当前较近的日期,还是较远的日期,'
'对于我们当前价格的影响都是相同的。当我们的日期不断的往后走,'
'我们的『窗口』也在同时滑动,所以称之为移动平均。'# input = numpy.random.random(50)
# print(input)
#
# # 默认计算30个值来平均一次
# output = talib.SMA(input)
# print(output)
# print(type(output))  #<class 'numpy.ndarray'># ...
data = pd.read_csv('mean_mwd.csv',header=0)
df = pd.DataFrame(data)
mwd = df['mwd']
with open("dict_data.pkl", 'wb') as fo:     # 将数据写入pkl文件pickle.dump(df, fo)
with open("dict_data.pkl", 'rb') as fo:  # 读取pkl文件数据dict_data = pickle.load(fo, encoding='bytes')
# print(dict_data.keys())  # 测试我们读取的文件
# print(dict_data)a=dict_data.tail(492)  #选择最近的492天的数据
close=a['mwd']
# print(close)
# print(a)time_period = 100  # 移动平均的天数  ,那么只会取后面20天的数据
history = []  # 保存历史数据
sma_values = []  # 保存simple moving averagesfor close_price in close:history.append(close_price)if len(history) > time_period:  # 我们想我们历史数据中写入数据,只需保存20条,如果超过,就删除。del (history[0])sma_values.append(stats.mean(history))
#
a = a.assign(our_mwd=pd.Series(close, index=a.index))
a = a.assign(Simple20DayMovingAverage=pd.Series(sma_values, index=a.index))
close_price = a['our_mwd']
sma = a['Simple20DayMovingAverage']
# print(sma)
# print(a)rmse = sqrt(mean_squared_error(mwd, sma))
print('Test RMSE: %.3f' % rmse)
fig = plt.figure()
ax1 = fig.add_subplot(111, ylabel='height')
close_price.plot(ax=ax1, color='g', lw=2., legend=True)
sma.plot(ax=ax1, color='r', lw=2., legend=True)
plt.show()#一条是我们自己的数据线(绿色),另一条是sma曲线

朴素法Naive Forecast

'''
如果数据集在一段时间内都很稳定,
我们想预测第二天的价格,可以取前面一天的价格,预测第二天的值。
这种假设第一个预测点和上一个观察点相等的预测方法就叫朴素预测法(Naive Forecast)
'''import pandas as pdimport numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from math import sqrt
from sklearn.metrics import mean_squared_error
from statsmodels.tsa.holtwinters import ExponentialSmoothingtrain=pd.read_csv('mean_mwd.csv')
train['time'] = pd.to_datetime(train.time, format='%Y-%m-%d-%H-%M')
# print(train.dtypes)
# print(train.head())
# print(train.time.dt.year)  #单独提取时间里面的年份
# print(train)
Train = train.loc[:390] #划分训练集和测试集
# print(Train)
# print(len(Train))
valid = train.loc[390:]
# print(valid)
dd = np.asarray(Train.mwd) #将结构数据转化为ndarray
y_hat = valid.copy()  #复制一下
y_hat['naive'] = dd[len(dd)-1]
plt.plot(Train.index, Train['mwd'], label ='Train')
plt.plot(valid.index,valid['mwd'], label='Valid')
plt.plot(y_hat.index,y_hat['naive'], label='Naive Forecast')rmse = sqrt(mean_squared_error(valid.mwd, y_hat.naive))
print('Test RMSE: %.3f' % rmse)plt.show()
'''霍尔特-温特(Holt-Winters)方法
在 Holt模型基础上引入了 Winters 周期项(也叫做季节项),
可以用来处理月度数据(周期 12)、季度数据(周期 4)、星期数据(周期 7)等时间序列中的固定周期的波动行为。
引入多个 Winters 项还可以处理多种周期并存的情况。'''
y_hat_avg = valid.copy()
fit1=ExponentialSmoothing(np.asarray(Train['mwd']),seasonal_periods=7,trend='add',seasonal='add',).fit()
y_hat_avg['Holts_Winter'] = fit1.forecast(len(valid))
plt.plot( Train['mwd'], label='Train')
plt.plot(valid['mwd'], label='Valid')
plt.plot(y_hat_avg['Holts_Winter'], label='Holt_Winter')
rms = sqrt(mean_squared_error(valid.mwd, y_hat_avg.Holts_Winter))
print('Test RMSE: %.3f' % rmse)plt.show()

蓝色部分为训练集数据,橙色部分为测试集部分。绿色的那条线就是这个朴素模型预测的结果

霍尔特-温特(Holt-Winters)

'''
霍尔特-温特(Holt-Winters)方法
在 Holt模型基础上引入了 Winters 周期项(也叫做季节项),
可以用来处理月度数据(周期 12)、季度数据(周期 4)、星期数据(周期 7)等时间序列中的固定周期的波动行为。
引入多个 Winters 项还可以处理多种周期并存的情况。
'''
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from math import sqrt
from sklearn.metrics import mean_squared_error
from statsmodels.tsa.holtwinters import ExponentialSmoothingtrain=pd.read_csv('mean_mwd.csv')
train['time'] = pd.to_datetime(train.time, format='%Y-%m-%d-%H-%M')
# print(train.dtypes)
# print(train.head())
# print(train.time.dt.year)  #单独提取时间里面的年份
# print(train)
Train = train.loc[:390] #划分训练集和测试集
# print(Train)
# print(len(Train))
valid = train.loc[390:]
# print(valid)
y_hat_avg = valid.copy()
fit1=ExponentialSmoothing(np.asarray(Train['mwd']),seasonal_periods=7,trend='add',seasonal='add',).fit()
y_hat_avg['Holts_Winter'] = fit1.forecast(len(valid))
plt.plot( Train['mwd'], label='Train')
plt.plot(valid['mwd'], label='Valid')
plt.plot(y_hat_avg['Holts_Winter'], label='Holt_Winter')
rmse = sqrt(mean_squared_error(valid.mwd, y_hat_avg.Holts_Winter))
print('Test RMSE: %.3f' % rmse)plt.show()

时间序列数据与时间序列预测模型(2022.2.)相关推荐

  1. 通过 Python 代码实现时间序列数据的统计学预测模型

    来源 | DeepHub IMBA 封图 | CSDN 付费下载于视觉中国 在本篇中,我们将展示使用 Python 统计学模型进行时间序列数据分析. 目标是:根据两年以上的每日广告支出历史数据,提前预 ...

  2. 时间序列数据机器学习(ICML 2022)

    Utilizing Expert Features for Contrastive Learning of Time-Series Representations 本文提出一种将专家知识用于时间序列表 ...

  3. 时间序列数据的预处理

    来源:Deephub Imba 本文约2600字,建议阅读5分钟 在本文中,我们将看到在深入研究数据建模部分之前应执行的常见时间序列预处理步骤和与时间序列数据相关的常见问题. 时间序列数据随处可见,要 ...

  4. What Is Time-series Data? 什么是时间序列数据?

    文章:https://docs.timescale.com/v0.9/introduction/time-series-data 什么是时间序列数据? 我们一直在谈论什么是"时间序列数据&q ...

  5. 时间序列数据、自协方差函数、自相关函数与平稳性

    这篇博客主要记录人大出版<应用时间序列分析>第一章的笔记. 时间序列数据 数据类型 数据分析中的数据大致分为三类:时间序列数据.横截面数据.面板数据.下面分别介绍这三类数据. 时间序列数据 ...

  6. 横截面数据、时间序列数据和面板数据

    横截面数据是在同一时间,不同统计单位相同统计指标组成的数据列.横截面数据不要求统计对象及其范围相同,但要求统计的时间相同.也就是说必须是同一时间截面上的数据.例如,为了研究某一行业各个企业的产出与投入 ...

  7. bagging和时间序列预测_时间序列的LSTM模型预测——基于Keras

    一.问题背景     现实生活中,在一系列时间点上观测数据是司空见惯的活动,在农业.商业.气象军事和医疗等研究领域都包含大量的时间序列数据.时间序列的预测指的是基于序列的历史数据,以及可能对结果产生影 ...

  8. Apache IoTDB 相关论文《乱序时间序列数据的写入管理》入选国际数据库顶级会议 ICDE 2022

    2022年5月9日,国际数据库顶级会议 ICDE 2022(线上会议)盛大召开.康愈圆同学的< Separation or Not: On Handing Out-of-Order Time-S ...

  9. 论文阅读-利用时间序列数据增强来提高全球预测模型的准确性

    Improving the Accuracy of Global Forecasting Models using Time Series Data Augmentation 全球预测模型(GFM), ...

最新文章

  1. 苏黎世大学 AI 新研究:仅用少量样本生成高质量光声图像
  2. Spring Remoting: Burlap--转
  3. git合并多个commit成为一个commit
  4. 手把手教你学Dapr - 1. .Net开发者的大时代
  5. python 科学计算机_在这个免费的虚拟俱乐部中学习计算机科学和Python的基础知识
  6. 前端学习(1041):todolist--html界面
  7. java面试题2 牛客:定义类中成员变量时不可能用到的修饰是
  8. android webview设置加载进度条
  9. java 看书浏览器官_JAVA读取文件流,设置浏览器下载或直接预览操作
  10. 操作系统内核的一些事
  11. Maven学习总结(30)——Maven项目通用三级版本号说明
  12. 关于C++中cin.ignore()的问题
  13. 国内少有的Flutter干货分享:Flutter的原理及美团的实践!
  14. QT:QByteArray和QByteArray、char *(转)
  15. .net core2 发送电子邮件封装
  16. 机器学习中的分类模型和回归模型
  17. 算法中的微积分:5大函数求导公式让你在面试中脱颖而出
  18. 机器学习之---文本分析(jieba分词和词云绘制)
  19. 从一块内存开始,带你了解企业级虚拟化(二)
  20. linux dhcp认证,如何让linux dhcp server同时支持option 60和option 82认证

热门文章

  1. python中小于号的重载_Python操作符重载
  2. PyTorch - FashionMNIST + LeNet / AlexNet / VGG / GooLeNet / NiN / ResNet / DenseNet
  3. 鸿蒙处理器什么出什么时候出,华为鸿蒙系统和全新的鸿鹄处理器将于8月9日正式发布,荣耀首发...
  4. 状态栏点击没反应解决方法
  5. css中的inset,inset() | CSS属性参考
  6. 图像处理2_读取JPG图片的Exif属性(一) - Exif信息简介
  7. QGIS使用 版本3.22
  8. 开发网校系统要准备什么
  9. Linux sysrq使用
  10. 易优CMS蓝色平面设计广告印刷网站模板源码+带手机版