[PYTHON] Kaggle House Preise ~ ~ Feature Engineering ~

Der folgende Kaggle-Wettbewerb bietet Quantity Engineering. House Prices: Advanced Regression Techniques

Ich beziehe mich auf Folgendes. Versuchen Sie, die Hauspreise von kaggle zu lösen [kaggle: Hauspreis-Tutorial (Hauspreisprognose)](https://data-bunseki.com/2019/08/15/kaggle%EF%BC%9Ahouse-price-%E3%83%81%E3%83 % A5% E3% 83% BC% E3% 83% 88% E3% 83% AA% E3% 82% A2% E3% 83% AB% E4% BD% 8F% E5% AE% 85% E4% BE% A1 % E6% A0% BC% E3% 81% AE% E4% BA% 88% E6% B8% AC /)

Bibliothek laden

import numpy as np
import pandas as pd
from sklearn.externals import joblib

Daten lesen

train = pd.read_csv('train.csv')
test_x = pd.read_csv('test.csv')

Ausreißer ausschließen

#Erstellen Sie eine Variable, die die Größe der Eigenschaft ergibt
train["TotalSF"] = train["1stFlrSF"] + train["2ndFlrSF"] + train["TotalBsmtSF"]
test_x["TotalSF"] = test_x["1stFlrSF"] + test_x["2ndFlrSF"] + test_x["TotalBsmtSF"]
#Ausreißer ausschließen
train = train.drop(train[(train['TotalSF']>7500) & (train['SalePrice']<300000)].index)
train = train.drop(train[(train['YearBuilt']<2000) & (train['SalePrice']>600000)].index)
train = train.drop(train[(train['OverallQual']<5) & (train['SalePrice']>200000)].index)
train = train.drop(train[(train['OverallQual']<10) & (train['SalePrice']>500000)].index)

Teilen Sie die Trainingsdaten in objektive Variablen und andere

train_x = train.drop('SalePrice',axis=1)
train_y = train["SalePrice"]

Integrieren Sie Trainingsdaten und Testdaten

all_data = pd.concat([train_x,test_x],axis=0,sort=True)

Die ID-Spalte ist nicht erforderlich. Speichern Sie sie daher in einer anderen Variablen

train_ID = train_x['Id']
test_ID = test_x['Id']

all_data.drop("Id", axis = 1, inplace = True)

Fehlende Wertkorrespondenz

#Listen Sie Spalten mit fehlenden Werten auf
na_col_list = all_data.isnull().sum()[all_data.isnull().sum()>0].index.tolist()

#Ergänzung fehlender Werte für die angrenzende Straßenlänge (LotFrontage)
all_data['LotFrontage'] = all_data.groupby('Neighborhood')['LotFrontage'].transform(lambda x: x.fillna(x.median()))

#Erstellen Sie eine Float-Typ-Liste mit fehlenden Werten
float_list = all_data[na_col_list].dtypes[all_data[na_col_list].dtypes == "float64"].index.tolist()

#Erstellen Sie eine Liste der fehlenden Werte und des Typs Objekt
obj_list = all_data[na_col_list].dtypes[all_data[na_col_list].dtypes == "object"].index.tolist()

#Ersetzen Sie beim Float-Typ den fehlenden Wert durch 0
all_data[float_list] = all_data[float_list].fillna(0)

#Fehlender Wert für Objekttyp"None"Ersetzen mit
all_data[obj_list] = all_data[obj_list].fillna("None")

Konvertieren Sie numerische Variablen in kategoriale Variablen

all_data['MSSubClass'] = all_data['MSSubClass'].apply(str)
all_data['YrSold'] = all_data['YrSold'].astype(str)
all_data['MoSold'] = all_data['MoSold'].astype(str)

Hinzufügung neuer Funktionen

#Erstellen Sie eine Variable, die die Größe der Eigenschaft ergibt
all_data["TotalSF"] = all_data["1stFlrSF"] + all_data["2ndFlrSF"] + all_data["TotalBsmtSF"]

#Fläche pro Raum hinzugefügt, um die Menge zu kennzeichnen
all_data["FeetPerRoom"] =  all_data["TotalSF"]/all_data["TotRmsAbvGrd"]

#Insgesamt das Baujahr und das Jahr des Umbaus
all_data['YearBuiltAndRemod']=all_data['YearBuilt']+all_data['YearRemodAdd']

#Gesamtfläche des Badezimmers
all_data['Total_Bathrooms'] = (all_data['FullBath'] + (0.5 * all_data['HalfBath']) +
                               all_data['BsmtFullBath'] + (0.5 * all_data['BsmtHalfBath']))

#Gesamtfläche an der Randseite
all_data['Total_porch_sf'] = (all_data['OpenPorchSF'] + all_data['3SsnPorch'] +
                              all_data['EnclosedPorch'] + all_data['ScreenPorch'] +
                              all_data['WoodDeckSF'])

#Vorhandensein oder Nichtvorhandensein eines Pools
all_data['haspool'] = all_data['PoolArea'].apply(lambda x: 1 if x > 0 else 0)

#Vorhandensein oder Nichtvorhandensein des zweiten Stocks
all_data['has2ndfloor'] = all_data['2ndFlrSF'].apply(lambda x: 1 if x > 0 else 0)

#Mit oder ohne Garage
all_data['hasgarage'] = all_data['GarageArea'].apply(lambda x: 1 if x > 0 else 0)

#Vorhandensein oder Nichtvorhandensein von Keller
all_data['hasbsmt'] = all_data['TotalBsmtSF'].apply(lambda x: 1 if x > 0 else 0)

#Mit oder ohne Kamin
all_data['hasfireplace'] = all_data['Fireplaces'].apply(lambda x: 1 if x > 0 else 0)

Führen Sie eine One-Hot-Codierung für kategoriale Variablen durch

#Extrahieren Sie Spalten, die kategoriale Variablen sind
cal_list = all_data.dtypes[all_data.dtypes=="object"].index.tolist()

#Holen Sie sich kategoriale Variablen_eine von Dummies-hot-Kodieren
all_data = pd.get_dummies(all_data,columns=cal_list)

Unterteilt in Trainingsdaten und Testdaten

train_x = all_data.iloc[:train_x.shape[0],:].reset_index(drop=True)
test_x = all_data.iloc[train_x.shape[0]:,:].reset_index(drop=True)

Funktionen speichern

joblib.dump(train_x, 'train_x.pkl')
joblib.dump(test_x, 'test_x.pkl')
joblib.dump(train_y, 'train_y.pkl')

Recommended Posts

Kaggle House Preise ~ ~ Feature Engineering ~
Herausforderung Kaggle [Hauspreise]
Kaggle House Preise ③ ~ Prognose / Einreichung ~
Herausforderung Kaggle [Hauspreise]
Kaggle House Preise ③ ~ Prognose / Einreichung ~
Lernen mit dem Lehrer (Rückkehr) 2 Advanced Edition
Kaggle House Preise ~ ~ Feature Engineering ~
Kaggle: Einführung in das manuelle Feature Engineering Teil 1
Hinweis "Features Engineering" von HJvanVeen
Kaggle ~ Home Preisprognose ② ~
So suchen Sie nach fehlenden Werten (Kaggle: House Prices)
[Kaggle] Versuchen Sie, Future Engineering vorherzusagen
Feature Quantity Engineering auf Reisen mit Pokemon-Kategorie-Variablen-
Feature Quantity Engineering auf Reisen mit Pokemon-Numerical Version-
Vorhersage des Kreditkartenfehlers Feature Quantity Engineering
[Kaggle] Ich habe versucht, mithilfe von tsfresh das Feature-Quantity-Engineering mehrdimensionaler Zeitreihendaten durchzuführen