使用pandas和matplotlib回归股票数据

时间:2012-12-09 09:23:55

标签: python matplotlib pandas statsmodels

我想在股票图表上绘制Excel所谓的“指数趋势/回归”。当我在IPython笔记本中运行下面的代码时,它只是说“内核已经死了,你想重新启动吗?”。关于如何修复它的任何想法?此外,这只是试图进行线性回归,我不太确定如何对指数数据进行回归。

import datetime
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas.io.data import DataReader

sp500 = DataReader("AGG", "yahoo", start=datetime.datetime(2000, 1, 1)) # returns a DataFrame
sp500["regression"] = sm.OLS(sp500["Adj Close"], sp500.index).fit().fittedvalues()
top = plt.subplot2grid((3,1), (0, 0), rowspan=2)
top.plot(sp500.index, sp500["Adj Close"], 'b-', sp500.index, sp500["regression"], 'r-')
bottom = plt.subplot2grid((3,1), (2,0))
bottom.bar(sp500.index, sp500.Volume)
plt.gcf().set_size_inches(18,8)

2 个答案:

答案 0 :(得分:9)

我又看了一遍,发现我以前的答案很不合适,因为它没有包含拦截。我已经更新了我的答案。

段错误来自于尝试将Datetime索引作为外生变量。而是尝试:

import datetime
import matplotlib.pyplot as plt
import statsmodels.api as sm
import pandas
from pandas.io.data import DataReader

sp500 = DataReader("AGG", "yahoo", start=datetime.datetime(2000, 1, 1)) # returns a DataFrame
sp500["regression"] = sm.OLS(sp500["Adj Close"],
    sm.add_constant(range(len(sp500.index)),
    prepend=True)).fit().fittedvalues

请注意,您不需要将statsmodels的fittingvalues作为函数调用。 如果您的数据点均为空间,则此模型将提供与使用实际索引相同的结果。

对于您的第二个问题,大熊猫是您可能想要查看的内置指数加权移动平均线:pandas.ewma here

答案 1 :(得分:1)

您需要发布更多信息 - 版本号以及您如何构建大熊猫 - 也许回溯也有助于缩小范围。我无法使用或不使用pylab在IPython中的64位Linux上复制带有pandas 0.9.1的段错误。您可能还想报告github问题上的错误而不是堆栈溢出。更容易让开发人员关注那里。