Pandas DataFrame - 获得回归值后绘制线性回归线

时间:2016-11-11 18:23:44

标签: python pandas dataframe regression

我有以下DataFrame,示例如下:

enter image description here

我通过以下方式得到了回归:

ADBE['Date'] = ADBE['Date'].values.astype(float)
model = pd.ols(y = ADBE['Close'], x = ADBE['Date'])

我得到以下结果:

Regression results`

我已尝试将结果绘制如下:

import matplotlib.pyplot as plt
plt.plot(model, ADBE['Close'])

我收到错误消息:

“x和y必须具有相同的第一维”

我得知回归结果只是一个数字(1维)与数组/数据框(ADBE ['Close']形成对比,并尝试使用stackoverflow中的几种方法进行二维回归。没有运气。有没有人在回归之前做过这个?

编辑:我也尝试了以下内容:

ols2 = np.polyfit(ADBE['Date'], ADBE['Close'], 1)

poly_ols2 = np.poly1d(ols2)

我得到错误:

数据类型不精确

...适用于OLS2系列。所以无论我走哪条路(绘制回归,或者首先通过polyfit进行回归)我都会收到错误

1 个答案:

答案 0 :(得分:0)

  

我收到错误消息:

     

" x和y必须具有相同的第一维"

这是因为model是一个pandas模型对象:

type(model)
pandas.stats.ols.OLS

matplotlib并不知道如何处理此对象的方式。如果您想根据模型的拟合值(例如)绘制数据,则应使用:model.y_fitted.values。以下是一个工作示例

from sklearn import datasets # toy dataset for this example
import matplotlib.pyplot as plt
%matplotlib inline  # using jupyter notebook

iris = datasets.load_iris()
iris = pd.DataFrame(iris.data, columns=iris.feature_names)

# note that pd.ols is deprecated and you should use 
# statsmodel or scikit learn for regression
model = pd.ols(y = iris['sepal length (cm)'], x = iris['sepal width (cm)'])

plt.scatter(y = model.y_fitted.values, x = iris['sepal length (cm)'])
plt.xlabel("sepal length (cm)")
plt.ylabel("OLS fitted values")
plt.show()