1. Introducción

El mercado inmobiliario es un componente crucial de la economía de cualquier ciudad. Comprender las dinámicas y tendencias dentro de este mercado es fundamental para desarrolladores, inversores y planificadores urbanos, ya que les permite tomar decisiones informadas y estratégicas que afectan el desarrollo y la calidad de vida de sus habitantes.

En este estudio, nos sumergimos en el mercado inmobiliario de Cali, analizando una variedad de variables que incluyen ubicación, estrato socioeconómico, tipo de vivienda y precios. A través de un análisis detallado, hemos explorado cómo estas variables interactúan entre sí y cómo influyen en la oferta y demanda de propiedades en la ciudad.

Hemos descubierto que la ubicación desempeña un papel crucial en la determinación de los precios, con zonas como el Oeste y el Sur destacando por sus precios promedio más altos. Además, el estrato socioeconómico está estrechamente vinculado con el precio y el tamaño de las viviendas, reflejando las preferencias y capacidades de los diferentes segmentos de la población.

Un hallazgo interesante es la preferencia del mercado por las viviendas tipo casa, a pesar de representar una menor frecuencia en los datos en comparación con los apartamentos. Esto subraya la importancia de entender las preferencias de los compradores y adaptar la oferta de propiedades para satisfacer estas necesidades.

En conjunto, este estudio proporciona una visión completa del mercado inmobiliario de Cali, destacando tendencias, patrones y áreas de oportunidad para aquellos involucrados en el desarrollo y gestión del mercado inmobiliario. Estos conocimientos son fundamentales para promover un crecimiento sostenible y mejorar la calidad de vida en la Ciudad de Cali.

2. Objetivos

Analizar la oferta de casas en Cali para identificar las tendencias clave que guíen las decisiones comerciales de B&C. Esto incluye entender la distribución de precios, tipos de propiedades y características más demandadas.

3. Contexto del mercado inmobiliario en Cali

3.1. Crecimiento del sector:

3.2. Expectativas a futuro:

Se espera que el crecimiento del mercado inmobiliario de Cali continúe en los próximos años, lo que representa una oportunidad importante para las empresas del sector.

4. Metodología

Se realizó un análisis descriptivo de la base de datos de B&C, que contiene información general sobre la oferta inmobiliaria con información sobre:

Para la realización de este analisis se utilizarán las siguientes tecnicas:

5. Desarrollo

En esta sección se explicará y profundizara sobre todo el analisis desarrollado para la empresa B&C, detallando cada etapa del proceso.

5.1. Analisis de la base de datos

Para iniciar el análisis del mercado inmobiliario en la Ciudad de Cali, es crucial primero reconocer todas las variables disponibles en la base de datos que utilizaremos. La siguiente tabla presenta la información que contamos, mostrando diferentes variables y sus respectivos tipos de datos, incluyendo variables categóricas y cuantitativas.

data("vivienda_faltantes") #Obtenemos la base de datos
kable(data.frame(lapply(vivienda_faltantes, class)), format = "html", caption = "Variables y su tipo de dato")
Variables y su tipo de dato
id zona piso estrato preciom areaconst parquea banios habitac tipo barrio longitud latitud
numeric character numeric numeric numeric numeric numeric numeric numeric character character numeric numeric

Después de examinar la estructura de los datos, se procede con la limpieza para abordar los valores faltantes y los duplicados:

viviendas_datos <- rename(vivienda_faltantes, "Precio (m)" = "preciom", "Parqueaderos" = "parquea", "Tipo Vivienda" = "tipo")
kable(data.frame(lapply(viviendas_datos, class)), format = "html", caption = "Variables y su tipo de dato")
Variables y su tipo de dato
id zona piso estrato Precio..m. areaconst Parqueaderos banios habitac Tipo.Vivienda barrio longitud latitud
numeric character numeric numeric numeric numeric numeric numeric numeric character character numeric numeric

5.2. Limpieza de datos faltantes y duplicados

La variable “id” sirve como referencia única para cada casa en nuestra base de datos. Es imperativo garantizar que cada “id” aparezca solo una vez para evitar distorsiones en nuestro análisis. Por lo tanto, se realiza una verificación para detectar y eliminar duplicados:

frecuencia_id <- table(vivienda_faltantes$id) %>% as.data.frame() #Obtenemos la frecuencia de los Id's
duplicados <- frecuencia_id[frecuencia_id$Freq > 1, ] #Filtramos solo los id's donde hay duplicados
duplicados
##      Var1 Freq
## 8309 8309    2
## 8310 8310    2
## 8313 8313    2
## 8314 8314    2
## 8315 8315    2
## 8316 8316    2
## 8317 8317    2
## 8318 8318    2
viviendas_datos[viviendas_datos$id %in% duplicados$Var1, ]
## # A tibble: 16 × 13
##       id zona    piso estrato `Precio (m)` areaconst Parqueaderos banios habitac
##    <dbl> <chr>  <dbl>   <dbl>        <dbl>     <dbl>        <dbl>  <dbl>   <dbl>
##  1  8309 Zona …     5       4          150        56           NA      1       2
##  2  8310 Zona …     1       6         1600       463            4      6       3
##  3  8313 Zona …     7       6          525       137            2      3       3
##  4  8314 Zona …     7       6         1400       210            3      4       3
##  5  8315 Zona …    NA       6          620       167            2      4       4
##  6  8316 Zona …     7       5          400       220            1      4       4
##  7  8317 Zona …    NA       6         1100       290            4      4       3
##  8  8318 Zona …    NA       4          580       295            2      5       5
##  9  8309 Zona …     5       4          150        56           NA      1       2
## 10  8310 Zona …     1       6         1600       463            4      6       3
## 11  8313 Zona …     7       6          525       137            2      3       3
## 12  8314 Zona …     7       6         1400       210            3      4       3
## 13  8315 Zona …    NA       6          620       167            2      4       4
## 14  8316 Zona …     7       5          400       220            1      4       4
## 15  8317 Zona …    NA       6         1100       290            4      4       3
## 16  8318 Zona …    NA       4          580       295            2      5       5
## # ℹ 4 more variables: `Tipo Vivienda` <chr>, barrio <chr>, longitud <dbl>,
## #   latitud <dbl>

La columna (Var1) representa el “id”, y se identifican registros duplicados donde ciertas viviendas aparecen dos veces en nuestra base de datos. Se procede a eliminar estos duplicados, ya que no afectan el análisis y pueden distorsionar los resultados.

viviendas_datos <- distinct(viviendas_datos) #Eliminamos duplicados

Después de eliminar los registros duplicados, se examinan los datos faltantes en nuestra base:

kable(colSums(is.na(viviendas_datos)), format = "html", caption = "Cantidad de faltantes en cada variable")
Cantidad de faltantes en cada variable
x
id 2
zona 2
piso 2637
estrato 2
Precio (m) 1
areaconst 2
Parqueaderos 1604
banios 2
habitac 2
Tipo Vivienda 2
barrio 2
longitud 2
latitud 2

Se observa que las variables “piso” y “parqueaderos” muestran una cantidad considerable de datos faltantes, mientras que la variable “id” tiene solo dos registros faltantes. Dado que “id” es una variable no estadística, se eliminan directamente estos registros. Temporalmente, los datos faltantes en otras variables se imputan con la categoría especial “NA”. Posteriormente, se realizará una imputación final después de un análisis más detallado.

viviendas_datos <- viviendas_datos[!is.na(viviendas_datos$id), ]

Tras la eliminación de los registros faltantes de “id”, se presenta la distribución de los datos faltantes:

VIM::aggr(viviendas_datos, numbers=TRUE, cex.axis=0.7)

vivienda_sin_faltantes <- na.omit(viviendas_datos)

La visualización destaca que los datos faltantes se concentran en las variables “piso” y “parqueaderos”, lo que impide una simple eliminación de estos registros, ya que resultaría en la pérdida significativa de datos. Por lo tanto, se opta por la imputación de estos valores utilizando medidas de tendencia central, específicamente la mediana, considerando el tipo de edificación y la zona.

table(vivienda_sin_faltantes$`Tipo Vivienda`)
## 
## Apartamento APARTAMENTO        apto        casa        Casa        CASA 
##        3155          24           3           5        1617           4

En la base de datos solo existen dos tipos de vivienda, pero se ha diligenciado erroneamente esta variable, es decir, se crearon diferentes registros para definir el mismo tipo de vivienda (casa o apartamente), debido a esto, se decide homologar estos valores para obtener solo 2 tipos de viviendas.

vivienda_sin_faltantes[vivienda_sin_faltantes$`Tipo Vivienda` == "Apartamento", ]$`Tipo Vivienda` <- "APARTAMENTO"
vivienda_sin_faltantes[vivienda_sin_faltantes$`Tipo Vivienda` == "apto", ]$`Tipo Vivienda` <- "APARTAMENTO"
vivienda_sin_faltantes[vivienda_sin_faltantes$`Tipo Vivienda` == "casa", ]$`Tipo Vivienda` <- "CASA"
vivienda_sin_faltantes[vivienda_sin_faltantes$`Tipo Vivienda` == "Casa", ]$`Tipo Vivienda` <- "CASA"

viviendas_datos[viviendas_datos$`Tipo Vivienda` == "Apartamento", ]$`Tipo Vivienda` <- "APARTAMENTO"
viviendas_datos[viviendas_datos$`Tipo Vivienda` == "apto", ]$`Tipo Vivienda` <- "APARTAMENTO"
viviendas_datos[viviendas_datos$`Tipo Vivienda` == "casa", ]$`Tipo Vivienda` <- "CASA"
viviendas_datos[viviendas_datos$`Tipo Vivienda` == "Casa", ]$`Tipo Vivienda` <- "CASA"
table(vivienda_sin_faltantes$`Tipo Vivienda`)
## 
## APARTAMENTO        CASA 
##        3182        1626

A continuación se muestra las medidas de tendencia central para estas variables:

data_zonas <- distinct(vivienda_sin_faltantes[, c("zona", "Tipo Vivienda")] %>% as.data.frame())
promedios_piso <- numeric(length(data_zonas))
medianas_piso <- numeric(length(data_zonas))
moda_piso <- numeric(length(data_zonas))
promedios_parqueaderos <- numeric(length(data_zonas))
medianas_parqueaderos <- numeric(length(data_zonas))
moda_parqueaderos <- numeric(length(data_zonas))

for(i in 1:length(data_zonas$zona)){
  vivienda_zona = vivienda_sin_faltantes[vivienda_sin_faltantes$zona == data_zonas$zona[i] & vivienda_sin_faltantes$`Tipo Vivienda` == data_zonas$`Tipo Vivienda`[i], ]
  promedios_piso[i] = mean(vivienda_zona$piso)
  promedios_parqueaderos[i] = mean(vivienda_zona$Parqueaderos)
  medianas_piso[i] = median(vivienda_zona$piso)
  medianas_parqueaderos[i] = median(vivienda_zona$Parqueaderos)
  # Calcula la tabla de frecuencias
  frecuencia_piso <- table(vivienda_zona$piso)
  frecuencia_parqueaderos <- table(vivienda_zona$Parqueaderos)

# Encuentra el valor modal (moda)
  moda_piso[i] <- names(frecuencia_piso)[which.max(frecuencia_piso)] %>% as.numeric()
  moda_parqueaderos[i] <- names(frecuencia_parqueaderos)[which.max(frecuencia_parqueaderos)] %>% as.numeric()
}

resumen_zona <- data.frame(tipo_vivienda = data_zonas$`Tipo Vivienda`, zona = data_zonas$zona, media_piso = promedios_piso, mediana_piso = medianas_piso, moda_piso = moda_piso, media_parqueaderos = promedios_parqueaderos, mediana_parqueaderos = medianas_parqueaderos, moda_parqueaderos = moda_parqueaderos)

kable(resumen_zona, format = "html")
tipo_vivienda zona media_piso mediana_piso moda_piso media_parqueaderos mediana_parqueaderos moda_parqueaderos
APARTAMENTO Zona Oeste 5.077728 5 3 2.121076 2 2
CASA Zona Oeste 2.654762 2 2 2.190476 2 2
CASA Zona Sur 2.215136 2 2 2.429422 2 2
APARTAMENTO Zona Sur 4.554839 4 4 1.398387 1 1
CASA Zona Norte 1.956693 2 2 2.389764 2 2
APARTAMENTO Zona Norte 5.061709 4 4 1.397152 1 1
CASA Zona Centro 1.500000 1 1 1.343750 1 1
CASA Zona Oriente 2.000000 2 1 1.362500 1 1
APARTAMENTO Zona Centro 6.250000 5 5 1.000000 1 1
APARTAMENTO Zona Oriente 3.294118 4 5 1.176471 1 1

Se observa que, aunque existen tres medidas de tendencia central, todas proporcionan valores similares para ambas variables, lo que respalda la elección de la mediana como una medida representativa para la imputación.

for(i in 1:length(resumen_zona$zona)){
  condicion_1 <- viviendas_datos$zona == resumen_zona$zona[i]
  condicion_2 <- viviendas_datos$`Tipo Vivienda` == resumen_zona$tipo_vivienda[i]
  condicion_3 <- is.na(viviendas_datos$piso)
  condicion_4 <- is.na(viviendas_datos$Parqueaderos)
  viviendas_datos[condicion_1 & condicion_2 & condicion_3, ]$piso <- resumen_zona$mediana_piso[i]
  viviendas_datos[condicion_1 & condicion_2 & condicion_4, ]$Parqueaderos <- resumen_zona$mediana_parqueaderos[i]
}

6. Resultados

6.1. Analisis por variable

Para obtener una comprensión del mercado inmobiliario, es esencial iniciar un análisis detallado de las diversas variables presentes en nuestra base de datos. Este análisis por variable nos permitirá desentrañar las complejidades y tendencias que influyen en el panorama inmobiliario de la Ciudad de Cali. Al abordar cada variable individualmente, podemos obtener una visión completa y detallada de cómo interactúan entre sí y cómo impactan en el mercado en su conjunto.

frecuencia_tipo_vivienda <- table(viviendas_datos$`Tipo Vivienda`) %>% as.data.frame()
frecuencia_tipo_vivienda$proporcion <- frecuencia_tipo_vivienda$Freq/sum(frecuencia_tipo_vivienda$Freq)
frecuencia_tipo_vivienda$etiqueta = paste0(round(frecuencia_tipo_vivienda$proporcion*100, 1), "%")
# Crea el gráfico de pastel
ggplot(frecuencia_tipo_vivienda, aes(x = "", y = proporcion, fill = Var1)) +
  geom_bar(width = 1, stat = "identity") +
  coord_polar("y", start = 0) +
  theme_void() +
  geom_text(aes(label = etiqueta), position = position_stack(vjust = 0.5))

El gráfico anterior ilustra la distribución de datos para la variable mencionada. Según nuestra base de datos, el 61% de las edificaciones corresponden a apartamentos, mientras que el restante 39% corresponde a casas. Este hallazgo revela una tendencia significativa en el mercado inmobiliario de Cali: hay una mayor representación de apartamentos en comparación con las casas.

frecuencia_zona <- table(viviendas_datos$zona) %>% as.data.frame()
frecuencia_zona$proporcion <- frecuencia_zona$Freq/sum(frecuencia_zona$Freq)
frecuencia_zona$proporcion <- paste0(round(frecuencia_zona$proporcion*100, 1), "%")
frecuencia_zona$etiqueta <- paste(frecuencia_zona$Freq, frecuencia_zona$proporcion, sep = ";  ")

# Crear el gráfico de barras
ggplot(frecuencia_zona, aes(x=Var1, y=Freq)) +
  geom_bar(stat="identity", fill="steelblue") +
  geom_text(aes(label=etiqueta), vjust=-0.3, size=3.5) +
  theme_minimal() +
  labs(x="Zonas", y="Frecuencia", title="Viviendas por Zona") +
  theme(plot.title = element_text(hjust = 0.5))


El análisis del gráfico de cantidad de viviendas por zona revela una distribución desigual en la ciudad de Cali, con una clara concentración en la zona Sur, que representa más de la mitad del total de ventas, con un impresionante 56.8%. La zona Norte ocupa el segundo lugar con un 23.1%, mientras que las zonas Oeste, Oriente y Centro tienen una participación menor, con 14.4%, 4.2% y 1.5% respectivamente.

La alta concentración de viviendas en la zona Sur podría atribuirse a varios factores. Por ejemplo, la disponibilidad de servicios, la accesibilidad y practicidad en la movilidad dentro de la zona, así como consideraciones de seguridad, pueden influir en la preferencia de los compradores por establecerse en esta área de la ciudad. Además, la presencia de algunos centros comerciales y otros servicios podría también impulsar la demanda de viviendas en esta zona.

La zona Norte, aunque no tan dominante como la Sur, sigue siendo una opción popular para los compradores. Su atractivo podría estar relacionado con su proximidad a puntos estratégicos, como áreas comerciales o zonas de interés cultural, así como la disponibilidad de servicios y una infraestructura establecida.

En contraste, las zonas Oeste, Oriente y Centro muestran una menor cantidad de ventas. Esto podría atribuirse a una serie de factores, como la falta de oferta de vivienda en estas áreas, la presencia predominante de locales comerciales que desalientan la residencia, así como problemas de tráfico y densidad poblacional, especialmente en el caso del Centro, que podría resultar menos atractivo para los compradores que buscan una mayor tranquilidad y comodidad en su entorno residencial.

frecuencia_estrato <- table(viviendas_datos$estrato) %>% as.data.frame()
frecuencia_estrato$proporcion <-frecuencia_estrato$Freq/sum(frecuencia_estrato$Freq)
frecuencia_estrato$proporcion <- paste0(round(frecuencia_estrato$proporcion*100, 1), "%")
frecuencia_estrato$etiqueta <- paste(frecuencia_estrato$Freq, frecuencia_estrato$proporcion, sep = ",  ")

# Crear el gráfico de barras
ggplot(frecuencia_estrato, aes(x=Var1, y=Freq)) +
  geom_bar(stat="identity", fill="goldenrod") +
  geom_text(aes(label = etiqueta), vjust = -0.3) +
  theme_minimal() +
  labs(x="Estrato", y="Frecuencia", title="Viviendas por Estrato") +
  theme(plot.title = element_text(hjust = 0.5))

Se observa que la mayor cantidad de viviendas se concentra en los estratos 4, 5 y 6, representando un 25.6%, 33.1% y 23.9% respectivamente. Estos datos revelan que el 82.6% de las viviendas se encuentran en estos estratos socioeconómicos, lo que sugiere que la mayoría de los datos reside en áreas con un nivel socioeconómico medio-alto o alto.

En contraste, el estrato 3 muestra la menor cantidad de viviendas, con solo un 17.5% del total. Esta distribución puede estar relacionada con la alta concentración de viviendas en la zona sur, donde los estratos suelen ser más altos y los precios de las propiedades tienden a ser más elevados. Estos barrios suelen ser más apetecidos debido a su ubicación privilegiada y a la disponibilidad de servicios y comodidades, lo que podría explicar la menor presencia de viviendas en estratos más bajos en esta área.

Este análisis de la distribución de viviendas por estrato socioeconómico proporciona una visión importante sobre la demografía y las preferencias residenciales en la ciudad de Cali. Puede ser útil para entender las dinámicas del mercado inmobiliario y para la planificación urbana y el desarrollo socioeconómico de la ciudad.

# Crear el histograma
ggplot(viviendas_datos, aes(x=piso)) +
  geom_histogram(binwidth=1, fill="steelblue", color="black") +
  theme_minimal() +
  labs(x="piso", y="Frecuencia", title="Distribución piso") +
  theme(plot.title = element_text(hjust = 0.5))

La distribución de datos revela una concentración significativa de viviendas en los pisos 1 al 5, lo que sugiere que la mayoría de las propiedades en nuestra base de datos se encuentran dentro de este rango. Además, se observa una cantidad limitada de datos por encima del piso 5.

Este patrón puede atribuirse a varias razones. Una de ellas podría ser la preferencia de las personas por apartamentos en pisos más bajos debido a su comodidad y accesibilidad. Los pisos más bajos suelen ser más accesibles y convenientes para muchos, especialmente para aquellos con movilidad limitada o que prefieren evitar el uso constante de ascensores. Además, los apartamentos en pisos bajos pueden ofrecer una sensación de seguridad y conexión más directa con el entorno circundante.

Por otro lado, la disponibilidad de apartamentos en pisos más altos puede ser más limitada, ya que estos suelen ser más demandados por otras razones además de una residencia, como vistas panorámicas, menor ruido y privacidad. Esto podría explicar por qué hay menos datos por encima del piso 5 en nuestra base de datos.

La concentración de viviendas en pisos más bajos en nuestra base de datos sugiere una preferencia generalizada por la comodidad y accesibilidad, mientras que la disponibilidad limitada de datos en pisos más altos podría reflejar una mayor demanda y selectividad por parte de los compradores.

# Crear el histograma
ggplot(viviendas_datos, aes(x=habitac)) +
  geom_histogram(binwidth=1, fill="goldenrod", color="black") +
  theme_minimal() +
  labs(x="habitaciones", y="Frecuencia", title="Distribución habitaciones") +
  theme(plot.title = element_text(hjust = 0.5))

La distribución de habitaciones en las viviendas revela que la mayoría de las propiedades tienen entre 2 y 4 habitaciones, una cantidad muy común para viviendas en los estratos que estamos analizando. Sin embargo, también observamos un número reducido de edificaciones con 0 habitaciones.

Es importante destacar que estas viviendas con 0 habitaciones son casos poco comunes y podrían corresponder a apartaestudios muy pequeños o a edificaciones que no están destinadas a ser viviendas, como locales comerciales o espacios de almacenamiento. A pesar de ser casos atípicos, conservaremos esta información en nuestros resultados finales, ya que puede proporcionar insights interesantes sobre la diversidad de propiedades en el mercado inmobiliario de la Ciudad de Cali.

# Crear el histograma
ggplot(viviendas_datos, aes(x=`Precio (m)`)) +
  geom_histogram(bins = 15, fill="#FAB273", color="black") +
  theme_minimal() +
  labs(x="Precio", y="Frecuencia", title="Distribución habitaciones") +
  theme(plot.title = element_text(hjust = 0.5))

El histograma nos proporciona una clara visualización de la distribución de precios de las viviendas en nuestra base de datos. Podemos observar que la mayoría de las viviendas tienen un precio comprendido entre 0 y 1000 millones de pesos. A medida que el precio aumenta, la cantidad de registros en nuestra base de datos disminuye, lo que indica una distribución sesgada hacia la izquierda, donde la mayoría de las viviendas se concentran en el rango de precios más bajos.

print(paste("Media de precios: ", round(mean(viviendas_datos$`Precio (m)`), 1), sep = " "))
## [1] "Media de precios:  433.9"
print(paste("Mediana de precios: ", round(median(viviendas_datos$`Precio (m)`), 1), sep = " "))
## [1] "Mediana de precios:  330"

6.2. Analisis por varias variables:

Hasta este punto, hemos examinado diversas variables de manera individual para comprender su impacto en el mercado inmobiliario. Sin embargo, para obtener una comprensión más completa y detallada, es esencial profundizar en el análisis de cómo estas variables interactúan entre sí. En esta subsección, llevaremos a cabo análisis específicos que involucran diferentes pares de variables, lo que nos permitirá identificar relaciones, tendencias y patrones que podrían pasar desapercibidos en un análisis univariable.

precio_estrato <- aggregate(`Precio (m)` ~ estrato, viviendas_datos, mean)
precio_estrato$`Precio (m)` <- round(precio_estrato$`Precio (m)`, 1)

# Crear el gráfico de barras
ggplot(precio_estrato, aes(x=estrato, y=`Precio (m)`)) +
  geom_bar(stat="identity", fill="steelblue") +
  geom_text(aes(label = `Precio (m)`), vjust = -0.3) +
  theme_minimal() +
  labs(x="Estrato", y="Precio Promedio", title="Precio Promedio por Estrato") +
  theme(plot.title = element_text(hjust = 0.5))

El análisis detallado de los precios por estrato socioeconómico revela una diferencia significativa en el precio promedio de las viviendas en Cali, lo que resalta la influencia del estrato en la valoración de las propiedades.

Estratos Medios:

Estratos Altos:

precio_zona <- aggregate(`Precio (m)` ~ zona, viviendas_datos, mean)

# Creamos el gráfico de dispersión
ggplot(precio_zona, aes(x = zona, y = `Precio (m)`)) +
  geom_point() +
  geom_line(group = 1)+
  theme_minimal() +
  labs(title = "Precio promedio por Zona") +
  theme(plot.title = element_text(hjust = 0.5))

El análisis de precios por zona revela información crucial sobre la distribución de precios de las viviendas en la Ciudad de Cali. Se observa una variación significativa en los precios promedio entre las diferentes zonas, lo que refleja las características únicas y la demanda relativa de cada área.

La Zona Oeste presenta la media de precios más elevada en comparación con las otras zonas. Esto sugiere que esta área es altamente deseada y probablemente ofrece características exclusivas, como vistas panorámicas, acceso a servicios de lujo y una infraestructura más desarrollada. Los precios más altos en esta zona pueden reflejar la alta demanda y la disponibilidad limitada de propiedades de alta calidad.

# Calculamos el área promedio por zona y estrato usando aggregate()
area_zona_estrato <- aggregate(areaconst ~ zona + estrato, viviendas_datos, mean)
area_zona_estrato$estrato <- area_zona_estrato$estrato %>% as.character()
area_zona_estrato$areaconst <- round(area_zona_estrato$areaconst, 1)

# Creamos el gráfico de barras agrupadas
ggplot(area_zona_estrato, aes(x = zona, y = areaconst, fill = estrato)) +
  geom_bar(stat = "identity", position = "dodge") +
  theme_minimal() +
  labs(x = "Zona", y = "Área Promedio", fill = "Estrato", title = "Area por Zona y Estrato") +
  theme(plot.title = element_text(hjust = 0.5))

Este gráfico nos proporciona información valiosa sobre cómo varía el área promedio de las viviendas según la zona y el estrato socioeconómico en Cali. Estas observaciones pueden ser útiles para comprender las preferencias de los compradores y las tendencias del mercado inmobiliario en diferentes áreas de la ciudad.

# Calculamos el área promedio por zona y estrato usando aggregate()
precio_tipo_estrato <- aggregate(`Precio (m)` ~ `Tipo Vivienda` + estrato, viviendas_datos, mean)
precio_tipo_estrato$estrato <- precio_tipo_estrato$estrato %>% as.character()
precio_tipo_estrato$`Precio (m)` <- round(precio_tipo_estrato$`Precio (m)`, 1)

# Creamos el gráfico de barras agrupadas
ggplot(precio_tipo_estrato, aes(x = estrato, y = `Precio (m)`, fill = `Tipo Vivienda`)) +
  geom_bar(stat = "identity", position = "dodge") +
  theme_minimal() +
  labs(x = "Estrato", y = "Precio Promedio", fill = "Tipo Vivienda", title = "Precio por Tipo y Estrato") +
  theme(plot.title = element_text(hjust = 0.5))


Es interesante destacar que, a pesar de que las viviendas tipo casa representan aproximadamente el 40% de los datos, en cada uno de los estratos presentan un precio promedio mayor en comparación con los apartamentos. Esta disparidad en los precios podría atribuirse a la naturaleza única de una casa, que ofrece una sensación de privacidad y espacio personal que puede ser muy valorada por los habitantes.

Este dato es de suma importancia ya que resalta el valor percibido de las viviendas tipo casa en el mercado inmobiliario de Cali. Aunque los apartamentos puedan representar una mayor frecuencia en los datos, las casas mantienen un precio promedio más elevado, lo que sugiere una demanda sólida y una disposición por parte de los compradores a invertir más en este tipo de vivienda.

Por lo tanto, este análisis subraya la importancia de que la empresa continúe potenciando el desarrollo y la oferta de viviendas tipo casa en su cartera de productos. Es fundamental reconocer y capitalizar la preferencia del mercado por este tipo de viviendas, así como aprovechar su potencial para generar mayores márgenes de ganancia y satisfacer las necesidades y deseos de los compradores en la Ciudad de Cali.

7. Discusión

El análisis realizado sobre el mercado inmobiliario de la Ciudad de Cali ha revelado una serie de tendencias significativas que proporcionan una comprensión del comportamiento del mercado. Se ha observado que factores como la ubicación, el estrato socioeconómico y el tipo de vivienda tienen un impacto considerable en los precios y características de las propiedades.

El estudio reveló que las zonas Oeste y Sur destacan por tener precios promedio más elevados, mientras que las zonas Centro y Oriente muestran valores más bajos. Asimismo, se encontró que el estrato socioeconómico está fuertemente relacionado con el precio y el tamaño de las viviendas, siendo los estratos más altos asociados con precios más altos y áreas más grandes.

Una observación interesante fue que, a pesar de que los apartamentos representan una mayor frecuencia en los datos, las viviendas tipo casa tienen un precio promedio mayor en todos los estratos. Esto sugiere una preferencia del mercado por la privacidad y el espacio personal que ofrecen las casas.

8. Conclusiones

En conjunto, estos hallazgos proporcionan información valiosa para agentes del sector inmobiliario, inversores y planificadores urbanos, permitiéndoles tomar decisiones estratégicas informadas para el desarrollo y crecimiento sostenible del mercado inmobiliario en la Ciudad de Cali.