Santiago de Cali es una de las principales ciudades de Colombia a nivel económico, poblacional y de desarrollo, además recibe personas de distintos sectores del país, principalmente del suroccidente colombiano, y del extranjero que decide asentarse en este lugar. Lo anterior, sumado a otros factores socio económicos, han permitido que el mercado inmobiliario en la ciudad se mantenga en crecimiento, trayendo grandes oportunidades para los actores principales de este negocio.
En este informe, nos centraremos en la información recopilada por la agencia de bienes raíces B&C (Bienes y Casas) que lleva más de 10 años de operación en la capital vallecaucana. El objetivo, es encontrar patrones y tendencias que permitan tomar decisiones frente a su nicho de mercado, desarrollar estrategias de marketing, establecer precios de venta y ofrecer servicios personalizados a sus clientes; para esto, se cuenta con una base de datos que contiene 12 características e identificación de 8.330 viviendas en la ciudad.
Durante este documento, se analizarán datos numéricos, categóricos y visualizaciones que permitirán entender el comportamiento del precio de las viviendas, cómo se distribuyen en diferentes áreas de la ciudad y qué factores pueden influir en sus variaciones. Además, se evaluarán posibles relaciones con variables socioeconómicas y características geográficas que podrían impactar en el mercado inmobiliario local.
El conjunto de variables contiene 8.330 filas (viviendas) y 13 columnas:
wd="C:/Users/vihuc/OneDrive - correounivalle.edu.co/Escritorio/CLASES MAESTRIA/PRIMER SEMESTRE/SIMULACION Y METODOS/ACTIVIDAD1/" # Establecer el directorio de trabajo
setwd(wd) # Establecer el directorio de trabajo
#install.packages("easypackages") # Libreria especial para hacer carga autom?tica de librerias
library(easypackages)
library(readxl)
Data <- read_excel("viviendas_faltantes.xlsx")
str(Data)
## tibble [8,330 × 13] (S3: tbl_df/tbl/data.frame)
## $ id : chr [1:8330] "8312" "8311" "8307" "8296" ...
## $ zona : chr [1:8330] "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
## $ piso : num [1:8330] 4 1 NA 2 NA NA 2 NA NA 2 ...
## $ estrato : num [1:8330] 6 6 5 3 5 5 6 5 5 5 ...
## $ preciom : num [1:8330] 1300 480 1200 220 330 1350 305 480 275 285 ...
## $ areaconst: num [1:8330] 318 300 800 150 112 390 125 280 74 120 ...
## $ parquea : num [1:8330] 2 1 4 1 2 8 2 4 1 2 ...
## $ banios : num [1:8330] 4 4 7 2 4 10 3 4 2 4 ...
## $ habitac : num [1:8330] 2 4 5 4 3 10 3 4 3 3 ...
## $ tipo : chr [1:8330] "Apartamento" "Casa" "Casa" "Casa" ...
## $ barrio : chr [1:8330] "arboleda" "normandÃa" "miraflores" "el guabal" ...
## $ longitud : num [1:8330] -76576 -76571 -76568 -76565 -76565 ...
## $ latitud : num [1:8330] 3454 3454 3455 3417 3408 ...
Inicialmente se evalúan si hay viviendas con número de identificación iguales, obteniendo como resultado que no se tienen números de id duplicados. Por otro lado, se excluyen del análisis las variables latitud y longitud, ya que no se consideran relevantes para el mismo.
length(unique(Data$id)) == nrow(Data) ## Revisamos si hay ID duplicadas. No hay ID duplicados
## [1] FALSE
Data = Data[,c(-1,-12,-13)] ## Se extrae las columnas ID y latitud y longitud ya que no es necesaria para el an?lisis
# función que permite evaluar e identificar los datos faltantes por variable e individuo
miss<-function(Data,plot=T){
n=nrow(Data);p=ncol(Data)
names.obs<-rownames(Data)
nobs.comp=sum(complete.cases(Data)) # Cuenta los registros completos
Obs.comp=which(complete.cases(Data)) # Identifica los registros completos
nobs.miss = sum(!complete.cases(Data)) # Identifica los registros con datos faltantes.
Obs.miss=which(!complete.cases(Data)) # Identifica los registros con datos faltantes.
Data.NA<-is.na(Data)
Var_Num<- sort(colSums(Data.NA),decreasing=T)
Var_per<-round(Var_Num/n,3)
Obs_Num<-rowSums(Data.NA)
names(Obs_Num)<-names.obs
Obs_Num<-sort(Obs_Num,decreasing=T)
Obs_per<-round(Obs_Num/p,3)
lista<-list(n.row = n, n.col = p,n.comp = nobs.comp,Obs.comp = Obs.comp,n.miss = nobs.miss,Obs.miss = Obs.miss, Var.n = Var_Num , Var.p = Var_per, Obs.n= Obs_Num, Obs.per= Obs_per)
if(plot){
coord<-barplot(Var_per,plot=F)
barplot(Var_per,xaxt="n",horiz=T,yaxt="n",xlim=c(-0.2,1), ylim=c(0,max(coord)+1),main= "% datos faltantes por variable")
axis(2,at=coord,labels=names(Var_per), cex.axis=0.5,pos=0,las=2)
axis(1,seq(0,1,0.2),seq(0,1,0.2),pos=0)
}
return(invisible(lista))
}
Summary.NA = miss(Data,T)
Se puede apreciar que las variable piso contiene más de un 30% de datos faltantes y parquea (número de parqueaderos) un 30%. En el primer caso, es un porcentaje considerable de ausencia de datos y aunque se pueden plantear distintos métodos para imputar estos datos, no se considera necesario y a simple vista no tiene una razón bajo la lógica de negocio que permita inferir sobre el motivo de esta ausencia o el valor que debería tomar.
Para la variable número de parqueaderos, en total son 1.606 datos faltantes, los cuales podrían ser imputados por el valor de cero debido a que el mínimo que toma esta variable es 1, por lo tanto, se puede inferir que en los casos en que no hay dato, corresponden a las viviendas no tienen parqueaderos.
El 56% de las viviendas se encuentran ubicadas en la zona sur de Cali, mientras que, al otro extremo de la ciudad, la zona norte, encontramos el 23% de las propiedades en venta, así mismo, las zonas centro y oriente sólo acumulan el 5.7% de las viviendas contenidas en el estudio. Por otro lado, el 50% de las viviendas analizadas están ubicadas hasta en un tercer piso y cómo máximo, tenemos viviendas en piso 12. Se observa además que la base de datos contiene viviendas pertenecientes a los estratos 3,4,5 y 6 y el promedio del precio por metro cuadrado es de $434.
El área construida mínima es de 30 metros cuadrados y el 75% de las viviendas tienen hasta 229 metros. Por otra parte, el 50% de las viviendas tienen 3 baños o menos, mientras que la mayoría tiene 3 habitaciones. Por último, el 61% de las viviendas son de tipo apartamento y el 39% restantes son casas; cabe resaltar que en esta última variable fue necesario hacer una homologación de nombres, ya que apartamentos y casas estaban escritas de formas diferentes.
#install.packages("dplyr")
library(tidyverse)
summarytools::descr(Data)
## Descriptive Statistics
## Data
## N: 8330
##
## areaconst banios estrato habitac parquea piso preciom
## ----------------- ----------- --------- --------- --------- --------- --------- ---------
## Mean 174.99 3.11 4.63 3.61 1.84 3.77 434.24
## Std.Dev 142.95 1.43 1.03 1.46 1.13 2.62 329.02
## Min 30.00 0.00 3.00 0.00 1.00 1.00 58.00
## Q1 80.00 2.00 4.00 3.00 1.00 2.00 220.00
## Median 123.00 3.00 5.00 3.00 2.00 3.00 330.00
## Q3 229.00 4.00 5.00 4.00 2.00 5.00 540.00
## Max 1745.00 10.00 6.00 10.00 10.00 12.00 1999.00
## MAD 84.51 1.48 1.48 1.48 1.48 1.48 209.05
## IQR 149.00 2.00 1.00 1.00 1.00 3.00 320.00
## CV 0.82 0.46 0.22 0.40 0.61 0.69 0.76
## Skewness 2.69 0.92 -0.18 1.64 2.32 1.28 1.85
## SE.Skewness 0.03 0.03 0.03 0.03 0.03 0.03 0.03
## Kurtosis 12.90 1.12 -1.11 3.99 8.29 1.05 3.66
## N.Valid 8327.00 8327.00 8327.00 8327.00 6724.00 5689.00 8328.00
## Pct.Valid 99.96 99.96 99.96 99.96 80.72 68.30 99.98
table(Data$zona) %>% # se introduce el operador %>%
prop.table()*100
##
## NA Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## 0.03601441 1.48859544 23.07322929 14.45378151 4.21368547 56.73469388
table(Data$estrato) %>% # se introduce el operador %>%
prop.table()*100
##
## 3 4 5 6
## 17.44926 25.59145 33.03711 23.92218
Data$tipo[Data$tipo == "APARTAMENTO"] <- "Apartamento"
Data$tipo[Data$tipo == "apto"] <- "Apartamento"
Data$tipo[Data$tipo == "casa"] <- "Casa"
Data$tipo[Data$tipo == "CASA"] <- "Casa"
table(Data$tipo) %>% # se introduce el operador %>%
prop.table()*100
##
## Apartamento Casa
## 61.3186 38.6814
En promedio, los apartamentos tienen 3 habitaciones y 3 baños mientras que las casas, que a su vez tienen más metros cuadrados construidos, cuentan con 5 habitaciones y 4 baños en promedio.
## Tipo habitaciones
## 1 Apartamento 3
## 2 Casa 5
## Tipo baños
## 1 Apartamento 3
## 2 Casa 4
El 84% de las viviendas ubicadas en el centro de la ciudad son de estrato 3; en la zona norte el 61% de hogares son de estrato 4 y 5, mientras que en la zona oeste el 64% son de estrato 6. El 97% de las viviendas de la zona oriente son de estrato 3 y la zona sur está comprendida mayormente por estratos 4, 5 y 6. En conclusión, la zona sur y oeste están caracterizadas por tener viviendas de estratos socioeconómicos altos, mientras que en la zona oriente y centro encontramos mayoría de hogares estrato 3.
## Zona vs estrato
table(Data$zona, Data$estrato) %>%
prop.table(margin = 1)*100
##
## 3 4 5 6
## NA
## Zona Centro 84.6774194 11.2903226 3.2258065 0.8064516
## Zona Norte 29.7606660 21.2278876 40.0624350 8.9490114
## Zona Oeste 4.4850498 7.0598007 24.0863787 64.3687708
## Zona Oriente 96.8660969 2.2792023 0.5698006 0.2849003
## Zona Sur 8.0829454 34.1938214 35.6538299 22.0694033
Se evidencia que la zona norte, sur y oeste están comprendidas mayormente por apartamentos, mientras que la zona centro y oriente son caracterizadas por presencia de casas. Cabe resaltar que anteriormente se concluyó que la zona centro y oriente tienen viviendas de estrato 3, por lo tanto, se puede concluir que los estratos medios tienen mayor presencia de casas y los estratos altos están contenidos mayormente por apartamentos.
#table(Data$zona, Data$tipo) %>%
# prop.table(margin = 1)*100
x <- Data[c("tipo","zona")]
x <-na.omit(x)
conteo <- table(x$tipo,x$zona)
View(x)
barplot(conteo, main="Número de viviendas por zona y tipo",
ylab="Número de viviendas",
col=c("#0d3b66","#f4d35e"),
legend = rownames(conteo),
las=2,
names.arg=c("Centro","Norte","Oeste","Oriente","Sur"),
args.legend = list(x = "top"))
Las viviendas ubicadas en la zona centro y son de estrato 3 tienen un precio promedio de $290 por metro cuadrado, en la zona oriente y estrato 3 el precio es de $224 por metro cuadrado. Ya en las zonas donde predominan los estratos más altos, se evidencia que el precio incrementa notoriamente, incluso duplicando los datos anteriores; así las cosas, los inmuebles ubicados en el norte de la ciudad y de estrato 4 tienen un precio promedio de $304 por metro cuadrado, las viviendas ubicadas en la zona sur y estrato 5 tienen precio promedio de $385 y en la zona oeste, los hogares estrato 6 cuestan en promedio $801.
Es evidente que en la zona centro y oriente el área es mayor a las zonas sur y norte en todos los estratos, lo que está correlacionado con el tipo de vivienda, ya que al ser casas en su mayoría tienen un área mayor. En la zona oeste se encuentran las viviendas con el área promedio mayor en toda la ciudad, así mismo el precio promedio es mayor.
t2 = aggregate(Data$preciom, by=list(Data$zona,Data$estrato), FUN=mean)
colnames(t2)=c("Zona", "Estrato","Precio promedio")
t2
## Zona Estrato Precio promedio
## 1 Zona Centro 3 290.9048
## 2 Zona Norte 3 170.8094
## 3 Zona Oeste 3 303.5926
## 4 Zona Oriente 3 224.0029
## 5 Zona Sur 3 221.9817
## 6 Zona Centro 4 382.2857
## 7 Zona Norte 4 304.2083
## 8 Zona Oeste 4 302.3412
## 9 Zona Oriente 4 306.2500
## 10 Zona Sur 4 265.3459
## 11 Zona Centro 5 376.2500
## 12 Zona Norte 5 418.7013
## 13 Zona Oeste 5 531.8655
## 14 Zona Oriente 5 126.5000
## 15 Zona Sur 5 385.8700
## 16 Zona Centro 6 1000.0000
## 17 Zona Norte 6 699.5814
## 18 Zona Oeste 6 801.0348
## 19 Zona Oriente 6 1350.0000
## 20 Zona Sur 6 816.8159
t2 = aggregate(Data$areaconst, by=list(Data$zona,Data$estrato), FUN=mean)
colnames(t2)=c("Zona", "Estrato","Area promedio")
t2
## Zona Estrato Area promedio
## 1 Zona Centro 3 191.9549
## 2 Zona Norte 3 104.0557
## 3 Zona Oeste 3 144.7261
## 4 Zona Oriente 3 192.7443
## 5 Zona Sur 3 138.3230
## 6 Zona Centro 4 217.0000
## 7 Zona Norte 4 155.2781
## 8 Zona Oeste 4 142.2635
## 9 Zona Oriente 4 194.1250
## 10 Zona Sur 4 123.5308
## 11 Zona Centro 5 117.0000
## 12 Zona Norte 5 187.1874
## 13 Zona Oeste 5 189.3494
## 14 Zona Oriente 5 105.0000
## 15 Zona Sur 5 164.4028
## 16 Zona Centro 6 400.0000
## 17 Zona Norte 6 249.1978
## 18 Zona Oeste 6 208.7617
## 19 Zona Oriente 6 212.0000
## 20 Zona Sur 6 277.6507
La zona centro y oriente tienen el mayor número de habitaciones por vivienda, lo que tiene relación con el tipo de vivienda, ya que estas zonas están caracterizadas por ser en su mayoría casas; no obstante, las viviendas de la zona oeste tienen más baños y en su mayoría 2 parqueaderos. En la zona centro predominan las viviendas sin parqueaderos o un solo parqueadero, al igual que la zona oriente, mientras que, en la zona norte y sur el 75% de las viviendas tienen hasta 2 parqueaderos.
par(mfrow=c(2,2))
boxplot(Data$habitac~Data$zona,
main = "Distribución habitaciones por zona",
ylab="habitaciones",
xlab = "Zona", las=2,
col=c("burlywood1","#ee964b", "cadetblue1", "pink", "darkolivegreen1"),
names = c("Centro","Norte","Oeste", "Oriente", "Sur"))
boxplot(Data$banios~Data$zona,
main = "Distribución baños por zona",
ylab="baños",
xlab = "Zona", las=2,
col=c("burlywood1","#ee964b", "cadetblue1", "pink", "darkolivegreen1"),
names = c("Centro","Norte","Oeste", "Oriente", "Sur"))
boxplot(Data$parquea ~ Data$zona,
main = "Distribución parqueaderos por zona",
ylab="parqueaderos",
xlab = "Zona", las=2,
col=c("burlywood1","#ee964b", "cadetblue1", "pink", "darkolivegreen1"),
names = c("Centro","Norte","Oeste", "Oriente", "Sur"))
Se logra determinar que en la zona centro y oriente, a mayor precio se tiene mayor área construida, sin embargo, en la zona oeste no necesariamente ocurre este fenómeno, ya que se aprecian muchas viviendas que tienen costos altos pero el área construida está entre valores bajos. En la zona sur y norte encontramos mayor concentración de viviendas en precios bajos y áreas pequeñas, sin embargo, hay algunos inmuebles con precios altos y metros cuadrados inferiores.
# Correlaciones
library(readr)
library(ggplot2)
ggplot(Data, aes(y=preciom , x=areaconst))+
geom_point()+
facet_wrap(~ zona) # separacion por zona
Existe correlación lineal positiva significativa entre el precio por metro cuadrado y el área construida, es decir, a mayor número de metros construidos, mayor es el precio por metro cuadrado. El precio también se ve influenciado por el número de baños y el número de parqueaderos, de tal modo que, a mayor número de baños y parqueaderos, es mayor el precio. El estrato también es un factor importante en la definición del precio de la vivienda, a medida que aumenta el estrato, aumenta el precio por metro cuadrado.
Por otro lado, se evidencia que la relación entre el número de baños y habitaciones es de 0.6, al igual que el número de parqueaderos y número de baños, con esto se aprecia que una vivienda que tenga varios baños y varias habitaciones probablemente tendrá al menos un parqueadero.
La base de datos está compuesta por 8330 viviendas, que en su mayoría (56%) se encuentran ubicadas en la zona sur de la ciudad de Cali, el 23% en el norte y el 61% corresponden a apartamentos. En la zona sur el precio promedio por metro cuadrado de los inmuebles oscila entre los $104 hasta los $244 de acuerdo con el estrato socio económico en el que se encuentre, no obstante, los apartamentos de esta área en están compuestos por 3 habitaciones, 3 baños y un parqueadero. En la zona norte los precios promedio por metro cuadrado varían entre los $138 y $277 y las viviendas se componen por 3 habitaciones, dos baños y un parqueadero. El precio en estas zonas está por debajo del precio promedio general y pueden ser ideales para familias de máximo 4 integrantes.
Para familias con mayor poder adquisitivo, es viable ofertar viviendas en el oeste de la ciudad, ya que es un sector caracterizado principalmente por ser estrato 6 y tienen un costo promedio por metro cuadrado de $801, casi el doble del promedio general. Estos predios son en su mayoría apartamentos y cuentan con 3 habitaciones, 4 baños y 2 parqueaderos.
En la zona centro y oriente hay mayor oferta de casas de estrato 3, con un área construida promedio de 192 y 193 metros respectivamente, el precio tiene una media de $290 y $224, sin embargo, es más difícil conseguir viviendas con parqueadero. Estos predios cuentan con hasta 6 habitaciones y 4 baños y pueden ser apropiadas para familias con numerosos integrantes y cuyo presupuesto sea limitado.
Finalmente, se pudo establecer que el precio de las viviendas en Cali depende del estrato y la zona donde esté ubicado, el área construida y el número de parqueaderos y de baños.