做数据分析为何要学统计学(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月份左右开始出生人口急速下降。

相关推荐
码界筑梦坊12 小时前
125-基于Flask的客户购物偏好数据可视化分析系统
python·信息可视化·flask·毕业设计
测试秃头怪12 小时前
接口测试与常用接口测试工具详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
坐吃山猪12 小时前
【Nanobot】README03_LEVEL2_工具系统架构
python·源码·agent·nanobot
YangYang9YangYan12 小时前
2026学习数据分析对产品经理的价值
学习·数据分析·产品经理
河阿里12 小时前
Python容器:特性、区别和使用场景
开发语言·python
babe小鑫12 小时前
2026学数据分析对就业能力提升的价值
数据挖掘·数据分析
AC赳赳老秦12 小时前
OpenClaw与思维导图工具联动:自动生成工作规划脑图、拆解任务节点,适配职场管理
java·大数据·服务器·数据库·python·php·openclaw
才兄说12 小时前
机器人二次开发机器人动作定制?数据优化迁移
python
情绪总是阴雨天~12 小时前
深入理解A2A协议:从零搭建多Agent协作系统实战
python·langchain·langgraph·a2a
yoyo_zzm12 小时前
四大编程技术对比:PHP、Java、Python与HTML
java·python·php