本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Data_Analysis/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接: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
函数的应用示例介绍。
本次以历史股票数据为例:
其中,“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() # 创建图例
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() # 创建图例
本篇文章来源于微信公众号: 码农设计师