python 金融时间序列分析_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 division
import pandas as pd
import math
import moment
df = 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 df
df.shape #数据集行数 列数
df.head(1) # 数据集的第一行
df.tail(1) # 数据集的最后一行
ibm = df['rtn']
sibm = ibm * 100
sibm.mean() #均值
sibm.median() #中位数
sibm.sum() #和
sibm.var() #方差
sibm.std() #标准差
sibm.skew() # 偏度
sibm.kurtosis() # 超额峰度
四、时间序列的线性图表展示及重采样
在金融时间序列中,往往需要对不同时间频率的数据进行展示,下面的代码使用
ipython --pylab
命令进入ipython的pylab模式(此模式默认集成了matplotlib画图包)
In [1]: import pandas as pd
In [2]: import moment
In [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]:

In [9]: df['rtn'].resample('M').sum().plot() #IBM股票月收益率折线图
Out[9]:

In [10]: df['rtn'].cumsum().plot() #IBM股票日累计收益率折线图
Out[10]:

In [11]: df['rtn'].resample('M').sum().cumsum().plot() #IBM股票月累计收益率折线图
Out[11]:
更多推荐
所有评论(0)