import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline from google.colab import drive import os drive.mount('/content/drive') # Establecer ruta de acceso en drive import os print(os.getcwd()) os.chdir("/content/drive/My Drive") print(os.getcwd()) train=pd.read_csv('train.csv',sep=',') train.head() print(train.shape) train.info() print(train.shape) train= train.drop_duplicates() print(train.shape) # Columnas con porcentaje de nulos pd.set_option('display.max_rows', None) # or 1000 serie=(train.isnull().sum()/train.shape[0])*100 serie=serie.sort_values(ascending=False) serie= serie[serie>0] serie # Graficamente import matplotlib.pyplot as plt plt.figure(figsize=(10,6)) serie.plot(kind='bar') pip install missingno import missingno as msno msno.matrix(train) msno.heatmap(train) msno.dendrogram(train) train.PoolQC.value_counts() # Decision: borrar train.MiscFeature.value_counts() # Decision: borrar train.Alley.value_counts() # Decision: borrar train.Fence.value_counts() # Decision: borrar train.FireplaceQu.value_counts() # Decision: Con este se podria hacer otra tecnica en vez de borrar la columna train.LotFrontage.isnull().sum() # Decision: Reemplazar con alguna tecnica de interpolacion train.GarageFinish.value_counts() # Decision: Alguna tecnica de reemplazo train.GarageQual.value_counts() # Decision: Alguna tecnica de reemplazo train.GarageCond.value_counts() # Decision: Reemplazar con alguna tecnica train.GarageType.value_counts() # Decision: Reemplazar con alguna tecnica train.BsmtExposure.value_counts() # Decision: Tecnica reemplazro train.GarageYrBlt.isnull().sum() # Decision: Reemplazar con alguna tecnica de interpolacion train.BsmtFinType2.value_counts() # Decision: Tecnica reemplazro train.BsmtFinType1.value_counts() # Decision: Tecnica reemplazro train.BsmtCond.value_counts()# Decision: reemplzar moda train.BsmtQual.value_counts()# Decision: reemplzar moda train.MasVnrArea.isnull().sum() train.MasVnrType.value_counts() train.Electrical.value_counts() train.shape col_del=['PoolQC','MiscFeature','Alley','Fence','Id'] # Columnas a borrar que no aportan col_inter= ['LotFrontage','GarageYrBlt','MasVnrArea'] # Columnas a interpolar col_cat= ['FireplaceQu','GarageFinish','GarageCond','GarageType','BsmtExposure','BsmtFinType2','BsmtFinType1','BsmtCond', 'BsmtQual','MasVnrType','Electrical'] # Columnas cateogoricas # Borrar variables train_x=train.drop(labels=col_del, axis=1) # Borrando las columnas en col_del train_x.columns # Verificando las columnas que quedaron for i in col_inter: # reemplazar por la mediana en las columnas numericas en col_inter train_x[i] = train_x[i].fillna(train_x[i].median()) train_x.MasVnrArea.isnull().sum() # Verificar que funciono for i in col_cat: # Reemplazar los vacios por Desconocido train_x[i] = train_x[i].fillna('Desconocido') train_x.Electrical.isnull().sum() # Verificando que funciona train_x.SaleCondition.dtype train_x.SaleCondition.value_counts() alldata=[] # lista para guardar resultados de One hot Encoding alldata1=[] # lista para guardar resultados de variables=[] # ir guardando las variables for i in train_x.columns: # iterar sobre todas las columnas if train_x[i].dtype == 'O': # Quedarme con las que sean tipo object if len(train_x[i].unique()) ==2: # Si solo tienen dos categorias aplicar One Hot Encoding print('Variable 2 categorias:',i) y= pd.get_dummies(train_x[i]) # Aplicar One Hot Encoding alldata.append(y) # ir agregando las columnas resultantes en alldata variables.append(i) else: pass print('--------------------') if len(train_x[i].unique()) >2: # Si las categorias tienen mas de 2 categorias aplicar LabelEncoder print('Variable >2 categorias:',i) z= pd.DataFrame() z[i]=train_x[i].astype('category').cat.codes # Aplicar Label Encoder alldata1.append(z) # Agregar a la lista alldata1 variables.append(i) # if train_x[i].dtype == 'float64': # Si la columna es numerica entonces normalizar z score train_x[i]=(train_x[i]-train_x[i].mean())/(train_x[i].std()) # yapo data_y=pd.concat(alldata, axis=1) # concatenar las columnas obtenidas One hot Encoding data_z=pd.concat(alldata1, axis=1) # concatenar las columnas de Label Encoder train_y= pd.concat([data_y,data_z,train_x],axis=1) # Unir todos los datasets One Hot Encoding, LabelEncoder, Z score train_y=train_y.drop(labels=variables, axis=1) # Borrar las columnas ya recodificadas train_y.head() # mostrar que quedo train_y.info()