越学越上瘾   11.11 来百知学IT   课程全面升级

立刻报名学习

400-616-5551

您所在位置: 首页> 学习资讯> 20个Python教程,掌握时间序列的特征分析

20个Python教程,掌握时间序列的特征分析

发布百知教育 来源:学习资讯 2019-08-20

【导语】时间序列是指以固定时间为间隔的序列值。本篇教程将教大家用 Python 对时间序列进行特征分析。

 

1、什么是时间序列?


时间序列是指以固定时间为间隔的、由所观察的值组成的序列。根据观测值的不同频率,可将时间序列分成小时、天、星期、月份、季度和年等时间形式的序列。有时候,你也可以将秒钟和分钟作为时间序列的间隔,如每分钟的点击次数和访客数等等。

 

为什么我们要对时间序列进行分析呢?

 

因为当你想对一个序列进行预测时,首先要完成分析这个步骤。除此之外,时间序列的预测也具有极大商业价值,如企业的供求量、网站的访客量以及股票价格等,都是极其重要的时间序列数据。

 

那么,时间序列分析都包括哪些内容呢?

 

要做好时间序列分析,必须要理解序列的内在属性,这样才能做出更有意义且精准的预测。


2、如何在 Python 中引入时间序列?


关于时间序列的数据大都存储在 csv 文件或其他形式的表格文件里,且都包含两个列:日期和观测值。

 

首先我们来看 panda 包里面的 read_csv() 函数,它可以将时间序列数据集(关于澳大利亚药物销售的 csv 文件)读取为 pandas 数据框。增加一个 parse_dates=['date'] 字段,可以把包含日期的数据列解析为日期字段。


1.png



2.png


时间序列数据框

 

此外,你也可以将文件读取为 pandas 序列,把日期作为索引列,只需在 pd.read_csv() 中指定 index_col 参数。


3.png


pandas 序列

pandas 序列

 

注意,在 pandas 序列中,'value' 列的位置高于 'date' 列,这表明它是一个 pandas 序列而非数据框。

 

3、什么是面板数据?


面板数据同样是基于时间的数据集。

 

不同之处是,除了时间序列,面板数据还包括一个或多个相关变量,这些变量也是在同个时间段内测得的。

 

面板数据中的列包括有助于预测 y 值的解释变量,这些特征列可用于之后的预测。以下是关于面板数据的例子:



4、时间序列可视化


接下来,我们用 matplotlib 对序列进行可视化。


5.png


6.png


时间序列可视化

 

由于所有的值都为正数,无论使用 y 轴的哪一侧都可以看到增长的趋势。


python学习


飞机乘客数据 - 双边序列

 

由于这是一个月份的时间序列,每年的走势都遵循着特定重复的模式,你可以在同一个图中画出单独每年的折线。这样有助于对这几年的趋势走向进行平行对比。

 

季节性时间序列的可视化:


9.png


10.png


药品销售的季节性时间序列图

 

每年的二月份,药品销售会有一次大幅度下跌,三月份会回涨,四月份再次下跌,以此规律循环。很明显,该模式以年为单位,每年循环往复。

 

不过,随着年份的变化,药品销售总体呈上升趋势。你可以选择使用箱型图将这一趋势进行可视化,可以方便看出每一年的变化。同样地,你也可以按月份绘制箱型图,来观察每个月的变化。

 

按月份(季节)和年份绘制箱型图:你可以将数据处理成以季节为时间间隔,然后观察特定年份内值的分布,也可以将全部时间的数据进行对比。



年份序列和月份序列的箱型图

 

上面的箱型图可以使年份和月份的序列更易于观察。同样,在月份的箱线图中,十二月和一月的药品销售额明显更高,这是因为处于假期折扣季。

 

到目前为止,我们了解了通过相似性来观察时间序列的模式,接下来,如何发现这些常见模式中的差异呢?

 

5、时间序列的模式


任何一个时间序列都可以被分解成以下几个部分:基准 + 趋势成分 + 季节成分 + 残差成分。

 

趋势是指时间序列中上升或下降的倾斜程度。但季节成分是由于受季节因素影响而产生的周期性模式循环,也可能受每年内不同月份、每月内不同日期、工作日或周末,甚至每天内不同时间的影响。

 

然而,不一定所有的时间序列都具备趋势或季节性。一个时间序列也可能不存在趋势,但具有季节性。反之亦然。

 

因此,一个时间序列可以被想象成趋势、季节性和残差项的组合。


13.png


时间序列的模式

 

另一个需要考虑的方面是周期性模式。当序列中的上升和下降,不是按日历中的特定时间间隔发生时,就会出现这种情况。注意不要把“周期”作用和“季节”作用混淆。

 

那么,如何区分“周期”和“季节”呢?

 

如果序列中的模式不是以日历中特定间隔循环出现的,那么就是周期。因为与季节性不同,周期作用通常受到商业或社会经济等因素的影响。

 

6、加法与乘法时间序列


根据趋势和季节的固有属性,一个时间序列可以被建模为加法模型或乘法模型,也就是说,序列中的值可以用各个成分的加和或乘积来表示:

 

加法时间序列:

值 = 基准 + 趋势 + 季节 + 残差

 

乘法时间序列:

值 = 基准 x 趋势 x 季节 x 残差

 

7、如何将时间序列的成分分解出来?


通过将一个时间序列视为基准、趋势、季节指数及残差的加法或乘法组合,你可以对时间序列进行经典分解。


14.png


15.png


加法和乘法分解

 

设置 extrapolate_trend='freq' 有助于处理序列首部趋势和残差中的空值。

 

如果你仔细观察加法分解中的残差项,会发现其中仍保留了一些模式。然而,乘法分解中的残差项看起来更具有随机性。因此,对于这一特定序列来说,采用乘法分解更合适。

 

趋势、季节和残差成分的数值输出均存储在 result_mul 里,下面我们对其进行提取,并放入数据框中:


16.png


仔细观察,会发现 seas、trend 和 resid 三列的乘积正好等于 actual_values。


8、平稳和非平稳时间序列


平稳是时间序列的属性之一。平稳序列中的值不是时间的函数。

 

也就是说,平稳序列的平均值、方差和自相关性等统计特征始终为常数。序列的自相关性是指该序列与之前的值间的相关性。

 

平稳的时间序列也不包括季节因素的影响。那么如何分辨一个序列是否平稳呢?让我们来看几个例子:


19.png


上图来自 R 语言的 TSTutorial 教程。

 

为什么说序列平稳很重要呢?

 

我会对此稍微做一些解释,但要清楚一点,通过采用合适的变换,我们近乎可以将任何时间序列变得平稳。大多数统计预测方法最初都是为平稳时间序列而设计的。预测过程的第一步是通过一些变换,来将非平稳序列变成平稳序列。


作者 | Selva Prabhakaran 

译者 | Tianyu

编辑 | Jane

来源 | AI科技大本营(ID: rgznai100)


上一篇:Python的数据科学实践 | Numpy

下一篇:java培训 | 大型Maven项目,快速按需任意构建,必备神技能!

相关推荐