python时间序列模型,python时间序列预测代码

  python时间序列模型,python时间序列预测代码

  时间序列数据在许多不同的行业中非常重要。在科研、金融行业、制药、社交媒体、网络服务等领域尤为重要。时间序列数据的分析变得越来越重要。在分析中有什么比一些好的可视化更好?没有一些视觉效果,任何一种数据分析都是不完整的。因为一个好的情节比20页的报告更能让你理解。因此,本文是关于时间序列数据可视化的研究。

  我将从一些非常简单的可视化开始,然后慢慢转向一些高级的可视化技术和工具。

  在我们开始之前,我需要澄清一件事。

  标题中的“完整指南”并不意味着它有所有的可视化。在这么多不同的库中有这么多的可视化方法,在一篇文章中包含所有这些方法是不切实际的。

  但是这篇文章可以为你提供足够的工具和技巧来清晰地讲述一个故事,或者理解和可视化时间序列数据。我试着解释了一些简单的方法和一些先进的技术。

  数据集如果你阅读这篇文章是为了学习,最好的方法是自己跟踪并运行所有的代码。请随意从以下链接下载数据集:

  https://github . com/rashida 048/Datasets/blob/master/stock _ data . CSV

  import pandas as PD import numpy as NP import matplotlib . py plot as PLT df=PD . read _ CSV( stock _ data . CSV ,parse_dates=True,index_col=Date)df.head()

  我使用read_csv函数中的“parse_dates”参数将“date”列转换为DatetimeIndex格式。在大多数情况下,日期以字符串格式存储,这不是时间序列数据分析的正确格式。如果采用DatetimeIndex格式,将其作为时间序列数据处理会很有帮助。

  让我们从基础开始。最基本的图形应该是使用熊猫的线性图形。我将在这里绘制“体积”数据。看看它是怎样的:

  Df[音量]。plot()这是我们的“体积”数据图。它看上去有些繁忙,有一些大的山峰。在图表中画出所有其他的列来同时检查它们所有的曲线是一个好主意。

  df.plot(subplots=True,figsize=(10,12))

  “开盘”、“收盘”、“高位”和“低位”数据的曲线具有相同的形状。只有“体积”有不同的形状。

  我上面用的折线图非常适合显示季节性。几个月或几周的重新采样和绘制条形图是另一种非常简单和广泛使用的发现季节性的方法。我在这里画一个2016年和2017年的月份数据的柱状图。对于指数,我会用【2016:】。因为我们的数据集包含了截至2017年的数据。所以2016年底应该会带来2016年和2017年。

  df_month=df.resample(M )。mean()fig,ax=plt.subplots(figsize=(10,6))ax . xaxis . set _ major _ formatter(mdates。date formatter( % Y-% m ))ax . bar(df _ month[ 2016 :]。index,df _ month . loc[ 2016 : Volume ],width=25,align=center

  有24个小节。每个条形代表一个月。2017年7月暴涨。

  找到季节性的一种方法是使用一组箱线图。这里我会为每个月做一个箱线图。我将使用开盘价、收盘价、最高价和最低价数据来绘制这个图表。

  导入seaborn为sns#start,end=2016-01 , 2016-12fig,axes=plt.subplots,1,figsize=(10,16),sharex=True)for name,ax in zip([Open , Close , High , Low],axes): sns.boxplot(data=df,x=Month ,y=name,ax=ax)ax . set _ y label()ax . set _ title(name)if ax!=axes[-1]: ax.set_xlabel( )

  它清楚地显示了每月的价值差异。

  有更多的方法来显示季节性。在这篇文章的最后,我用另一种方式来讨论它。

  重新采样和滚动请记住上面“体积”数据的第一个线图。正如我们之前讨论的,这里的数据太多了。可以通过重采样来修复。画月平均数据会很大程度上解决这个问题,而不是画日数据。为此,我将使用为上面的条形图和框图准备的df_month数据集。

  df_month[体积]。plot(figsize=(8,6))

  更容易理解,更清晰!它可以让你更好地理解长期趋势。

  重采样在时间序列数据中很常见。大多数时候,重采样以较低的频率执行。

  因此,本文将只讨论低频重采样。尽管高频率的重采样也是必要的,尤其是为了建模的目的。不是为了数据分析。

  在我们目前研究的“体量”数据中,可以观察到一些大的峰值。这些类型的尖峰对数据分析或建模没有帮助。通常,平滑峰值、重新采样到较低频率和滚动是非常有用的。

  现在,在同一个图上画出每日数据和每周平均“量”。首先,通过重采样方法生成周平均数据集。

  Df_week=df.resample(W )。mean()这个“df_week”和“df_month”在以后的可视化中也会有用。

  让我们在同一张图上画出每日和每周的数据。

   start,end=2015-01 , 2015-08fig,ax=PLT . subplots()ax . plot(df . loc[start:end, Volume],marker= . ,linestyle=-,linewidth=0.5,label=Daily ,color= black )ax . plot(df _ week . loc[start:end, Volume],marker=o ,markersize=8,linestyle=-,label=Weekly ,color=coral)label=Monthly ,color= violet )ax . set _ y label( Open )ax . legend()

  周平均面积的峰值小于日数据的峰值。

  滚动是平滑曲线的另一种非常有用的方法。它取特定数量数据的平均值。如果我想要一个7天的滚动,它会给我们7天的平均数据。

  让我们在上图中包括7维滚动数据。

  df_7d_rolling=df.rolling(7,center=True)。mean()start,end=2016-06 , 2017-05fig,ax=PLT . subplots()ax . plot(df . loc[start:end, Volume],marker= . ,linestyle=-,linewidth=0.5,label= Daily )ax . plot(df _ week . loc[start:end, Volume],marker=o ,markersize=5,linestyle=-,label=周平均成交量)ax . plot(df _ 7d _ rolling . loc[start:end, Volume],marker= . ,linestyle=-,label=7d滚动平均)ax.set_ylabel(股票成交量)ax.legend()

  这个剧情里发生了很多事情。但如果你仔细看,还是可以理解的。如果你注意到7-d的滚动平均线比周平均线平滑。

  通常使用30-d或365-d滚动平均来使曲线更平滑。

  在图表中多次显示变化,看数据如何随时间变化比看每日数据更有用。

  有几种不同的方法来计算和可视化数据的变化。

  shift

  Shift函数在指定时间之前或之后移动数据。如果我不指定时间,它将默认传输一天的数据。这意味着您将获得前一天的数据。像这样的金融数据,把前一天的数据和今天的数据放在一起是有帮助的。

  因为本文只关注可视化,所以我只绘制前一天的数据:

  Df [变]=df . close . div(df . close . shift())df[变]。在上面的代码中,plot (fig size=(20,8),fontsize=16)。div()有助于填充缺失的数据。Div()的意思是“除”。Df.div(6)会将Df中的每个元素除以6。但是这里我用的是 df.close.shift()。所以df的每个元素都会被 df.close.shift()的每个元素除。这样做是为了避免“shift()”操作创建空值。

  你可以简单的指定一个时间段,画出来让外观更清晰。这只是2017年的剧情。

  df[2017][变]。plot(figsize=(10,6))

  虽然这种转换在许多方面都是有用的。但是我发现百分比变化在很多情况下是有用的。

  变化百分比

  我将使用我开始计算的月度数据。这次选了条形图。它清楚地显示了百分比变化。有一个百分比变化函数可用于获取percentage _ change数据。

  df_month.loc[: pct_change]=df。Close.pct_change()*100fig,ax=PLT . subplots()df _ month[ pct _ change ]。plot(kind=bar ,color=coral ,ax=ax)ax . xaxis . set _ major _ locator(mdates。weekday locator())ax . xaxis . set _ major _ formatter(mdates。date formatter( % b % d ))PLT . x ticks(rotation=45)ax . legend()

  我在这里画出了成交数据的百分比变化。这里使用的是每月变化百分比。

  差分

  取指定距离值的差值。默认情况下,它是1。如果指定2,如“df。High.diff(2)",它将取“高”列的第一个和第三个元素、第二个和第四个元素之间的差,依此类推。

  从数据中去除趋势是一种流行的方法。这种趋势不利于预测或建模。

  df。High.diff()。plot(figsize=(10,6))

  扩展窗口

  另一种转化方式。它不断增加和积累。例如,如果向“高”列元素添加扩展函数,第一个元素保持不变。第二个元素成为第一个和第二个元素的累加,第三个元素成为第一个、第二个和第三个元素的累加,以此类推。还可以在上面使用聚合函数,比如均值、中值、标准差等等。

  通过这种方式,它可以提供时变平均值、中值和/或标准差。对财务数据、业务销售或利润数据没有用处吗?

  fig,ax=plt.subplots()ax=df。高。plot(label=高)ax=df。高.扩展()。平均值()。绘图(标签=高扩展平均值)ax=df。高.扩展()。标准()。绘图(标签=高扩展标准)轴图例()

  我在这里加了均值和标准差。看每天的数据和平均值。2017年底,每日数据呈现出一片巨大的痴情蓝天。但并没有显示出平均值的峰值。如果只看2017年的数据,扩大的平均水平可能不一样。

  Hotmap Hotmap通常是一种随处使用的常见数据可视化类型。在时间序列数据中,热图也很有用。

  但是在深入研究热图之前,我们需要开发一个日历来表示数据集的年和月数据。让我们看一个例子。

  在本演示中,我将导入一个日历包,并使用数据透视表函数来生成值。

  导入calendar all _ month _ year _ df=PD . pivot _ table(df,values=Open ,index=[month],columns=[year],fill_value=0,margins=True)named _ index=[[calendar . month _ abbr[I]if is instance(I,int)else I for I in list(all _ month _ year _ df . index)]# name months all _ month _ year _ df=all _ month _ year _ df . set _ index(named _ index)all _ month _ year _ df

  日历已经准备了月平均“开放”数据。现在,用它来生成一个热图。

  ax=SNS . heat map(all _ month _ year _ df,cmap=RdYlGn_r ,robust=True,fmt=.2f ,annot=True,line widths={ size :11 },cbar_kws={shrink:8, label : Open })ax . set _ yticklabels(ax . get _ yticklabels(),rotation=0,font size=10)ax . set _ xticklabels(ax . get _ xticklabels(),rotation=0

  深红色表示值非常高,深绿色表示值非常低。

  图分解图分解将在同一个图中显示观察值和这三个元素:

  趋势:时间序列一致的上升或下降趋势。

  季节性:时间序列的一种确定的周期性模式。

  噪音:异常值或缺失值

  使用统计模型库,很容易做到:

  从pylab导入rcParamsimport statsmodels.api作为smrcParams[ figure . fig size ]=11,9 decomposition=sm . TSA . seasonal _ decomposite(df _ month[ Volume ],model= Additive )fig=decomposition . plot()PLT . show()

  趋势就是均线。为了对最后一行的残差有一个高层次的概念,下面是一般的公式:

  原始观察值=趋势季节性残差

  虽然分解文档本身是一种非常简单的表示,但它仍然非常流行。

  综上所述,如果你能运行以上所有代码,恭喜你!今天,您已经学习了足够多的时间序列数据可视化。正如我在开始时提到的,有许多很酷的可视化技术可用。

  作者:拉希达纳斯林沙克

  Deephub翻译小组

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • ,,Python中利用LSTM模型进行时间序列预测分析的实现
  • 时间序列adf检验怎么判断平稳性,
  • 用python实现ARIMA时间序列预测实例,python时间序列预测的方法
  • python时间序列分析模块,用python实现ARIMA时间序列预测实例
  • 时间序列模型用于哪种预测,时间序列预测模型实验报告
  • 时间序列分析难不难,时间序列分析问题
  • python最简单的时间序列预测,python 时间序列模型
  • 基于lstm的时间序列预测,基于cnn的时间序列预测模型
  • Eviews时间序列模型,时间序列回归模型步骤
  • 时间序列分析基于r期末考试,时间序列分析选择题
  • 时间序列预测的基本前提,简述常用的几种时间序列预测方法
  • 时间序列的多元线性回归模型,时间序列的经典线性回归模型的基本假定是什么
  • adf检验 python,如果时间序列zt经过adf检验
  • stata时间序列数据处理,时间序列数据怎么用stata做回归分析
  • 时间序列分析及其应用-基于R语言实例(原书第4版),时间序列分析r语言答案
  • 留言与评论(共有 条评论)
       
    验证码: