列表大小增加了一倍

时间:2018-09-08 11:46:11

标签: python list statsmodels

我试图将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])

0 个答案:

没有答案