做数据分析为何要学统计学(10)——如何进行时间序列分析

时间序列是由随时间变化的值构成,如产品销量、气温数据等等。通过对时间序列展开分析,能够回答如下问题:

  • (1)被研究对象的活动特征是否有周期性(也称季节性)
  • (2)被研究对象的活动特征是否有趋势性(上升或下降)

时间序列分析有多种方法,常用方法为STL(Seasonal and Trend decomposition using Loess)算法。该方法是一种把时间序列分解为趋势项(trend component)、季节项(seasonal component)和残差项(remainder/residual component/random)的过滤过程。如下图:

STL算法在1990年由密歇根大学的R. B. Cleveland教授以及AT&T Bell实验室的W. S. Cleveland等人研发。其特点是:

  • 稳健的估计趋势项和季节项,而不会被数据中的异常行为扭曲
  • 可以指定季节项的周期为采样时间间隔任意大于一的整数倍
  • 可以分解有缺失值的时间序列

 以下用纽约1946年1月到1959年12月的每月新生儿数作为时间序列分析人口增长的规律。代码如下:

#读入时间序列数据
import pandas as pd
X=pd.read_csv("https://robjhyndman.com/tsdldata/data/nybirths.dat",header=None,names=["birth"])
#绘制折线图
X.plot()

 

#进行时间序列分析
import  statsmodels.api as sm
import matplotlib.pyplot as plt
res = sm.tsa.seasonal_decompose(X,period=12)
res.plot()
plt.xlabel("Month")
plt.show()

结果如下

可以看人口出生在第38个月左右后出生有明显上升趋势,而且从每年3月-6期间,出生人口开始进入高峰期,从8月份左右开始出生人口急速下降。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-11 22:54:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-11 22:54:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-11 22:54:01       82 阅读
  4. Python语言-面向对象

    2023-12-11 22:54:01       91 阅读

热门阅读

  1. python扩展内置类型

    2023-12-11 22:54:01       60 阅读
  2. Vmware突然无法获取IP

    2023-12-11 22:54:01       57 阅读
  3. DataFrame 索引最后一列数据 Python

    2023-12-11 22:54:01       50 阅读
  4. 蓝牙配对、连接和删除汇总

    2023-12-11 22:54:01       77 阅读
  5. 这是第一篇文章 试试水

    2023-12-11 22:54:01       62 阅读
  6. 80个常用shell命令及简单用法

    2023-12-11 22:54:01       55 阅读
  7. 如何理解冲突域和广播域

    2023-12-11 22:54:01       66 阅读
  8. [ERROR] 不再支持源选项 6

    2023-12-11 22:54:01       57 阅读
  9. vim常用键位总结

    2023-12-11 22:54:01       56 阅读
  10. 【Android】使用Netty库来实现Socket接收

    2023-12-11 22:54:01       60 阅读
  11. Android Kotlin 泛型:强大的类型抽象和重用利器

    2023-12-11 22:54:01       60 阅读
  12. Android 依据Build相关信息判断机型

    2023-12-11 22:54:01       56 阅读
  13. CF1898B Milena and Admirer(贪心)

    2023-12-11 22:54:01       62 阅读