Я пытаюсь сохранить значения 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])