首页Python【Python数据分析】6...

【Python数据分析】64.时间序列——移动窗口函数rolling和expanding示例


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Data_Analysis/lab/index.html
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis

根据《Python for Data Analysis 3rd Edition》翻译整理

—————————————————–

本文主要是对上篇介绍的移动窗口函数rolling expanding函数的应用示例介绍。

1.加载数据:

本次以历史股票数据为例:

其中,“AAPL”列为苹果股价,“MSFT”列为微软股价,“XOM”列为埃克森美孚股价,“SPX”列为标普500指数

1# parse_dates参数用于尝试将数据解析为datetime,index_col参数用作结果中行索引的列号或列名
2>>> stock = pd.read_csv("./data/stock.csv",parse_dates=True, index_col=0)
3>>> stock

按照工作日频率进行重新采样,因为原始数据有些工作日数据缺失,因此重采样后数据行数会增多。

1>>> stock_re = stock.resample("B").ffill()
2>>> stock_re

2.rolling:

  • 获取苹果公司股票价格的200天的移动窗口平均值:

1>>> stock_re["AAPL"].rolling(200).mean()

绘制原始数据与200天的移动窗口平均值数据的对比图:

1>>> stock_re["AAPL"].plot(figsize=(10,6) , label="original_data"# 原始数据
2
3>>> stock_re["AAPL"].rolling(200).mean().plot(label="rolling200_mean"# 移动窗口平均值数据
4
5>>> plt.legend() # 创建图例

  • 在 DataFrame 上调用移动窗口函数会将转换应用于每一列:

1>>> stock_re.rolling(200).mean()

1# 画图中如果X轴或者Y轴的数据差异过大,可能会导致图像展示不友好,数值小的部分基本上无法展示,可以传入logy=True进行Y轴的缩放(绘制y轴的对数图形)
2>>> stock_re.rolling(200).mean().plot(logy=True , figsize=(10,6))

  • rolling 函数也接收一个表示固定大小的时间偏置字符串。例如,我们可以像这样计算200天的滚动平均值:

1>>> stock_re.rolling("200D").mean()

绘制原始数据与200天的滚动平均值数据的对比图:

1>>> stock_re["AAPL"].plot(figsize=(10,6), label="original_data"# 原始数据
2
3>>> stock_re["AAPL"].rolling("200D").mean().plot(label="rolling200D_mean"# 移动窗口平均值数据
4
5>>> plt.legend() # 创建图例

2.expanding:

expanding从时间序列的起始位置开始时间窗口,并增加窗口的大小,直到它涵盖整个序列。

分别计算rolling(200)expanding(200)的均值并绘制对比图:

  • rolling(200).mean():

1>>> rolling_mean = stock_re["AAPL"].rolling(200).mean()
2>>> rolling_mean

  • expanding(200).mean():

1>>> expanding_mean = stock_re["AAPL"].expanding(200).mean()
2>>> expanding_mean 

  • 绘制对比图:

1>>> rolling_mean.plot(figsize=(10,6) , label="rolling_mean")
2
3>>> expanding_mean.plot(label="expanding_mean")
4
5>>> plt.legend() # 创建图例


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments