2017-02-13 4 views
0

У меня есть файлы размером от 200 до 220 csv, и я хочу рассчитать значение r-square для каждого файла csv, и каждый раз открываю файл csv и вычисляю r-квадрат и снова открываю другой файл csv. Вот мой код, я использую:Есть ли способ получить динамическое значение r-квадрата или использовать цикл, если у нас так много файлов csv?

import pandas 
import scipy 
import numpy 
from sklearn.preprocessing import RobustScaler 
url = "file1.csv" 
dataframe = pandas.read_csv(url) 
dataframe 
array=dataframe.values 
X=array[:,4:5] 
Y=array[:,3:4] 
scalerx = RobustScaler() 
x_scaled = scalerx.fit_transform(X) 
x_scaled 

scalery = RobustScaler() 
y_scaled = scalery.fit_transform(Y) 
y_scaled 

a=x_scaled 
b=y_scaled 

from sklearn.linear_model import LinearRegression 
linreg=LinearRegression() 
linreg.fit(a,b) 
#LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False) 
print linreg.intercept_ 
#[ 0.30611686] 
print linreg.coef_ 
#[[-0.21568568]] 
y_pred=linreg.predict(a) 
r2=linreg.score(a,b) 
print(r2) 

это мой код сохранить в overall.py тогда я запустить эту команду в командной строке: $ питон overall.py тогда я получить значение r2 для одного CSV файлов. то снова мне нужно o использовать file2.csv, file3.csv, .... так далее, любые подсказки, как получить r-квадрат одновременно для всех файлов csv?

ответ

2

Поместите свой код в функцию и выполните функцию над несколькими файлами. Например .:

import os 

for f in os.listdir(os.curdir): 
    if f.endswith('.csv'): 
     my_function(f) 

Так что в вашем случае:

import os 
import pandas 
import scipy 
import numpy 
from sklearn.preprocessing import RobustScaler 

def my_function(url): 

    dataframe = pandas.read_csv(url) 
    dataframe 
    array=dataframe.values 
    X=array[:,4:5] 
    Y=array[:,3:4] 
    scalerx = RobustScaler() 
    x_scaled = scalerx.fit_transform(X) 
    x_scaled 

    scalery = RobustScaler() 
    y_scaled = scalery.fit_transform(Y) 
    y_scaled 

    a=x_scaled 
    b=y_scaled 

    from sklearn.linear_model import LinearRegression 
    linreg=LinearRegression() 
    linreg.fit(a,b) 
    #LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False) 
    print linreg.intercept_ 
    #[ 0.30611686] 
    print linreg.coef_ 
    #[[-0.21568568]] 
    y_pred=linreg.predict(a) 
    r2=linreg.score(a,b) 
    print(r2) 

if __name__ == "__main__": 
    for f in os.listdir(os.curdir): 
     if f.endswith('.csv'): 
      my_function(f) 
+0

там нет необходимости использовать имя файла? например file1.csv ... file220, csv? и этот код используется перед линией данных? –

+1

Ваше имя файла будет сохранено в переменной 'f', которую вы передадите в качестве аргумента функции. Если это не очевидно, я бы рекомендовал прочитать об этом немного больше: https://www.programiz.com/python-programming/function –

+0

спасибо за эту ссылку, это поможет. –