Python 用于金融数据分析第7课-----Pandas处理时间序列数据

一、Rolling 和 Expanding

rolling和expanding都是类似的,目的是查看股票市场价格随着时间的变化,不同的是rolling average算的是最近一个窗口期(比如说20天)的一个平均值,过了一天这个窗口又会向下滑动一天算20天的平均值;expanding的话,是从第一个值就开始累加地计算平均值。

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df=pd.read_csv('walmart_stock.csv')
df.head()
#在这里我把索引设为日期列
df.set_index('Date')
df.head()

输出结果


绘制一下开盘指数

df['Open'].plot(figsize=(16, 6), '-')

rolling

现在开始绘制滚动平均值


根据官方文档,我们主要设置窗口大小就可以了。

#注意在滚动之后是要设置聚合函数的,expanding一样,跟groupby操作类似
df.rolling(7).mean().head(10)

可以看到前6天是没有值的,原因是前6天都没有之前的7天数据,所以是nan。

#绘制出open的原数据的曲线和滚动平均值的曲线
df['former 30 days rolling Open mean']=df['Open'].rolling(30).mean()
df[['Open', 'former 30 days rolling Open mean']].plot(figsize=(16, 6))

可以看到滚动平均值会更加地差异化更小。

Expanding

#在这里要定义最小的观察元素是1个,否则前面的可能都会是nan
df['former 30 days expanding Open mean']=df['Open'].expanding(min_periods=1).mean()
df[['Open', 'former 30 days expanding Open mean']].plot(figsize=(16, 6))

从图上可以看得出,expanding曲线相对于原数据点的曲线要更加稳定一些,它可以用来看这只股票的长期稳定性。

Bollinger Bands

df['former 30 days rolling Close mean']=df['Close'].rolling(20).mean()
df['upper bound']=df['former 30 days rolling Close mean']+2*df['Close'].rolling(20).std()#在这里我们取20天内的标准差
df['lower bound']=df['former 30 days rolling Close mean']-2*df['Close'].rolling(20).std()
df[['Close', 'former 30 days rolling Close mean','upper bound','lower bound' ]].plot(figsize=(16, 6))

二、Resampling

重采样可以认为跟 group以及上面说到的rolling和expanding都是一样的,都是分组操作。


官方文档当中主要注意的是rule,它是一个字符串的形式给出,表示我们希望以年月日工作日等等来对数据进行编组,同样地是编组完之后需要有个聚合函数。
看一下rule的种类。


我们先把以上麦当劳的数据的index进行转换成datetime格式,可以使用pd.to_datetime的方法。

df.index=pd.to_datetime(df.index)
type(df.index)

通过转换以后就是datetime格式了,接下来就是进行resample。

df.resample('M').mean()

可以看得到,在按照月份resample之后多余的行会去掉,只剩下最后统计的那一行(在这里就是每个月底统计上一个月的平均值)。
也可以自己定义我要对group后的元素怎么操作(比如说按照一个月group以后我想取出第一个值,或者说是其他的)

def first_day(grp):
    return grp[0]#返回这个月的第一天的值
df.resample('M').apply(first_day)

这样,每个月底都会返回这个月的第一天的值。

三、Time shifting

time shifting其实就是把索引往前或者往后挪动


df.shift(10)

这里索引往前挪了10天,相当于数据往后挪动了10天,缺失值用nan补充。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容