Стандартизируйте переменные в Python

У меня есть код ниже:

var_list = ['a', 'b', 'c', 'd', 'd', 'e', 'f', 'g', 'h', 'i']
    
y_var = 'lp'
for x_var in var_list:
    formula = y_var + ' ~ ' + x_var
    results = smf.ols(formula, data=df).fit()

Я хотел бы стандартизировать переменные в списке и перенастроить мой цикл, чтобы вместо этого использовать стандартизированные переменные.

У меня нет собственного кода. Я немного поискал и нашел следующий код https://medium.com/@rrfd/standardize-or-normalize-examples-in-python-e3f174b65dfc, который выполняет преобразование:

from sklearn import preprocessing
import numpy as np

# Get dataset
df = pd.read_csv("https://storage.googleapis.com/mledudatasets/california_housing_train.csv", sep=",")# Normalize total_bedrooms column

# Create the Scaler object
scaler = preprocessing.StandardScaler()

# Fit your data on the scaler object
scaled_df = scaler.fit_transform(df)
scaled_df = pd.DataFrame(scaled_df, columns=names)

person Parvesh    schedule 25.06.2020    source источник
comment
Какую библиотеку вы используете?   -  person Brian    schedule 25.06.2020
comment
sklearn — стандартизация выполняется с помощью StandardScaler   -  person Parvesh    schedule 25.06.2020


Ответы (1)


Что насчет этого? (предупреждение: код не проверен)

from sklearn import preprocessing
import numpy as np

# function that returns the scaled dataframe
def scale_df(df):

    # Get column names first
    names = df.columns

    # Create the Scaler object
    scaler = preprocessing.StandardScaler()

    # Fit your data on the scaler object
    scaled_df = scaler.fit_transform(df)

    return pd.DataFrame(scaled_df, columns=names)

# suppose you have two df's that need to be scalled
df_1 = pd.read_csv("https://storage.googleapis.com/mledudatasets/california_housing_train.csv", sep=",")
df_2 = pd.read_csv("https://storage.googleapis.com/mledudatasets/california_housing_train.csv", sep=",")

var_list = ['a', 'b', 'c', 'd', 'd', 'e', 'f', 'g', 'h', 'i']
results = []

# loop dataframes
for df in [df_1, df_2]:
    scaled_df = scale_df(df)
    
    # loop variables
    y_var = 'lp'
    for x_var in var_list:
        formula = y_var + ' ~ ' + x_var
        results.append(smf.ols(formula, data=scaled_df).fit())

Результаты будут добавлены в список results.

person Carlos Galdino    schedule 25.06.2020
comment
Однако я не совсем понимаю, что вы подразумеваете под стандартизацией переменных. - person Carlos Galdino; 25.06.2020
comment
Привет Карлос и спасибо за комментарий. Стандартизируйте среднее масштабируйте переменную так, чтобы среднее значение равнялось нулю, а стандартное отклонение равнялось 1; именно этого я и хочу добиться с помощью переменных в var_list. Я обнаружил, что это можно сделать с помощью предварительной обработки от sklearn. Я не уверен, как зациклить повторное масштабирование для каждой переменной в списке переменных. - person Parvesh; 25.06.2020
comment
Можете ли вы сделать это для одной переменной? Как бы выглядел код без цикла (только для одной переменной)? - person Carlos Galdino; 25.06.2020
comment
Привет снова Карлос. Добавлен пример кода с другого веб-сайта, чтобы показать, что я хочу сделать. - person Parvesh; 25.06.2020
comment
Хороший. Я посмотрю на это. - person Carlos Galdino; 25.06.2020
comment
Привет, Парчеш, я отредактировал свой ответ на основе новой информации, которую ты дал. Тем не менее, я не уверен, что понял, что вы пытаетесь сделать. - person Carlos Galdino; 26.06.2020