我是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
答案 0 :(得分:0)
以下内容:
myRegressionData.plot(kind='scatter',x = X_sk, y=np.mean(Y, axis=1))
x
和y
expect column names或其他内容。 X_sk
和np.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))