我试图将statsmodel.ols每个列的rsquared和rsquared_adj值存储在几个不同的列表中,以便以后可以创建一个新的数据框,其中包含每个列的列名称,得分和调整后的得分。我正在使用的数据是一个具有238列的数据框(我想分别测试其中的231列,即,对于每一列,单独测试该列的r2得分)。
当我将statsmodel.ols.rsquared(以及rsquared_adj和列名)存储在列表中并遍历要测试的所有列时,最终在列表中得到462个值。我只期望这个数字的一半。
我仍在学习如何使用python分析数据,因此我的代码可能效率很低,但是我将其包含在下面,因此希望有人可以解释我要去哪里。
在此先感谢任何可以帮助我理解我的代码为何这样做的人。
#import libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import os
import time
from sklearn.model_selection import train_test_split
import random
import openpyxl as op
#timing start the clock
start = time.time()
#Create empty lists
score_adj = []
score = []
col_name = []
#Assign variables
dirname = os.path.dirname(__file__)
path = dirname + "/iteration1/"
r = random.randint(1,1000)
infile, X_col, y_col = ('test_summary_with_weather_columns',
np.arange(7,238), 3)
#create df
for x in range (1,3):
filename = path + infile + str(x) + '.csv'
df = pd.read_csv(filename)
dfr = df.iloc[:,X_col]
#Assign X & y
X = df.iloc[:, X_col].values
y = df.iloc[:, y_col].values
first_X_column = X_col[0]
#import library and prepare df
import statsmodels.formula.api as sm
numRows = df.shape[0]
X = np.append(arr = np.ones((numRows, 1)).astype(int), values = X, axis
= 1)
# Split into training and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size =
0.2, random_state=r)
#Assign X_col
for xc in range (1,232):
X_train_single = X_train[:, xc]
##fit regressor
regressor_ols = sm.OLS(endog = y_train, exog = X_train_single).fit()
#Assign values to lists
score_adj.append(regressor_ols.rsquared_adj)
score.append(regressor_ols.rsquared)
col_name.append(dfr.columns[xc-1])