Una empresa inmobiliaria líder en una gran ciudad está buscando comprender en profundidad el mercado de viviendas urbanas para tomar decisiones estratégicas más informadas. La empresa posee una base de datos extensa que contiene información detallada sobre diversas propiedades residenciales disponibles en el mercado. Se requiere realizar un análisis holístico de estos datos para identificar patrones, relaciones y segmentaciones relevantes que permitan mejorar la toma de decisiones en cuanto a la compra, venta y valoración de propiedades.
## Warning in data(vivenda): data set 'vivenda' not found
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 8322 obs. of 13 variables:
## $ id : num 1147 1169 1350 5992 1212 ...
## $ zona : chr "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
## $ piso : chr NA NA NA "02" ...
## $ estrato : num 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num 70 120 220 280 90 87 52 137 150 380 ...
## $ parqueaderos: num 1 1 2 3 1 1 2 2 2 2 ...
## $ banios : num 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num 6 3 4 3 3 3 3 4 6 3 ...
## $ tipo : chr "Casa" "Casa" "Casa" "Casa" ...
## $ barrio : chr "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
## $ longitud : num -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num 3.43 3.43 3.44 3.44 3.46 ...
## - attr(*, "spec")=List of 3
## ..$ cols :List of 13
## .. ..$ id : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ zona : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ piso : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ estrato : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ preciom : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ areaconst : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ parqueaderos: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ banios : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ habitaciones: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ tipo : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ barrio : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ longitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ latitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
## ..$ delim : chr ";"
## ..- attr(*, "class")= chr "col_spec"
## - attr(*, "problems")=<externalptr>
A través de Histogramas vamos a realizar reconocimiento de las variables para entender de qué e componen a nivel general
boxplot(x = vivienda$areaconst,
main = "Histograma de área construída",
col = "yellow") # Area Construidaboxplot(x = vivienda$habitaciones,
main = "Histograma de Número de Habitaciones",
col = "green") # habitacionesLa tabla cuenta con información de 8,322 viviendas medidas en 12 variables: zona, piso, estrato, preciom, areaconst, parqueaderos, baños, habitaciones, tipo, barrio, longitud y latitud.
Realizamos una revisión de el contenido de estas variables
## id zona piso estrato
## Min. : 1 Length:8322 Length:8322 Min. :3.000
## 1st Qu.:2080 Class :character Class :character 1st Qu.:4.000
## Median :4160 Mode :character Mode :character Median :5.000
## Mean :4160 Mean :4.634
## 3rd Qu.:6240 3rd Qu.:5.000
## Max. :8319 Max. :6.000
## NA's :3 NA's :3
## preciom areaconst parqueaderos banios
## Min. : 58.0 Min. : 30.0 Min. : 1.000 Min. : 0.000
## 1st Qu.: 220.0 1st Qu.: 80.0 1st Qu.: 1.000 1st Qu.: 2.000
## Median : 330.0 Median : 123.0 Median : 2.000 Median : 3.000
## Mean : 433.9 Mean : 174.9 Mean : 1.835 Mean : 3.111
## 3rd Qu.: 540.0 3rd Qu.: 229.0 3rd Qu.: 2.000 3rd Qu.: 4.000
## Max. :1999.0 Max. :1745.0 Max. :10.000 Max. :10.000
## NA's :2 NA's :3 NA's :1605 NA's :3
## habitaciones tipo barrio longitud
## Min. : 0.000 Length:8322 Length:8322 Min. :-76.59
## 1st Qu.: 3.000 Class :character Class :character 1st Qu.:-76.54
## Median : 3.000 Mode :character Mode :character Median :-76.53
## Mean : 3.605 Mean :-76.53
## 3rd Qu.: 4.000 3rd Qu.:-76.52
## Max. :10.000 Max. :-76.46
## NA's :3 NA's :3
## latitud
## Min. :3.333
## 1st Qu.:3.381
## Median :3.416
## Mean :3.418
## 3rd Qu.:3.452
## Max. :3.498
## NA's :3
## [1] "character"
## [1] "character"
## [1] "numeric"
## [1] "numeric"
## [1] "numeric"
## [1] "numeric"
## [1] "numeric"
## [1] "numeric"
## [1] "character"
## [1] "character"
## [1] "numeric"
## [1] "numeric"
## [1] 3
## [1] 2638
## [1] 3
## [1] 2
## [1] 3
## [1] 1605
## [1] 3
## [1] 3
## [1] 3
## [1] 3
## [1] 3
## [1] 3
Se decide no imputar la moda o media en los valores NA ya que puede cambiar la variabilidad de la muestra lo que puede afectar los resultados del PCA.
Se inicia un tratamiento de la base de datos para realizar el modelamiento de los datos. Estos ajustes se detallan a continuación:
Se eliminan las variables que mas NA presentan que son parqueaderos y piso y adicional 3 variables que inicialmente no se espera que aporten al análisis final.
borrar <- c("piso","parqueaderos","barrio", "longitud", "latitud")
vivienda1 <- vivienda1[ ,!(names(vivienda1) %in% borrar)]
head(vivienda1,10)Se eliminan las filas que tienen datos faltantes
vivienda1 <- vivienda1[complete.cases(vivienda1),]
sum(is.na(vivienda1)) # Conteo de valores faltantes## [1] 0
Se cambia el nombre de las filas por el ID de los casos y se quita la variable ID de el data frame
Se transforman las variables categóricas en numéricas patra incluirlas en el modelo
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
vivienda1 <- vivienda1 %>% mutate(zona = replace(zona,
zona == "Zona Centro", 1))
vivienda1 <- vivienda1 %>% mutate(zona = replace(zona,
zona == "Zona Norte", 2))
vivienda1 <- vivienda1 %>% mutate(zona = replace(zona,
zona == "Zona Oeste", 3))
vivienda1 <- vivienda1 %>% mutate(zona = replace(zona,
zona == "Zona Oriente",
4))
vivienda1 <- vivienda1 %>% mutate(zona = replace(zona,
zona == "Zona Sur", 5))
vivienda1$zona <- as.numeric(vivienda1$zona)
vivienda1 <- vivienda1 %>% mutate(tipo = replace(tipo,
tipo == "Casa", 1))
vivienda1 <- vivienda1 %>% mutate(tipo = replace(tipo,
tipo == "Apartamento", 2))
vivienda1$tipo <- as.numeric(vivienda1$tipo)
head(vivienda1,10)##Reducir la dimensionalidad del conjunto de datos y visualizar la estructura de las variables en componentes principales para identificar características clave que influyen en la variación de precios y preferencias del mercado.