Python用於金融數據分析第7課-----Pandas處理時間序列數據

一、Rolling 和 Expanding

rolling和expanding都是類似的,目的是查看股票市場價格隨著時間的變化,不同的是rolling average算的是最近一個窗口期(比如說20天)的一個平均值,過了一天這個窗口又會向下滑動一天算20天的平均值;expanding的話,是從第一個值就開始累加地計算平均值。

import pandas as pdimport matplotlib.pyplot as plt%matplotlib inlinedf=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個,否則前面的可能都會是nandf[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補充。


推薦閱讀:

用特徵選擇方法優化模型|python數據挖掘思考筆記(1)
數據分析師必須知道的九個問題
運營做數據分析都會犯的幾個錯
R語言-簡單數據分析
用數據講故事

TAG:數據分析 | 金融數據 |