Numpy 用Pandas估计股票收益

用Pandas估计股票收益,Pandas中的DataFrame是一个兼有矩阵和字典特征的数据结构,其功能类似于R中的dataframe。实际上,DataFrame是Pandas中的核心数据结构,你可以对其做各种操作。进行投资组合分析时,经常需要计算投资组合的相关矩阵,本攻略将对此予以介绍。

具体步骤

首先,创建一个字典对象,其成员是每支股票的日收益率数据。然后,以日期为行标签,创建DataFrame对象。最后,计算相关矩阵并绘制结果。

  1. 创建DataFrame对象。

为了创建DataFrame对象,需要先创建一个字典。该字典对象以股票代码为索引关键字(键),对应的值是该股的对数收益率。该DataFrame对象以日期为索引(行标签),以股票代码为列标签。

data = {}

for i in xrange(len(symbols)):
    data[symbols[i]] = numpy.diff(numpy.log(close[i]))

df = pandas.DataFrame(data,
    index=dates[0][:-1], columns=symbols)

  1. 操作DataFrame对象。

现在可以对DataFrame对象做各种操作,例如计算相关矩阵或绘图。

print df.corr()
df.plot()

包括下载股价数据在内的完整代码如下。

import pandas
from matplotlib.pyplot import show, legend
from datetime import datetime
from matplotlib import finance
import numpy

# 2011到2012
start = datetime(2011, 01, 01)
end = datetime(2012, 01, 01)

symbols = ["AA", "AXP", "BA", "BAC", "CAT"]

quotes = [finance.quotes_historical_yahoo(symbol, start, end, asobject=True)for symbol in symbols]

close = numpy.array([q.close for q in quotes]).astype(numpy.float)
dates = numpy.array([q.date for q in quotes])

data = {}

for i in xrange(len(symbols)):
data[symbols[i]] = numpy.diff(numpy.log(close[i]))

df = pandas.DataFrame(data, index=dates[0][:-1], columns=symbols)

print df.corr()
df.plot()
legend(symbols)
show()

相关矩阵的输出结果如下。

AA       AXP        BA       BAC       CAT
AA   1.000000  0.768484  0.758264  0.737625  0.837643
AXP  0.768484  1.000000  0.746898  0.760043  0.736337
BA   0.758264  0.746898  1.000000  0.657075  0.770696
BAC  0.737625  0.760043  0.657075  1.000000  0.657113
CAT  0.837643  0.736337  0.770696  0.657113  1.000000

上述五支股票的对数收益率图示如下:

Numpy 用Pandas估计股票收益

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程