【Python數據分析】金融時間序列分析(一)
此系列文章內容、數據,均來自《金融時間序列分析》(第三版 Ruey S. Tsay著)。原著中使用的數據處理語言是R,但本人對R不熟悉,故準備改用python做為學習此書的數據分析語言。文章中所使用的數據/源代碼,都會陸續發布在strengthening/AFTS 中,如有錯誤或者問題,可以直接在git中開issue。
二、環境準備
Python 2.7
iPython :一種基於python的互動式計算和開發環境,它鼓勵一種「執行-探索」的工作模式,而不是許多其他編程語言那種「編輯-編輯-運行」的傳統工作模式。此外,它跟操作系統shell和文件系統之間也有著非常緊密的集成。由於大部分的數據分析代碼都含有探索式操作,因此IPython將有助於提高你的工作效率。
Pandas:它是一款強大的python數據分析工具包。對數據進行分析時,既不會像傳統關係型資料庫那樣把大量時間耗費在數據的讀寫上,也不是像spark,hadoop那樣的重量級數據處理工具。所以使用起來方便、快捷。Matplotlib:繪圖是數據分析工作中重要的任務之一,是探索過程的一部分。Matplotlib是一個用戶創建出版質量圖表的桌面繪圖包,其目的是為Python構建一個MATLAB式的繪圖介面,致力於將IPython和Matplotlib結合起來以提供一種功能豐富且高效的科學計算環境。
三、基本統計量
以IBM日簡單收益率數據做為研究對象,進行幾個基本統計量的計算
#-*- coding:utf-8 -*-from __future__ import divisionimport pandas as pdimport mathimport momentdf = pd.read_table("./chapter1/text/d-ibm3dx7008.txt")df.columns = df.columns.map(lambda x :x.strip()) # 去掉欄位名存在的空格df["Date"] = df["Date"].apply( lambda x : moment.date( str(x) ,"YYYYMMDD").date)df = df.set_index(df["Date"])print dfdf.shape #數據集行數 列數df.head(1) # 數據集的第一行df.tail(1) # 數據集的最後一行 ibm = df["rtn"]sibm = ibm * 100sibm.mean() #均值sibm.median() #中位數sibm.sum() #和sibm.var() #方差sibm.std() #標準差sibm.skew() # 偏度sibm.kurtosis() # 超額峰度
四、時間序列的線性圖表展示及重採樣
在金融時間序列中,往往需要對不同時間頻率的數據進行展示,下面的代碼使用
ipython --pylab
命令進入ipython的pylab模式(此模式默認集成了matplotlib畫圖包)
In [1]: import pandas as pdIn [2]: import momentIn [3]: df = pd.read_table("./chapter1/text/d-ibm3dx7008.txt")In [4]: df.columns = df.columns.map(lambda x :x.strip()) # 去掉欄位名存在的空格In [5]: df["Date"] = df["Date"].apply( lambda x : moment.date( str(x) ,"YYYYMMDD").date) # 將字元串Date列轉化成時間序列In [6]: df = df.set_index(df["Date"]) #將時間序列Date設置為數據集的索引In [7]: df["rtn"].plot() #IBM股票日收益率折線圖Out[7]: <matplotlib.axes._subplots.AxesSubplot at 0x7f802c9d4990>
In [9]: df["rtn"].resample("M").sum().plot() #IBM股票月收益率折線圖Out[9]: <matplotlib.axes._subplots.AxesSubplot at 0x7f802b299a50>
In [10]: df["rtn"].cumsum().plot() #IBM股票日累計收益率折線圖Out[10]: <matplotlib.axes._subplots.AxesSubplot at 0x7f8029008ed0>
In [11]: df["rtn"].resample("M").sum().cumsum().plot() #IBM股票月累計收益率折線圖Out[11]: <matplotlib.axes._subplots.AxesSubplot at 0x7f8028b6a190>
文章中所展示代碼在:https://github.com/strengthening/AFTS/blob/master/chapter1/example1.2.py
推薦閱讀:
※如何看待將Python代碼轉換成Go代碼並進一步編譯的 Grumpy 項目?
※基於ArcGIS的python編程:2.python基礎(一)
※不再寫 for 循環
※翻譯|Stack Overflow上關於Python的高票問答(一)
※Python基礎語法知識總結與實踐(二)