El mercado de bienes raíces en Cali ha crecido significativamente en los últimos años, impulsado por el crecimiento de la población, la inversión extranjera directa y el desarrollo de nuevos proyectos inmobiliarios. En 2021, las ventas del sector en Cali llegaron a $6700 millones y en 2022 a $6100 mil millones. Se espera que este sector continue creciendo durante los próximos años, permitiendo un desarrollo dinámico en la economía regional.
La inmobiliaria B&C(Bines y Casas) es una agencia de bienes raíces que opera en la ciudad de Cali, Colombia y ha recogido información sobre viviendas que incluye información sobre el precio, la ubicación, las características y la venta de viviendas en Cali. Se tomarán sus datos para realizar el presenta análisis.
A continuación se presentará un análisis estadistico descriptivo de la información que nos permita comprender la situación del mercado inmobiliario en Cali.
Se tomó la base de datos denominada vivienda_faltantes provista por la inmobiliaria y se realizó una identificación de variables, se realizó una limpieza de datos eliminando registros vacíos, estandarizando resultados de variables y reemplazando valores ausentes:
Para el análisis estadístico se aplicaron métodos descriptivos, inicialmente se realizó un análisis univariado. Las variables cualitativas se analizaron con tablas de frecuencias y gráficos de torta o de barras. Las variables cuantitativas se analizaron con medidas de tendencia central o de dispersión.
Se realizaron cruces de variables para identificar patrones por tipo de vivienda y zonas.
Para realizar el análisis estadístico, realizamos la limpieza de los datos, eliminando registros vacíos y realizando imputación de datos según el comportamiento de las variables para posteriormente realizar los análisis estadísticos.
La revisión de la base de datos arrojó las siguientes variables:
ruta <- "D:/Familia S Y G/Documents/DATA_SCIENCE/ESTADISTICA/vivienda_faltantes.csv"
vivienda_faltantes <- read.csv(ruta)
str(vivienda_faltantes) #Con esta función identificamos las variables del dataframe## 'data.frame': 8330 obs. of 13 variables:
## $ id : int 8312 8311 8307 8296 8297 8298 8299 8300 8286 8287 ...
## $ zona : chr "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
## $ piso : int 4 1 NA 2 NA NA 2 NA NA 2 ...
## $ estrato : int 6 6 5 3 5 5 6 5 5 5 ...
## $ preciom : int 1300 480 1200 220 330 1350 305 480 275 285 ...
## $ areaconst: num 318 300 800 150 112 390 125 280 74 120 ...
## $ parquea : int 2 1 4 1 2 8 2 4 1 2 ...
## $ banios : int 4 4 7 2 4 10 3 4 2 4 ...
## $ habitac : int 2 4 5 4 3 10 3 4 3 3 ...
## $ tipo : chr "Apartamento" "Casa" "Casa" "Casa" ...
## $ barrio : chr "arboleda" "normandía" "miraflores" "el guabal" ...
## $ longitud : num -76576 -76571 -76568 -76565 -76565 ...
## $ latitud : num 3454 3454 3455 3417 3408 ...
La base contiene 8330 registros, 13 variables tanto numéricas como cualitativas.
Variables cualitativas:
Son nominales y se encuentra la zona, el tipo y el barrio
Variables cuantitativas:
Id, piso, estrato, precio, área construída, número de baños, parqueaderos, habitaciones, longitud y latitud.
Existen tres registros sin datos, por lo tanto los eliminamos de la base suponiendo que se tratan de errores, no contienen información.
vivienda_faltantes <- vivienda_faltantes[!is.na(vivienda_faltantes$id),] #Eliminamos los faltantes en IdPara identificar variables faltantes, lo podemos ver de forma gráfica observando que se encuentran datos faltantes en las variables piso y parquea.
Se observa que 4812 datos están completos, 1912 les falta el piso, a 887 les falta solo el parqueadero y a 726 les falta tanto el piso como el parqueadero.
Adicionalmente hay datos en mayúsculas y minúsculas, para lo cual estandarizamos las variables zona y tipo en mayúsculas y también los valores de la variable tipo:
vivienda_faltantes$tipo <- toupper(vivienda_faltantes$tipo)
vivienda_faltantes$zona <- toupper(vivienda_faltantes$zona)
vivienda_faltantes$tipo<- ifelse(vivienda_faltantes$tipo=='CASA','CASA','APARTAMENTO')Para intervenir los datos faltantes de la variable piso, revisamos las estadísticas descriptivas identificando con cuál valor lo podríamos imputar:
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 2.000 3.000 3.772 5.000 12.000 2638
Observamos que el valor mínimo es 1, el máximo es 12, la mediana es 3 y la media se aproxima a 4, entonces miramos la simetria de los datos
Observamos que los datos son asimétricos a la derecha, por lo cual no utilizaremos la media sino que imputaremos los NA de la variable por la mediana teniendo en cuenta que nos indica el punto medio con 50% de datos mayores y 50% menores.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 2.000 3.000 3.528 4.000 12.000
En la tabla anterior verifico que no hay datos NA, ya fueron reemplazados.
Con relación a la variable parquea:
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 1.000 2.000 1.836 2.000 10.000 1603
El mínimo de parqueadero es 1, el máximo es 10, la media y mediana serían 2 (si aproximamos la media) y el rango es 9. Hay 1603 NA, podríamos suponer que esos NA corresponden al valor 0, pues es probable que varias viviendas no cuenten con parqueadero, ampliando los datos para ver parqueadero por tipo de vivienda, tenemos:
##
## FALSE TRUE
## APARTAMENTO 4237 869
## CASA 2487 734
La distribución de NA por casa y apartamento se observa similar, no nos permite identificar si se relaciona más por un tipo de vivienda. Para efecto práctico, podríamos suponer que al no tener una opción de respuesta en 0, podríamos imputar los datos faltantes por 0.
vivienda_faltantes$parquea[is.na(vivienda_faltantes$parquea)]<-0
summary(vivienda_faltantes$parquea)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 1.000 1.000 1.483 2.000 10.000
Ahora sí tenemos la opción de cero parqueaderos por vivienda, ahora la media y la mediana se aproximan a 1 parqueadero por vivienda.
Las variable barrio tiene diversidad de formas de escritura, algunas con tilde, sin tilde, con espacios, con adjetivos o no, por lo cual no se tomará para el presente análisis. Las variables longitud y latitud tampoco se encuentran en las escalas indicadas de longitud y latitud de la ciudad de Cali, por lo cual las omitiremos de los resultados.
Ahora verificamos que no tenemos datos faltantes:
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
Y podemos contar con 8327 registros que se encuentran completos para proceder a realizar los análisis
En relación con las zonas, podemos observar la distibución de los datos en la siguiente gráfica:
## Frequencies
## vivienda_faltantes$zona
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ------------------ ------ --------- -------------- --------- --------------
## ZONA CENTRO 124 1.49 1.49 1.49 1.49
## ZONA NORTE 1922 23.08 24.57 23.08 24.57
## ZONA OESTE 1204 14.46 39.03 14.46 39.03
## ZONA ORIENTE 351 4.22 43.24 4.22 43.24
## ZONA SUR 4726 56.76 100.00 56.76 100.00
## <NA> 0 0.00 100.00
## Total 8327 100.00 100.00 100.00 100.00
La zona con mayor cantidad de viviendas es la zona sur con una frecuencia acumulada de 57,6% (n= 4.726) de las viviendas, en segundo lugar la zona norte con 23,1% (n= 1.922). En la zona centro se encuentra la mayor proporción con 1.5% (n=124)
En relación al tipo de vivienda, se dividen en casa y apartamento así:
library(summarytools)
library(flextable)
Tipov = table(vivienda_faltantes$tipo) %>%
as.data.frame()
colnames(Tipov)= c("Tipo de vivienda", "Frecuencia absoluta")
Tipov=flextable(Tipov)
print(Tipov)## a flextable object.
## col_keys: `Tipo de vivienda`, `Frecuencia absoluta`
## header has 1 row(s)
## body has 2 row(s)
## original dataset sample:
## Tipo de vivienda Frecuencia absoluta
## 1 APARTAMENTO 5106
## 2 CASA 3221
barplot(table(vivienda_faltantes$tipo), main= "Número de casas y apartamentos", col= c("#3b83bd","#F0F8FF"))
El 61% de las viviendas corresponde a apartamentos con una frecuencia
absoluta de 5.106 .
Si deseamos ver tipo de vivienda por zona, encontramos:
conteo <- table(vivienda_faltantes$tipo, vivienda_faltantes$zona)
barplot(conteo,
main= "Tipo de vivienda por Zona",
xlab="Zona",
col=c("#3b83bd","#F0F8FF"),
legend.text= rownames(conteo),
las=1,
ylim= c(0, 6000))
Observando la gráfica anterior, encontramos que tanto en la zona Sur,
Norte y Oeste, la mayor frecuencia de viviendas corresponden a
apartamentos, en la zona centro y oriente, la mayor frecuencia es de
casas.
En la sección 3 ya identificamos los datos contenidos en las variables piso y parqueadero, ahora revisemos la variable estrato:
## Frequencies
## vivienda_faltantes$estrato
## Type: Integer
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## 3 1453 17.45 17.45 17.45 17.45
## 4 2131 25.59 43.04 25.59 43.04
## 5 2751 33.04 76.08 33.04 76.08
## 6 1992 23.92 100.00 23.92 100.00
## <NA> 0 0.00 100.00
## Total 8327 100.00 100.00 100.00 100.00
Se encuentran estratos del 3 al 6, el más frecuente es el estrato 5 con 33% de viviendas, seguido del estrato 4 con 25%. Las viviendas en menor proporción se encuentran en el estrato 3. Hay mayor disponibilidad de viviendas de estratos altos.
En relación con el área construida, tenemos:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 30 80 123 175 229 1745
la vivienda más pequeña tiene 30 metros cuadrados mientras que la más grande tiene 1745. La media es de 123 y la mediana de 175.
hist(vivienda_faltantes$areaconst,
main = "Histograma de Área Construida",
xlab = "Area",
ylab = "Frecuencia")Los datos de área construida también son asimétricos hacia la derecha y confirmamos que el promedio es mayor que la mediana. Son más frecuentes las viviendas con menor área.Para proporcionar un dato general, diríamos que el 50% de las viviendas tienen un área construída menor de 175 metros.
## Frequencies
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## 0 45 0.54 0.54 0.54 0.54
## 1 497 5.97 6.51 5.97 6.51
## 2 2946 35.38 41.89 35.38 41.89
## 3 1994 23.95 65.83 23.95 65.83
## 4 1460 17.53 83.37 17.53 83.37
## 5 891 10.70 94.07 10.70 94.07
## 6 315 3.78 97.85 3.78 97.85
## 7 107 1.28 99.14 1.28 99.14
## 8 48 0.58 99.71 0.58 99.71
## 9 15 0.18 99.89 0.18 99.89
## 10 9 0.11 100.00 0.11 100.00
## <NA> 0 0.00 100.00
## Total 8327 100.00 100.00 100.00 100.00
Pareciera un posible error que existan 45 viviendas con 0 baños, sin embargo si se trata de viviendas donde hayan baños compartidos para varios hogares, sería una posibilidad. El mayornúmero de baños por vivienda fue de 10.
ggplot(data=vivienda_faltantes, aes(x="", y=banios)) +
geom_boxplot() +
labs(x="Baños", y= "Número de Baños por vivienda") +
ggtitle("Gráfico cajas y bigotes Variable Baños")En una representación gráfica de la variable baños, observamos datos outlier que son tres valores con más de 8 baños por vivienda. El la mitad de las viviendas tienen aproximandamente entre 1 y 4 baños.
En relación con el número de habitaciones,
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 3.000 3.000 3.605 4.000 10.000
Existen viviendas sin habitaciones, serían aquellas conocidas como de un solo ambiente, en promedio, las viviendas cuentan con 3 habitaciones y 10 fue el máximo de habitaciones en una vivienda
ggplot(data=vivienda_faltantes, aes(x="", y=habitac)) +
geom_boxplot() +
labs(x="Habitaciones", y= "Número de Habitaciones por vivienda") +
ggtitle("Gráfico cajas y bigotes Variable Habitaciones")el 75% de las viviendas tienen menos de 4 habitaciones. Los valores extremos son las viviendas con menos de 2 y más de 6 habitaciones.
Algo importante a tener en cuenta es el precio de las viviendas, en términos generales, encontramos:
hist(vivienda_faltantes$preciom,
main = "Histograma de Precio",
xlab = "Precio",
ylab = "Frecuencia")## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 58.0 220.0 330.0 434.3 540.0 1999.0
## [1] 329.0335
Con el supuesto que el precio se presenta en escala de millones, la vivienda con menor valor cuesta 58 millones, la que presenta mayor valor 1.999 millones. El 25% de las viviendas cuestan menos de 220 millones y el 75% cuestan menos de 540 millones. El valor medio fue de 343 millones con una desviación estándar de 329.
La gráfica de histograma nos muestra que hay menor cantidad de viviendas con precios altos, para tener una idea del precio general, usaríamos la mediana que nos indica el 50% de las viviendas tiene un precio menor a 330 millones.
## zona
## estrato ZONA CENTRO ZONA NORTE ZONA OESTE ZONA ORIENTE ZONA SUR
## 3 105 572 54 340 382
## 4 14 408 85 8 1616
## 5 4 770 290 2 1685
## 6 1 172 775 1 1043
Conociendo la distribución de estratos en las diferentes zonas de Cali, se refleja en los datos identificando que las zonas centro y oriente incluyen mayor cantidad de viviendas estrato 3, zonas Norte y sur estrato 5, y en la zona oeste, estrato 6.
Teniendo en cuenta lo anterior, presentaremos datos por zonas.
Precio por área construída:
mediaprecio <- mean(vivienda_faltantes$preciom)
plot(vivienda_faltantes$preciom, vivienda_faltantes$areaconst, col = "gray",
pch = 16,
xlab = "Precio",
ylab = "Área Construida",
main = "Gráfica de Precio vs. Área Construida total Viviendas")casa_data <- vivienda_faltantes[vivienda_faltantes$tipo == "CASA", ]
apartamento_data <- vivienda_faltantes[vivienda_faltantes$tipo == "APARTAMENTO", ]En la gráfica de dispersión se observan precios por área construída, en general es claro que a mayor área construída, mayor precio, a menor área construída y menor precio, los datos son menos dispersos.
Si tenemos en cuenta esta gráfica y las de dispersión que se presenan más adelante clasificando por tipo de vivienda, este aumento de precio parece verse con mayor fuerza en los apartamentos donde el incremento se nota con mayor pendiente que en las casas.
Como observamos anteriormente, la mayor frecuencia de viviendas corresponde a apartamentos y se cuenta con mayor cantidad en las zonas norte y sur.
Hay apartamentos disponibles sin parqueaderos y hasta con 10 de ellos, el 50% de los apartamentos cuenta con 1 o 2 parqueaderos por vivienda, solo el 25% cuenta con 1 o ningún parqueadero y el 25% tiene más de 2 por vivienda.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 1.000 1.000 1.302 2.000 10.000
El 50% de ellos cuentan con 2 y 3 baños, en promedio son dos baños por apartamento. Existen apartamentos sin baño propio y el 25% tiene más de 3, llegando a un máximo de 8.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 2.000 2.000 2.619 3.000 8.000
el 75% de los apartamentos tiene menos de 3 habitaciones con un promedio de 3. el apartamento que más habitaciones tenía eran 9.
## Descriptive Statistics
## apartamento_data$habitac
## N: 5106
##
## habitac
## ----------------- ---------
## Mean 2.97
## Std.Dev 0.68
## Min 0.00
## Q1 3.00
## Median 3.00
## Q3 3.00
## Max 9.00
## MAD 0.00
## IQR 0.00
## CV 0.23
## Skewness 0.06
## SE.Skewness 0.03
## Kurtosis 3.82
## N.Valid 5106.00
## Pct.Valid 100.00
hist(vivienda_faltantes$habitac,
main = "Histograma de habitaciones",
xlab = "Habitaciones",
ylab = "Frecuencia")
Observando este histograma de habitaciones, observamos una gráfica
leptocúrtica confirmada por le kurtosis de 3.8. El coeficiente de
simetría es cercano a 0, por lo tanto asumimos que los datos se
distribuyen de forma normal, esto se ve reflejado en que la media y le
mediana son de 3 habitaciones.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 58.0 175.0 280.0 367.6 430.0 1950.0
el precio promedio de los apartamentos está en 367 millones, distribuídos por zonas, se encuentran en la siguiente tabla, identificando el mayor precio medio en la zona oeste, seguido de la zona sur.
plot(apartamento_data$preciom, apartamento_data$areaconst, col = "#3b83bd",
pch = 16,
xlab = "Precio",
ylab = "Área Construida",
main = "Gráfica de Precio vs. Área Construida en Apartamentos" )A medida que el apartamento tiene mayor área construída, su precio también incrementa. Se encontró un precio mínimo de 58 y máximo de 1950 millones.
Las casas on el tipo de vivienda con menos frecuencia de oferta, en su mayoría se encuentran disponibles en las zonas oriente y centro, en relación a las características de las casas tenemos:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 1.000 2.000 1.768 2.000 10.000
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 3.000 4.000 3.894 5.000 10.000
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 3.000 4.000 4.609 5.000 10.000
Igual que en los apartamentos, las casas tienen entre 0 y 10 parqueaderos, el 50% de las casas tienen entre 1 y 2.
el 50% de las casas tienen entre 1 y 2 parqueaderos, entre 3 y 5 baños y entre 3 y 5 habitaciones.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 77.0 300.0 430.0 539.9 670.0 1999.0
En general, el precio de las casas está al rededor de los 430 millones, distribuídos por zonas, se encuentran en la tabla anterior, identificando el mayor precio medio en la zona oeste 736 millones, seguido de la zona sur con viviendas con precios promedio de 612 millones. Las viviendas más económicas se encuentran en la zona centro.
plot (casa_data$preciom, casa_data$areaconst, col = "#F0F8FF",
pch = 16,
xlab = "Precio",
ylab = "Área Construida",
main = "Gráfica de Precio vs. Área Construida en Casas")
De igual forma, a mayor área construída en la casa, mayor precio, el
menor precio fue de 77 millones y el máximo de 1999 millones
En el mercado inmobiliario de Cali se identificó que el principal tipo de vivienda ofertado es el apartamento, con con mayor oferta en la zona sur.
Se observó que pueden existir viviendas de un solo espacio sin habitaciones y otras que tampoco cuentan con baño propio,
La mayoría de apartamentos tienen menos de 3 habitaciones y 3 baños con 1 parqueadero en promedio, el precio precio mínimo es de 58 millones y el máximo de 1950 millones.
Con relación a las casas, el 50% de éstas tienen entre 3 y 5 habitaciones, entre 3 y 5 baños y entre 1 y 2 parqueaderos. el precio mínimo es de 77 millones y el máximo de 1999.
Se nota que las casas tienen mayor número de habitaciones, baños y parqueaderos comparando con los apartamentos, de igual forma un mayor precio medio.
Estudios futuros podrían indicar si mayor número de apartamentos disponibles para la venta se debe a que los clientes buscan con mayor interés las casas, generando poco stock de casas disponibles o si el tipo de vivienda que más se pone en venta son los apartamentos. Se encontró que a mayor área construída, mayor precio, se requieren más análisis para identificar si hay una relación entre el precio y el número de habitaciones o baños.
Para futuros análisis es importante estandarizar las variables de recolección de información de manera que permita realizar un análisis con mayor profundidad, no obstante, mediante la ciencia de datos se pueden utilizar herramientas para limpieza y depuración de datos.