错误:ValueError:仅当我尝试使用statsmodels执行散点图时,必须使用布尔值传递DataFrame

时间:2017-04-11 13:23:30

标签: python statsmodels

我是Python的新手,我读过的相关问题对我来说没有多大意义。我有以下问题。我想用Python做多元回归,我正在尝试使用statsmodels。在这种情况下,我想做一个散点图。

我的数据样本:

ID  order  V1     V2    E1  E2  E3   M
103  1    ECA    TEXT    7   3   5   7
105  1    ECA    TEXT    3   7   4   5
107  1    ECA    TEXT    7   7   7   4
109  1    ECA    TEXT    6   6   6   3

我想用E1-E3作为我的IV进行多元回归,将M的平均分数作为我的DV。

这是我加载数据的方式。

myRegressionData = pd.read_csv('C:/Users/user/Desktop/Folder 1/Python/Regression data file.csv')

这些是我的x和y:

X_sk = myRegressionData[[col for col in myRegressionData.columns if col[:8] == 'E']]

Y = myRegressionData[['M{}'.format(ii) for ii in range(1, 19)]]
y = np.mean(Y, axis=1)

这是我收到错误的代码:

myRegressionData.plot(kind='scatter',x = X_sk, y=np.mean(Y, axis=1))

返回

ValueError :必须仅使用布尔值传递DataFrame

myRegressionData.info() 

返回

RangeIndex:90个条目,0到89列:146个条目,IDOpenEndedResponse到EngagingAA dtypes:float64(10),int64(134),object(2)内存使用:102.7+ KB

1 个答案:

答案 0 :(得分:0)

以下内容:

myRegressionData.plot(kind='scatter',x = X_sk, y=np.mean(Y, axis=1))

xy expect column names或其他内容。 X_sknp.mean(Y, axis=1)是数据。提供列名称或直接使用绘图仪。

我们使用matplotlib的示例:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

myRegressionData = pd.DataFrame([
    {'a0': 4, 'a1': 3, 'b0': 2, 'b1': 1}, 
    {'a0': 3, 'a1': 1, 'b0': 4, 'b1': 1}, 
    {'a0': 1, 'a1': 2, 'b0': 3, 'b1': 1}
])

X_sk = myRegressionData[[col for col in myRegressionData.columns if col[:1] == 'b']]
Y = myRegressionData[['a{}'.format(ii) for ii in range(0,2)]]
plt.scatter(X_sk['b0'], np.mean(Y, axis=1))

该示例应该是您正在做的事情的简化版本。

如果您坚持使用pandas DataFrame绘图仪,您可以执行以下操作:

y = pd.DataFrame(np.mean(Y, axis=1), columns=['y'])
df = pd.concat([X_sk, y], axis=1)
df.plot(kind='scatter', x='b0', y='y')

有许多X值,但只有一个y值,并使用颜色区分:

X_sk = myRegressionData[[col for col in myRegressionData.columns if col[:1] == 'b']]
Y = myRegressionData[['a{}'.format(ii) for ii in range(0,2)]]
y = pd.DataFrame(np.mean(Y, axis=1))
yy = pd.concat([y, y])
plt.scatter(X_sk, yy, c=['b', 'r'])

使用scatter_matrix的最终替代方案:

y = pd.DataFrame(np.mean(Y, axis=1), columns=['y'])
df = pd.concat([X_sk, y], axis=1)
scatter_matrix(df, alpha=0.2, figsize=(6, 6))