El mercado inmobiliario en la ciudad de Cali, ha presentado un crecimiento significativo en los últimos años, lo anterior obedece a factores como: desarrollo de nuevos proyectos, inversión extranjera directa, otorgamiento de beneficios de parte del gobierno y el crecimiento de la población. En 2021, las ventas del sector en Cali llegaron a $6700 millones y en 2022 a $6100 mil millones. Por lo anterior, se espera que el sector continúe en crecimiento en los siguientes años, propiciando así desarrollo en la economía de la región.
En el presente informe se interpretan y analizan datos sobre oferta de viviendas en Cali, se incluye precio de viviendas en diferentes zonas de la ciudad, tipo de viviendas disponibles, caracteristicas de los inmuebles, entre otros.
Realizar un análisis descriptivo que permita identificar tendencias de comportamiento en el sector inmobiliario, patrones atípicos, relación entre las variables existentes. Los resultados proporcionan información útil para la toma de decisiones de la empresa B&C respecto a estrategias de marketing, definición de precios de vivienda e identificación de nichos de mercado.
Se tomó la base de datos denominada vivienda_faltantes la cual fue suministrada por la inmobiliaria y se realizó la identificación de variables, posteriormente se hizo una limpieza de datos donde se eliminaron los registros vacíos, estandarizando resultados de variables y reemplazando valores ausentes.
Respecto al 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 y/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.
El primer paso que se llevo a cabo fue la limpieza de datos, con el propósito de corregir o eliminar registros imprecisos, campos vacios o con información duplicada.
El dataset proporcionado se denomina vivienda_faltantes, se procede a organizar los registros de forma ascendente por la variable “ID”, así mismo se redujo el número de variables debido a que se excluyeron aquellas que se considera no agregan valor al análisis.
# organizar los datos de manera ascendente por la columna 'id'
df_ordenado <- vivienda_faltantes[order(df$id), ]# muestra la base de datos vivienda_faltantes con las columnas seleccionadas
df1 <- df_ordenado [, c(1, 3, 4, 5, 6, 7, 10, 11)] En la base datos se observa que existen datos que no estan estandarizados, es decir se tienen una combinación de mayusculas y minusculas, por lo que se decide realizar un homologación con la opción tolower con el propósito de evidenciar uniformidad en los datos
# Convertir los datos registrados en minúsculas, a Mayúsculas usando toupper en vez de tolower
df1 <- mutate_if(df1, is.character, tolower)
df2 <- df1
(df1)| Name | df1 |
| Number of rows | 8330 |
| Number of columns | 8 |
| _______________________ | |
| Column type frequency: | |
| character | 2 |
| numeric | 6 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| tipo | 3 | 1 | 4 | 11 | 0 | 3 | 0 |
| barrio | 3 | 1 | 4 | 29 | 0 | 407 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| id | 3 | 1.00 | 4163.99 | 2403.93 | 1 | 2082.5 | 4164 | 6245.5 | 8319 | ▇▇▇▇▇ |
| piso | 2641 | 0.68 | 3.77 | 2.62 | 1 | 2.0 | 3 | 5.0 | 12 | ▇▃▁▁▁ |
| estrato | 3 | 1.00 | 4.63 | 1.03 | 3 | 4.0 | 5 | 5.0 | 6 | ▅▆▁▇▆ |
| preciom | 2 | 1.00 | 434.24 | 329.02 | 58 | 220.0 | 330 | 540.0 | 1999 | ▇▂▁▁▁ |
| areaconst | 3 | 1.00 | 174.99 | 142.95 | 30 | 80.0 | 123 | 229.0 | 1745 | ▇▁▁▁▁ |
| parquea | 1606 | 0.81 | 1.84 | 1.13 | 1 | 1.0 | 2 | 2.0 | 10 | ▇▁▁▁▁ |
A continuación se observan las variables identificadas en el análisis:
Se observa que existen 6 valores y/o variables de tipo numérico, las cuales se relacionan a continuación: id, piso, estrato, preciom,areaconst, parquea
Se evidencian 2 variables de tipo categórico, las cuales son: tipo y barrio ambas de carácter nominal
___________________________________________________________________________________________________________
A continuación se realiza la estimación de los valores ausentes en el conjunto de datos entregado.
## [1] 4264
El resultado arroja un total de (4264) datos perdidos y/o sin poblar. _____________________________________________________________________________________________________________
Se observa que existen dos variables que presentan el mayor número de valores perdidos.
La variable piso tiene un total de 2641 datos sin poblar, lo que representa un 31.70%, mientras que la variable parquea tiene 1606 campos sin poblar que corresponde al 19.30% de datos faltantes.
De lo anterior se concluye que para la variable piso, es necesario tener un concepto de los administradores de la base para conocer las alternativas de poblamiento y/o determinar si es optimo trabajar con el porcentaje de datos faltantes. Respecto a la variable de parqueo los datos faltantes no superan el porcentaje de 20% por lo que no cumple con el porcentaje mínimo para considerar alternativa de imputación.
##
## Variables sorted by number of missings:
## Variable Count
## piso 0.3170468187
## parquea 0.1927971188
## id 0.0003601441
## estrato 0.0003601441
## areaconst 0.0003601441
## tipo 0.0003601441
## barrio 0.0003601441
## preciom 0.0002400960
Se determino realizar la imputación de los datos a través de la media absoluta de los registros presentes en la base de datos y de esta manera poblar los datos ausentes. Es de aclarar que se empleo la media exclusivamente para las variables cuantitativas, mientras que las variables categóricas o cualitativas se poblaron a través de la moda.
datos_faltantes_1 <-is.na(df2$piso)
datos_faltantes_2 <-is.na(df2$parquea)
datos_faltantes_3 <-is.na(df2$tipo)
datos_faltantes_4 <-is.na(df2$barrio)Para la variable piso se empleó la instrucción común para imputación, remplazando el valor de la media (3.772368) en los (2641) registros vacios.
df2$piso[datos_faltantes_1]<-mean(df2$piso,na.rm = T)
df2$parquea[datos_faltantes_2]<-mean(df2$parquea,na.rm = T)
#n_miss(df1$piso)
#n_miss(df2$piso)
#n_miss(df1$parquea)
#n_miss(df2$parquea)Aunque los datos NA´s con las variables categóricas tipo y barrio corresponden a 3 valores faltantes no sería necesario hacer imputación, sin embargo para el ejercicio se realiza de la siguiente manera:
df2$tipo[datos_faltantes_3]<-mfv(df2$tipo[!datos_faltantes_3])
df2$barrio[datos_faltantes_4]<-mfv(df2$barrio[!datos_faltantes_4])A continuación se muestra un dataframe de los valores NA´s de las variables, piso, parqueadero, tipo y barrio los cuales podemos observar la comparación con registros disminuidos a cero datos_faltantes
Se observa como se realizó de manera exitosa el reemplazado los datos NA´s por la media para variables númericas y por la moda para las variables categóricas
## [1] NA
## [1] 3.772368
## [1] NA
## [1] 1.835961
tabla1 <- table(df1$id)
tabla2 <- table(df1$piso)
tabla3 <- table(df1$estrato)
tabla4 <- table(df1$preciom)
tabla5 <- table(df1$areaconst)
tabla6 <- table(df1$parquea)
tabla7 <- table(df1$tipo)
tabla8 <- table(df1$barrio)# variable cualitativa con 2 opciones apartamento o casa
color <- brewer.pal(length(tabla7), "Set2")
etiquetas7 <- paste0(tabla7, " = ", round(100 * tabla7/sum(tabla7), 2), "%")
pie(tabla7, labels = etiquetas7, col = color)
legend("topright", legend = c("apto", "apartamento", "casa"),
fill = c("lightgreen", "lightgreen", "lightblue"))En cuanto a las medidas de tendencia central se calcula la media solo para las variables cuantitativas, así como la mediana permite calcular sin importar el tipo de variable, y para la moda solo la variable id evitaría realizar el cálculo pues sus datos corresponden a un dato de indentificación único _________________________________________________________________________________________________________
md1 <- mean(df1$id, na.rm = TRUE)
#md2 <- mean(df1$piso, na.rm = TRUE), comando a usar antes de la imputación df1
md2 <- mean(df2$piso) # comando a usar después de la imputación df2
md3 <- mean(df1$estrato, na.rm = TRUE)
md4 <- mean(df1$preciom, na.rm = TRUE)
md5 <- mean(df1$areaconst, na.rm = TRUE)
#md6 <- mean(df1$parquea, na.rm = TRUE)
md6 <- mean(df2$parquea)
media <- c(md1,md2,md3,md4,md5,md6)
media## [1] 4163.990873 3.772368 4.634322 434.240634 174.987601 1.835961
Media: Se observa que el promedio del precio de las viviendas que se encuentran disponibles para la venta en la ciudad de Cali es de $434.000.000 m/c ___________________________________________________________________________________________________________
m1 <- median(df1$id, na.rm = TRUE)
m2 <- median(df2$piso)
m3 <- median(df1$estrato, na.rm = TRUE)
m4 <- median(df1$preciom, na.rm = TRUE)
m5 <- median(df1$areaconst, na.rm = TRUE)
m6 <- median(df2$parquea)
m7 <- median(df1$tipo, na.rm = TRUE)
m8 <- median(df1$barrio, na.rm = TRUE)
mediana <- c(m1,m2,m3,m4,m5,m6,m7,m8)
mediana## [1] "4164" "3.77236772719283" "5" "330"
## [5] "123" "1.83596073765616" "apartamento" "los andes"
Mediana: El 50% de las viviendas que faltan por vender en la ciudad de Cali es menor o igual a un area de construcción de 123 metros cuadrados ___________________________________________________________________________________________________________
#mo1 es el código id es único por tanto no se puede calcular la moda
mo2 <- mfv(df2$piso)
mo3 <- mfv(df1$estrato, na_rm = TRUE)
mo4 <- mfv(df1$preciom, na_rm = TRUE)
mo5 <- mfv(df1$areaconst, na_rm = TRUE)
mo6 <- mfv(df2$parquea)
mo7 <- mfv(df1$tipo, na_rm = TRUE)
mo8 <- mfv(df1$barrio, na_rm = TRUE)
moda <- c(mo2,mo3,mo4,mo5,mo6,mo7,mo8)
moda## [1] "3.77236772719283" "5" "350" "60"
## [5] "1" "apartamento" "valle del lili"
Moda: el barrio con más frecuencia para las viviendas disponibles para la venta en la ciudad de Cali se llama Valle de Lili ________________________________________________________________________________________________________
____________________________________________________________________________________________________
# Cálculo cuartiles
q1 <- quantile(df1$id, prob=seq(0, 1, 1/4), na.rm = TRUE)
q2 <- quantile(df2$piso, prob=seq(0, 1, 1/4))
q3 <- quantile(df1$estrato, prob=seq(0, 1, 1/4), na.rm = TRUE)
q4 <- quantile(df1$preciom, prob=seq(0, 1, 1/4), na.rm = TRUE)
q5 <- quantile(df1$areaconst, prob=seq(0, 1, 1/4), na.rm = TRUE)
q6 <- quantile(df2$parquea, prob=seq(0, 1, 1/4))
q2## 0% 25% 50% 75% 100%
## 1.000000 2.000000 3.772368 4.000000 12.000000
Quartil No.4 de la variable piso (Q75%=4)
el 75% de las viviendas faltantes se encuentra como máximo en el 4 piso y el 25% de las viviendas faltantes se encuentran como mínimo en el piso 4 ____________________________________________________________________________________________________
# Cálculo deciles
d3 <- quantile(df1$estrato, prob=seq(0, 1, length = 11), na.rm = TRUE)
d4 <- quantile(df1$preciom, prob=seq(0, 1, length = 11), na.rm = TRUE)
d3## 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
## 3 3 4 4 4 5 5 5 6 6 6
## 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
## 58 145 190 240 285 330 390 475 610 870 1999
Decil No.2 de la variable estrato (D10%=3)
el 10% de las viviendas faltantes se encuentra como máximo en el estrato 3 y el 90% de las viviendas faltantes se encuentran como mínimo en el estrato 3
Decil No.9 de la variable precio (D90%=870)
el 90% de las viviendas faltantes tiene como máximo un precio de 870 millones y el 10% de las viviendas faltantes tiene como mínimo un precio de 870 millones ____________________________________________________________________________________________________________
# Cálculo percentiles
pc5 <- quantile(df1$areaconst, c(0.2, 0.40, 0.50, 0.60, 0.80), type = 6, na.rm = TRUE)
pc6 <- quantile(df2$parquea, c(0.2, 0.40, 0.50, 0.60, 0.80), type = 6)
pc5## 20% 40% 50% 60% 80%
## 73 102 123 153 258
## 20% 40% 50% 60% 80%
## 1.000000 1.835961 1.835961 2.000000 2.000000
Percentil No.40 de la variable areaconst (P40%=102)
el 40% de las viviendas faltantes consta de un area de construcción como máximo de 102 metros cuadrados y el 60% de las viviendas faltantes consta de un area de construción como mínimo de 102 metros cuadrados
Percentil No.80 de la variable parqueadero (P80%=2)
el 80% de las viviendas faltantes tiene como máximo la opción de 2 puestos de parqueadero y el 20% de las viviendas faltantes tiene como mínimo la opción de 2 puestos de parqueadero _________________________________________________________________________________________________________
# Rango Mínimo y Máximo
Rgm7 <- min(df2$tipo)
Rgx7 <- max(df2$tipo)
Rgm8 <- min(df2$barrio)
Rgx8 <- max(df2$barrio)
Rgm7## [1] "apartamento"
## [1] "20 de julio"
El valor mínimo de las viviendas faltantes de las variables tipo y barrio, corresponden respectivamente a un apartamento que se encuentra ubicado en el barrio 20 de Julio de la ciudad de Calí
Para realizar el siguiente cálculo se debe tener en cuenta las variables númericas, sobre las cuales se encontrará la varianza y la desviación estandar aquella para interpretar que tan factible es el cambio entre dato y dato de la base vivienda_faltantes
# varianza
v1 <- var(df1$id, na.rm = TRUE)
v2 <- var(df2$piso)
v3 <- var(df1$estrato, na.rm = TRUE)
v4 <- var(df1$preciom, na.rm = TRUE)
v5 <- var(df1$areaconst, na.rm = TRUE)
v6 <- var(df2$parquea)
varianza <- c(v1,v2,v3,v4,v5,v6)
varianza## [1] 5778862.154132 4.669974 1.059514 108251.333226 20434.659175
## [6] 1.021739
Se concluye que la variable precio es una de las que mayor importancia tiene en la elección de un bien inmueble. Por lo anterior, se considera imprescindible complementar los datos encontrados con las medidas de tendencia central.
Toda vez que el promedio del precio de las viviendas que se encuentran disponibles para la venta en la ciudad de Cali es de $434.000.000 m/c, el resultado de la varianza para dicho parámetro es de 108251.333226 apartir de lo cual se aplica una raiz cuadrada (√ 108521), que ofrece como resultado la desviación estandar con un valor de 329.015704 _________________________________________________________________________________________________________
# desviación estandar
dv1 <- sd(df1$id, na.rm = TRUE)
dv2 <- sd(df2$piso)
dv3 <- sd(df1$estrato, na.rm = TRUE)
dv4 <- sd(df1$preciom, na.rm = TRUE)
dv5 <- sd(df1$areaconst, na.rm = TRUE)
dv6 <- sd(df2$parquea)
desv_estandar <- c(dv1,dv2,dv3,dv4,dv5,dv6)
desv_estandar## [1] 2403.926404 2.161012 1.029327 329.015704 142.949848 1.010811
## [1] 763.2563
## [1] 105.2249
## [1] 763.2563 434.2406 105.2249
Si la desviación estandar para la variable estandar es de 329 aproximadamente, entonces este valor lo sumamos y restamos de la media generando un intervalo que comprendería el 68% de los datos, es decir:
Media: 434 millones Media + desv_estandar_precio = 434 + 329 = 763 Media - desv_estandar_precio = 434 - 329 = 105
Se observa que el intervalo para la desviación de estandar donde se cubriria un 68% de los registros de la base de datos de viviendas faltantes en Cali es: [ 105.2249 - 434.2406 - 763.2563]
Se obtiene una desviación estandar de 329 y a este valor se le aplica otra ráiz cuadrada (√ 329) el resultado es de 18.13, este resultado lo sumamos y restamos a los datos 763 y 105 del intervalo anterior entonces tendriamos un intervalo con los siguientes datos: [ 87 - 434 - 781] el cual cubriria un 95% de los registros de la base de datos de viviendas faltantes en Cali. __________________________________________________________________________________________________________
Desviación estandar 95%
En resumen las 7913 viviendas disponibles para la venta en Cali, equivalen al 95% de 8330 registros en total de la base de datos, dichas casas o apartamentos oscilan entre valores de 87 a 781 millones
Una vez finalizada la metodología de análisis exploratorio de datos implementada en este estudio se cita a continuación las tendencias actuales del mercado inmobiliario:
*Existe preferencia por inmuebles que estan ubicados en zonas que registran un estrato socioeconomico 3 y 4.
*Se observa que existe una oferta más amplia de apartamentos en contraste con casas en la cidad de Cali.
*Las viviendas que presentan mayor precio se encuentran situadas en zona oeste y sur de la ciudad
Una vez realizado el análisis de los datos se concluye que la exploración de los datos permitió la identificación de patrones de comportamiento, valores atipicos, composición de las variables, lo cual provee información para la toma de decisiones.
Respecto a las tendencias identificadas, se observa preferencia por la compra de tipo de inmueble apartamento, con caracteristicas particulares como que esten situados en pisos bajos y que ademas cuente con parqueadero.
Es de aclarar que en el análisis se encontraron algunos retos, especialmente en integridad de los datos y en variables que no tenían información poblada, no obstante se obtuvieron resultados que serviran de apoyo a la toma de decisiones en la empresa B&C.