做数据分析为何要学统计学(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月的每月新生儿数作为时间序列分析人口增长的规律。代码如下:

python 复制代码
#读入时间序列数据
import pandas as pd
X=pd.read_csv("https://robjhyndman.com/tsdldata/data/nybirths.dat",header=None,names=["birth"])
#绘制折线图
X.plot()
python 复制代码
#进行时间序列分析
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月份左右开始出生人口急速下降。

相关推荐
全栈弄潮儿几秒前
Python实战第10期:异常处理
后端·python·编程语言
余槐i10 分钟前
加了Cookie yt-dlp仍报HTTP 403:3个容易漏的请求头差异
python·http·ffmpeg·开发工具·yt-dlp
菜鸟不秃头22 分钟前
手搓 ViT -- 并完成图像分类任务
python
ZhuoAIStage25 分钟前
舞台工艺检测表单自动生成:用 Python 与智能体 Skill 打通规范限值到可填表的数据流
python·第三方检测·舞台工艺·表单自动生成·规范性引用
MoRanzhi12031 小时前
第3篇 · 使用 PyQt5 实现 2048 桌面版游戏:MVC 架构与撤销和重做
python·mvc·pyqt5·桌面应用开发·gui开发·2048游戏·撤销与重做
蚰蜒螟1 小时前
从 Java SocketChannel 到 TCP 挥手:一次 close() 的完整调用链与引用计数解析
java·python·tcp/ip
Smoothcloud润云1 小时前
GPU算力平台跑知识库问答,模型回答总跑偏?先排查检索链路
人工智能·python·深度学习·gpu算力·gpu
mklpo1472 小时前
python3:如何按照实际执行需求导入模块,而不是启动时统一导入?(Python3.15)。2026-10-20
开发语言·人工智能·python
夜晚回家2 小时前
Python 赋值运算符详解 | 从 = 到 +=,一张记账单讲清复合赋值
开发语言·python
Maya动画技术3 小时前
pptx批量转png图片工具
python