Este informe se dirige a los tomadores de decisiones en la empresa Bienes y Casas (B&C) y ofrece un análisis descriptivo del mercado inmobiliario actual en Cali, Colombia. Se fundamenta en los datos recopilados por B&C, abordando los aspectos clave que influirán en la toma de decisiones estratégicas.
El contexto económico de Cali ha experimentado un notable crecimiento en el sector inmobiliario, impulsado por factores como el aumento demográfico, la inversión extranjera directa y el desarrollo de nuevos proyectos. Aunque las ventas descendieron de $6700 millones en 2022 a $6100 millones en 2023, se proyecta un futuro prometedor que contribuirá al dinamismo de la economía regional.
Conscientes de la importancia de contar con información precisa, la empresa B&C ha recopilado datos exhaustivos sobre viviendas, abordando aspectos clave como precios, ubicaciones y características. Utilizando estos datos como base, nuestro análisis se centra en proporcionar una visión detallada del mercado inmobiliario de Cali.
El propósito del informe es examinar aspectos fundamentales como la variación de precios de las viviendas en distintas áreas de Cali, los tipos de propiedades más ofertados y las características que destacan en la oferta inmobiliaria. Se anticipa que este análisis descriptivo apoyara a las partes interesadas para definir su nicho de mercado, desarrollar estrategias de marketing eficaces y fijar precios de venta competitivos, consolidando así su posición en el sector de bienes raíces.
En resumen, este informe proporciona una herramienta estratégica para los directivos y partes interesadas, ofreciendo información clave y análisis detallado para respaldar decisiones informadas en el competitivo mercado inmobiliario de Cali.
El objetivo principal de este informe es realizar un análisis descriptivo del mercado inmobiliario en Cali, Colombia. Esto con el fin de proporcionar a la empresa B&C (Bienes y Casas) una visión detallada que facilite la toma de decisiones en áreas como estrategias de marketing, fijación de precios de vivienda e identificación de nichos de mercado.
Refinar y estructurar la base de datos: Se llevará a cabo una tarea de limpieza y organización de la base de datos suministrada por B&C. Para facilitar su procesamiento efectivo en los análisis subsiguientes.
Analizar los precios de las viviendas en diferentes zonas de Cali: Se enfocará en entender las variaciones de precios entre distintas zonas de la ciudad.
Identificar los tipos de viviendas más comunes en la ciudad: Se mostrara la distribución de tipos de viviendas (apartamentos y casas) para determinar cuáles son los más frecuentes en el mercado inmobiliario de Cali.
Determinar las características relevantes de las viviendas en Cali: Se analizarán las características más comunes presentes en las viviendas en venta en Cali.
Con estos objetivos en mente, el análisis se centrará en extraer información relevante de la base de datos proporcionada por B&C, con el fin de ofrecer una visión completa y detallada del mercado inmobiliario en Cali.
En esta sección, se detallarán los métodos utilizados para el análisis estadístico de los datos de viviendas en la ciudad de Cali. Se describirán las técnicas y enfoques aplicados en la preparación de datos, el procesamiento espacial y el análisis descriptivo de variables clave.
Para preparar los datos para el análisis estadístico, se llevaron a cabo varias etapas:
Importación de datos: Se importó el conjunto de datos proporcionado por la empresa B&C, el cual incluía información detallada sobre viviendas en Cali, incluyendo características como zona, estrato, precio, área construida, etc.
Ordenamiento y Limpieza de Datos: Se realizó una exhaustiva limpieza de datos para garantizar la integridad y calidad del conjunto de datos. Esto incluyó la identificación y manejo de valores faltantes, la eliminación de registros duplicados, la corrección de errores en las coordenadas geográficas y la estandarización de variables clave.
Estandarización de Datos: Se estandarizaron variables como el tipo de vivienda para asegurar consistencia en la presentación de la información y facilitar su análisis posterior.
Imputación de Datos: Se implementaron métodos de imputación para llenar los valores faltantes en variables críticas como el número de pisos y el número de parqueaderos. Se utilizaron enfoques basados en la moda condicionada a características específicas de las viviendas, como el tipo y el número de habitaciones.
Verificación de Datos Espaciales: Se verificaron las coordenadas geográficas para garantizar que estuvieran dentro de los límites esperados para la ciudad de Cali. Se corrigieron errores en las coordenadas y se examinaron las distribuciones espaciales de los inmuebles en la ciudad.
Una vez preparados los datos, se realizaron diversos análisis estadísticos para comprender mejor las características del mercado inmobiliario en Cali:
Análisis Descriptivo: Se calcularon estadísticas descriptivas como la media, mediana, mínimo, máximo y cuartiles para variables clave como el precio, el área construida y el número de habitaciones. Esto permitió obtener una visión general de la distribución y variabilidad de estas variables en el conjunto de datos.
Análisis Espacial: Se utilizaron técnicas de análisis espacial para explorar la distribución geográfica de los precios y tipos de vivienda en Cali. Esto incluyó la generación de mapas temáticos para visualizar la concentración de precios y tipos de vivienda en diferentes áreas de la ciudad.
Comparaciones entre Grupos: Se realizaron comparaciones entre grupos, como precios por estrato socioeconómico o tipos de vivienda por zona, para identificar posibles patrones o disparidades en el mercado inmobiliario de Cali.
Estos métodos permitieron obtener insights valiosos sobre el mercado de viviendas en Cali, incluyendo tendencias de precios, preferencias de los compradores y distribución geográfica de la oferta de vivienda. Los resultados de estos análisis proporcionan una base sólida para la toma de decisiones informadas en el sector inmobiliario.
En este capítulo, se aborda el proceso fundamental de preparación de datos para el análisis estadístico de viviendas en la ciudad de Cali. Comenzando con la importación del conjunto de datos proporcionado por la empresa B&C, se detalla el proceso de exploración, limpieza y estandarización de los datos. Se abordan aspectos como la identificación y manejo de valores faltantes, la eliminación de registros duplicados, la verificación de datos espaciales y la estandarización de variables clave. Además, se describe el proceso de imputación de datos para variables con valores faltantes, asegurando así la integridad y coherencia del conjunto de datos antes de proceder con el análisis detallado. Este capítulo sienta las bases sólidas para el análisis subsiguiente, garantizando la fiabilidad y calidad de los resultados obtenidos.
Los datos utilizados en este informe fueron proporcionados por la
empresa B&C y se corresponden con el conjunto de datos denominado
vivienda_faltantes. Este dataset fue importado y se
estableció como la base principal para llevar a cabo el análisis
estadístico detallado presentado en este informe.
La base de datos consta de 13 variables y un total de 8,330 filas registradas. A continuación, se presenta una definición detallada de cada una de las 13 variables en el conjunto de datos, con el fin de facilitar una comprensión clara de su representación
id: Identificador único asignado a cada registro.
zona: Zona de la ciudad de Cali en la que se ubica el inmueble.
piso: Número del piso en el que se encuentra el apartamento o número de pisos que tiene una casa.
estrato: Estrato socioeconómico del inmueble.
preciom: Precio del inmueble expresado en millones de pesos colombianos.
areaconst: Área construida del inmueble en metros cuadrados.
parquea: Número de parqueaderos disponibles.
banios: Número de baños en el inmueble.
habitac: Número de habitaciones en el inmueble.
tipo: Tipo de vivienda.
barrio: Barrio en el que se encuentra la vivienda.
longitud: Coordenada geográfica de longitud.
latitud: Coordenada geográfica de latitud.
El proceso de ordenamiento y limpieza de datos es fundamental para garantizar la integridad y confiabilidad de cualquier análisis posterior. En esta sección, se abordan diferentes aspectos, desde la identificación de datos faltantes hasta la corrección de registros duplicados y la estandarización de variables clave. Además, se examinan datos espaciales para verificar su coherencia y se lleva a cabo la imputación de valores para garantizar la completitud del conjunto de datos. A continuación, se detallan los pasos realizados en cada etapa, destacando la importancia de cada proceso en la preparación de los datos para un análisis riguroso.
Debido a la variabilidad en la integridad de los datos, es importante
destacar que no todos los registros contienen valores para cada
variable. Por esta razón, se presenta a continuación una tabla resumida
que muestra los valores faltantes en cada columna (variable) del
dataframe vivienda_faltantes. Cada entrada de esta tabla
proporciona el nombre de la columna y la cantidad de valores faltantes
correspondientes.
De acuerdo con esta tabla, se observa que las variables
piso y parquea presentan una cantidad
significativa de datos faltantes, con 2,641 y 1,606 valores ausentes,
respectivamente. Además, se evidencia que la mayoría de las demás
variables presentan al menos dos registros sin información
correspondiente.
Para obtener una mejor visión de los datos faltantes, se ha generado
un gráfico que muestra la distribución de valores ausentes en el
conjunto de datos viviendas_faltantes. En este gráfico, la
parte izquierda ilustra la proporción de datos faltantes para cada
variable, mientras que en la parte derecha se observan las filas
inferiores, representadas en azul, que indican registros completos sin
datos faltantes. Las filas resaltadas con cuadrados rojos señalan las
combinaciones de variables con datos faltantes. Este enfoque proporciona
una representación visual clara de la presencia de datos faltantes en el
conjunto de datos.
Estas gráficas revelan que la proporción de datos faltantes en las
variables piso y parquea es significativa y no
pueden ser ignorados sin más. Es imperativo realizar una imputación de
datos para estas variables a fin de evitar pérdida de información y
asegurar la integridad del análisis.
En una primera instancia, se eliminaron aquellos registros que carecían de información en al menos dos variables, lo que resultó en la eliminación de 3 registros, quedandonos un total de 8327 filas (registros).
# Eliminar registros que no tengan por lo menos 2 variables con algun valor
dvf_sin_filas_vacias <- vivienda_faltantes[rowSums(!is.na(vivienda_faltantes)) >= 2, , drop = FALSE]Posteriormente, se identificaron y examinaron posibles registros duplicados. Tras esta evaluación, se eliminaron un total de 16 registros duplicados, dejando un conjunto de datos final con 8319 registros.La tabla siguiente presenta los 16 registros duplicados.
# Identificar y visualizar filas duplicadas
duplicados_filas <- dvf_sin_filas_vacias[duplicated(dvf_sin_filas_vacias) | duplicated(dvf_sin_filas_vacias, fromLast = TRUE), ]
duplicados_filasPara concluir la verificación de duplicados, se aseguró de que la
variable id tuviera un valor único para cada uno de los
registros.
## [1] FALSE
El resultado FALSE indica que todos los valores de
id son únicos, confirmando así la ausencia de registros
duplicados. Con esta fase completada, la base de datos está lista para
continuar con los siguientes procesos de verificación e imputación de
datos.
Para Cali, la capital del departamento del Valle del Cauca en Colombia, se observa que las coordenadas geográficas generalmente se encuentran dentro del siguiente rango:
Estos valores definen el área geográfica específica de Cali. La longitud negativa indica su ubicación en el hemisferio oeste, mientras que la latitud positiva señala su posición en el hemisferio norte.
Se ha detectado que algunos datos se encuentran fuera de los límites establecidos en este rango. Tras revisar los datos, se observan errores en los decimales al momento de ingresar las coordenadas. Por consiguiente, se llevará a cabo la corrección de estos datos con el fin de garantizar la precisión de la información geográfica.
Se implementaron dos funciones para corregir los decimales, una destinada a la latitud y otra a la longitud.
El problema con los valores de la latitud radica en que, en algunos casos, el valor decimal no se ingresó correctamente. Por ejemplo, en lugar de 3.4, se ingresó 3400. Para abordar esta situación, se diseñó una función que verifica si el valor es mayor a 3.5. En caso afirmativo, la función divide la latitud por diez veces el número de caracteres de ese valor menos uno, asegurando que el resultado tenga un solo dígito en su parte entera. Posteriormente, esta función se aplicó a la columna de latitud para corregir los valores correspondientes.
# Función para corregir latitud
corregir_latitud <- function(latitud) {
ifelse(latitud > 3.5, latitud / (10^(nchar(as.character(latitud))-1)), latitud)
}
df <- dvf_sin_duplicados # Se crea nuevo dataset para volver a version anterior en caso de error
# Aplicar la función a la columna 'latitud'
df$latitud <- corregir_latitud(df$latitud)Para la variable de longitud, se siguió un proceso similar. Si los valores eran menores a -76.7, se dividían por diez veces el número de caracteres menos tres. Esto se debe a que se necesitan dos dígitos antes del punto y el signo negativo se considera como un carácter en la operación. Luego, se aplicó esta función y se corrigió la columna de longitud.
# Función para corregir longitud
corregir_longitud <- function(longitud) {
ifelse(longitud < -76.7, longitud / (10^(nchar(as.character(longitud))-3)), longitud)
}
df2 <- df # Se crea un nuevo dataset
# Aplicar la función a la columna 'longitud'
df2$longitud <- corregir_longitud(df2$longitud)Después de corregir las coordenadas, podemos explorar la distribución
espacial de estos inmuebles y analizar nuestra otra variable espacial,
la zona. Para lograr esto, vamos a generar un mapa que
ilustre la distribución espacial de los registros según la zona:
# Combina las coordenadas en un objeto sf
dvf_sf <- st_as_sf(df2, coords = c("longitud", "latitud"), crs = 4326)
# Crea un mapa con ggplot2
ggplot() +
geom_sf(data = cali, fill = "white", color = "black") + geom_sf(data = dvf_sf, aes(color = zona)) +
ggtitle("Distribución Espacial por Zona")+
theme_minimal()Observamos que todos los puntos están dentro del área metropolitana de Cali, lo que confirma que todos los registros se encuentran dentro de la ciudad. Sin embargo, al examinar las zonas, notamos que hay algunos puntos que están ubicados en áreas que no les corresponden según su zona designada. Por ejemplo, hay puntos rosados de la zona sur en la parte norte del mapa. Esta discrepancia sugiere que la variable de zona puede no ser completamente confiable. Para corregir esto, sería necesario contar con polígonos que delimiten las diferentes zonas de Cali, y luego crear una nueva variable basada en la intersección de las coordenadas y estos polígonos. Sin embargo, para los propósitos de este estudio y dado que la mayoría de las zonas están bien distribuidas, dejaremos esta corrección para un posible estudio futuro más detallado.
Inicialmente, se observa que el campo tipo no está
estandarizado, a pesar de que debería tener solo dos posibles valores:
“apartamento” y “casa”. Sin embargo, al inspeccionar los datos, se
detectan más de dos valores como se muestra a continuación:
## [1] "Apartamento" "Casa" "APARTAMENTO" "casa" "CASA"
## [6] "apto"
Debido a la importancia de esta variable en el estudio, se procede a su estandarización:
# Convertir todos los valores a minúsculas
df2$tipo <- tolower(df2$tipo)
# Reemplazar valores incorrectos
df2$tipo[df2$tipo %in% c("apto")] <- "apartamento"
#Imprimir valores estandarizados
print (unique(df2$tipo))## [1] "apartamento" "casa"
Posteriormente, durante la revisión de los datos, se observa que existen inmuebles cuyas características no concuerdan con el tipo de inmueble reportado, como el registro con el ID 886. Este registro indica que es una casa con 10 pisos y un área construida de apenas 60 metros cuadrados, lo cual parece ser un error de ingreso de datos.Para abordar estas inconsistencias, se aplica una regla de corrección: un inmueble catalogado como “casa” no puede tener más de 5 pisos y debe tener un área construida mínima de 25 metros cuadrados por piso. En consecuencia, los registros que no cumplan la condición se reasignaran como “apartamento”.
banios y habitacSe consideró que cualquier tipo de inmueble debe tener al menos una habitación y un baño. Sin embargo, se detectó que existen valores en estas variables que reportan un valor igual a cero, lo cual no tiene sentido.
num_zerosb <- sum(df2$banios == 0, na.rm = TRUE)
num_zerosh <- sum(df2$habitac == 0, na.rm = TRUE)
cat(num_zerosb, num_zerosh)## 46 67
Se detectaron 46 registros con valor cero en la variable
banios y 67 en la variable habitac. Dado que
estas ocurrencias representan una pequeña proporción con respecto al
total de 8319 registros, se optó por un reemplazo directo, sustituyendo
estos ceros (0) por el valor uno (1).
Al analizar la información de datos faltantes, se observa que las
variables piso y parquea presentan una alta
proporción de datos ausentes. Eliminar estos registros podría resultar
en una pérdida significativa de información. Por lo tanto, se opta por
realizar la imputación de datos para estas dos variables. Inicialmente,
se consideró utilizar la variable zona para ayudar en la
imputación, pero debido a la variabilidad en las configuraciones de
edificios y casas dentro de las zonas, así como la falta de
confiabilidad en esta variable, se descarta esta opción.
pisoLos inmuebles que comparten características similares, como el tipo de vivienda y el número de habitaciones, suelen tener atributos estructurales parecidos, como el número de pisos. En una misma ciudad, es común encontrar patrones arquitectónicos y de construcción recurrentes en diferentes áreas. Por ejemplo, es probable que las casas con un número determinado de habitaciones presenten un número de pisos similar debido a consideraciones de diseño y necesidades de espacio habitable.
Por ende, al calcular la moda de los pisos para un tipo de vivienda específico y un número de habitaciones dado, aprovechamos la información disponible para hacer una estimación razonable del número de pisos que podría tener una casa o el piso en el que podría estar ubicado un apartamento con esas características. Esta aproximación es válida cuando no se dispone de información detallada sobre cada propiedad y proporciona un método sistemático para imputar datos faltantes basándose en patrones observados en el conjunto de datos.
Se procedio a imputar la variable piso, usando la moda
segun el tipo de vivienda y el número de habitaciones
(habitac).
df2 <- df2 %>%
group_by(tipo, habitac) %>% # Agrupa el dataframe por las variables tipo y habitac
mutate(piso = ifelse(is.na(piso), as.numeric(names(which.max(table(piso)))), piso)) %>% #Se verifica si el valor de piso es NA, se calcula e imputa la moda.
ungroup() # Cancela el agrupamiento realizado previamente.Una vez imputados los valores de la variable piso, se verificó que no hubiera ningún valor faltante.
faltantes <- colSums(is.na(df2)) %>%
as.data.frame() # se revisa si quedaron datos sin imputar
faltantesSin embargo, hubo un registro que no se imputó exitosamente debido a que su combinación de tipo y número de habitaciones es única. Para este caso particular, se imputará utilizando el valor de la moda, pero teniendo en cuenta únicamente la variable tipo “apartamento”.
# Filtrar solo los registros de tipo "apartamento"
df2_apartamento <- df2[df2$tipo == "apartamento", ]
# Calcular la moda de los pisos para el tipo "apartamento"
moda_apartamento <- as.numeric(names(which.max(table(df2_apartamento$piso))))
#moda_apartamento #La moda es igual a 3, no es relevante que se vea en pantalla
# Encuentra el índice del registro único de tipo "apartamento" con piso faltante
indice_registro <- which(df2$tipo == "apartamento" & is.na(df2$piso))
# Imputa la moda calculada en el registro único
df2$piso[indice_registro] <- ifelse(length(indice_registro) > 0, moda_apartamento, df2$piso[indice_registro])
faltantes <- colSums(is.na(df2)) %>%
as.data.frame()
#faltantes #se verifica la imputación.Finalmente, se verificó la imputación de la variable
piso y se corroboró que esta fue completada para todos los
registros.
parqueaSiguiendo el mismo razonamiento aplicado a la variable “piso”, podemos extender este análisis al número de parqueaderos. Es probable que propiedades con características similares, como tipo de vivienda y número de habitaciones, compartan también un número de parqueaderos similar.
Por lo tanto, al igual que hicimos con la variablepiso,
podemos utilizar la moda considerando los tipos de vivienda y el número
de habitaciones para imputar los datos faltantes en la variable
parquea.
df2 <- df2 %>%
group_by(tipo, habitac) %>%
mutate(parquea = ifelse(is.na(parquea), as.numeric(names(which.max(table(parquea)))), parquea)) %>%
ungroup()
faltantes <- colSums(is.na(df2)) %>%
as.data.frame()
#faltantes #se verifica la imputación.Se verificó y se realizó la imputación de la variable
parquea en todos los registros del conjunto de datos.
La sección de resultados presenta un análisis del mercado inmobiliario en Cali, abordando aspectos que van desde los precios de las viviendas hasta las preferencias de los compradores en términos de tipo, tamaño y ubicación de las propiedades. A través de herramientas visuales y estadísticas, se revelan las tendencias más relevantes, brindando una comprensión detallada para comprender la dinámica del sector en esta importante ciudad colombiana.
La variable de precio muestra un amplio rango, desde 58 millones hasta 1999 millones, con una mediana de 330 millones y una media de 433.9 millones.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 58.0 220.0 330.0 433.9 540.0 1999.0
Para analizar los precios, se ha comenzado con un histograma que muestra la distribución de precios, seguido de un diagrama de cajas que representa la distribución de los precios por estrato. Además, se analiza la dispersión de los precios en función del área construida y el número de habitaciones por estrato. Posteriormente, se profundiza en el análisis espacial de la variable precio, uno de los objetivos específicos de este informe.
# Histograma de Precios
ggplot(df2, aes(x = preciom)) +
geom_histogram(binwidth = 20, fill = "#41B7C4", color = "black") +
labs(title = "Distribución de Precios de Viviendas",
x = "Precio (en millones de COP)",
y = "Frecuencia")Este histograma de precios permite observar que la mayoría de los inmuebles tienen precios concentrados por debajo de los 540 millones, el tercer cuartil.
# Boxplot de Estratos
ggplot(df2, aes(x = factor(estrato), y = preciom, fill = factor(estrato))) +
geom_boxplot() +
labs(title = "Distribución de Precios por Estrato",
x = "Estrato Socioeconómico",
y = "Precio (en millones de COP)") +
theme_minimal()En cuanto a los precios según el estrato, el boxplot muestra que a medida que aumenta el estrato, también lo hace el precio de la vivienda. Se observa que la variabilidad en los precios del estrato 6 es considerablemente más alta, como se refleja en el tamaño de su caja.
# Gráfico de Dispersión Precio vs Área Construida
ggplot(df2, aes(x = areaconst, y = preciom)) +
geom_point(aes(color = factor(estrato))) + geom_smooth(aes(color = factor(estrato), group = factor(estrato)), method= "lm", se=FALSE)+
labs(title = "Relación entre Precio y Área Construida",
x = "Área Construida (m²)",
y = "Precio (en millones de COP)") +
theme_minimal()+
ylim(0, 2300)Este gráfico de dispersión muestra que a medida que aumenta el tamaño en metros cuadrados, también lo hace el precio, lo cual es esperado y puede ser observado en las líneas de tendencia. Un aspecto destacable es la proximidad de los valores de los estratos 4 y 5 tanto en precio como en área.
# Diagrama de Dispersión Precio vs Número de Habitaciones
ggplot(df2, aes(x = factor(habitac), y = preciom)) +
geom_point(aes(color = factor(estrato))) +
labs(title = "Relación entre Precio y Número de Habitaciones",
x = "Número de Habitaciones",
y = "Precio (en millones de COP)") +
theme_minimal()Este gráfico que muestra la relación entre el precio y el número de habitaciones permite observar que la mayoría de los inmuebles tienen entre 3 y 5 habitaciones, donde también se concentra la mayor variabilidad de precios. Además, al incluir los estratos, se puede notar cómo el precio tiende a aumentar con el estrato.
Entre los objetivos especificos se encuentra explorar las variaciones de precios entre distintas áreas de la ciudad, así como de identificar las zonas con mayor oferta y las diferencias de precios más notables.
Para analizar la variable de precio de cada inmueble
(preciom), de manera espacial, se inició con un gráfico de
cajas y bigotes que muestra la distribución de precios en las diferentes
zonas de Cali. Posteriormente, se elaboró otro gráfico para examinar
cómo varían los precios según el tipo de vivienda. Por último, se
incluyó un mapa que ilustra la distribución espacial de los inmuebles en
la ciudad.
# Gráfico de cajas (Boxplot)
ggplot(df2, aes(x = zona, y = preciom, fill = zona)) +
geom_boxplot() +
labs(title = "Distribución del Precio de las Viviendas en Diferentes Zonas de Cali",
x = "",
y = "Precio por Inmueble en millones de COP")El gráfico muestra que la zona oeste tiene precios más altos, mientras que la zona oriente tiene precios más bajos. En la zona oeste, los precios varían más ampliamente, indicando una mayor diversidad de valores de propiedad. Por otro lado, en la zona oriente, los precios están más concentrados en un rango específico. Estas diferencias pueden deberse a factores como la demanda de vivienda, la ubicación y las características del vecindario.
ggplot(df2, aes(x = zona, y = preciom, fill = tipo)) +
geom_boxplot(position = position_dodge(0.8), width = 0.7) +
labs(title = "Distribución del Precio de las Viviendas Segun el Tipo de Vivienda",
x = "",
y = "Precio por Inmueble en millones de COP",
fill = "Tipo de Vivienda") Al analizar el gráfico, se destaca que los precios de las casas tienden a ser mayores que los de los apartamentos en todas las zonas. Además, en las zonas centro, oriente y sur, se observa una mayor variabilidad en los precios de las casas en comparación con los apartamentos. Estas diferencias en la distribución de precios según el tipo de vivienda y la ubicación geográfica pueden proporcionar insights importantes sobre las preferencias del mercado y las dinámicas locales del sector.
# Combina las coordenadas en un objeto sf
dvf_sf <- st_as_sf(df2, coords = c("longitud", "latitud"), crs = 4326)
# Crea un mapa con ggplot2
ggplot() +
geom_sf(data = cali, fill = "white", color = "black") + geom_sf(data = dvf_sf, aes(color = preciom)) +
scale_color_gradient(low = "#41B7C4", high = "black") +
ggtitle("Mapa de Puntos: Precio por Inmueble")+
theme_minimal()En el mapa, se destacan áreas más oscuras que indican precios más altos de viviendas, principalmente concentrados en el sur y oeste de Cali.
Con el objetivo de profundizar en el análisis espacial de los precios en Cali, se decidió incorporar la variable de precio por metro cuadrado, una medida relevante para los compradores. Para ello, se calculó el precio por metro cuadrado y se agregó esta nueva columna al conjunto de datos.
# Calcula el precio por metro cuadrado y agrega una nueva columna
df2$precio_m2 <- df2$preciom / df2$areaconstSe utilizaron estos datos para crear diagramas de cajas y bigotes, así como un mapa de distribución de precios, teniendo en cuenta esta vez el precio por metro cuadrado.
# Gráfico de cajas (Boxplot)
ggplot(df2, aes(x = zona, y = precio_m2, fill = zona)) +
geom_boxplot() +
labs(title = "Distribución del Precio por Metro Cuadrado en Diferentes Zonas de Cali",
x = "",
y = "Precio por m2 en Millones de COP")La zona oeste continúa mostrando los precios más altos, mientras que la zona oriente exhibe los precios más bajos. Sin embargo, al analizar la variable del precio por metro cuadrado, se observa que el tamaño de las cajas no varía tanto en comparación con el análisis del precio total del inmueble. Esto sugiere que la variabilidad disminuye al considerar el área de los inmuebles.
ggplot(df2, aes(x = zona, y = precio_m2, fill = tipo)) +
geom_boxplot(position = position_dodge(0.8), width = 0.7) +
labs(title = "Distribución del Precio por Metro Cuadrado en Diferentes Zonas de Cali",
x = "",
y = "Precio por m2 en millones de COP",
fill = "Tipo de Vivienda") En este gráfico se observa un cambio notable al considerar el precio por metro cuadrado. Al hacer esta comparación, se destaca que los apartamentos son más costosos que las casas, lo cual contrasta con lo observado al analizar el precio sin tener en cuenta el área del inmueble.
# Combina las coordenadas en un objeto sf
dvf_sf <- st_as_sf(df2, coords = c("longitud", "latitud"), crs = 4326)
# Crea un mapa con ggplot2
ggplot() +
geom_sf(data = cali, fill = "white", color = "black") + geom_sf(data = dvf_sf, aes(color = precio_m2)) +
scale_color_gradient(low = "#41B7C4", high = "black") +
ggtitle("Mapa de Puntos: Precio m2 por inmueble")+
theme_minimal()Al igual que en el mapa que únicamente considera el precio del inmueble sin tener en cuenta las áreas, se observa una concentración de precios más elevados en el sur y oeste de Cali. Sin embargo, esta disparidad de precios parece ser menos pronunciada considerando el precio por metro cuadrado.
En esta sección se analizan los tipos de vivienda más comunes en la ciudad de Cali y en sus distintas zonas. Para iniciar, se llevó a cabo un recuento de los diferentes tipos de vivienda presentes en la base de datos.
conteo_tipos <- table(df2$tipo)
cantidad_casas <- conteo_tipos["casa"]
cantidad_apartamento <- conteo_tipos["apartamento"]
cat( cantidad_casas, cantidad_apartamento)## 3214 5105
Este recuento revela que en la base de datos hay 3214 registros correspondientes al tipo “casa” y 5105 registros correspondientes al tipo “apartamento”. Estos datos se presentan visualmente en el siguiente gráfico circular, donde se muestran los porcentajes correspondientes a cada tipo de vivienda.
ggplot(df2, aes(x = factor(1), fill = tipo)) +
geom_bar(width = 1) +
coord_polar(theta = "y") +
theme_void() +
labs(title = "Distribución de tipos de vivienda") +
geom_text(aes(label = sprintf("%.1f%%", after_stat(count)/sum(after_stat(count)) * 100)),
stat = "count", position = position_stack(vjust = 0.5))Aquí queda claro que en toda Cali la oferta de apartamentos es mayor que la de casas.
Ahora, exploraremos la distribución de los tipos de vivienda por zona, estrato y número de pisos, mediante dos gráficos de barras. Además, examinaremos la distribución espacial de estos tipos de vivienda a través de un mapa.
ggplot(df2, aes(x = zona, fill = tipo)) +
geom_bar(position = "dodge", stat = "count") +
labs(title = "Cantidad de tipos de vivienda por zona",
x = "", y = "Cantidad") En este gráfico, se observa que la oferta de casas es mayor en la zona centro y la zona oriente, mientras que en las otras zonas predomina la oferta de apartamentos. Además, se destaca que la mayoría de los inmuebles ofertados se concentran principalmente en la zona sur de la ciudad, y por el contrario, la zona centro es la que presenta la menor cantidad de inmuebles.
ggplot(df2, aes(x = estrato, fill = tipo)) +
geom_bar(position = "dodge", stat = "count") +
labs(title = "Cantidad de tipos de vivienda por estrato",
x = "Estrato", y = "Cantidad")En cuanto al estrato, se destaca que el estrato 3 muestra una oferta mayoritaria de casas, mientras que en los demás estratos predominan los apartamentos. Es notable que la mayoría de la oferta de inmuebles se encuentra en el estrato 5, seguido por el estrato 4. Sin embargo, llama la atención que el estrato 3 tenga la menor oferta de inmuebles. Además, se evidencia que no hay registros de estratos inferiores al 3 en esta base de datos, lo que sugiere un enfoque definido hacia un segmento específico al momento de la recolección de datos.
ggplot(df2, aes(x = factor(piso), fill = tipo)) +
geom_bar(position = "dodge", stat = "count") +
labs(title = "Cantidad de tipos de vivienda por número de pisos",
x = "Pisos", y = "Cantidad")Este gráfico es valioso ya que ofrece una visión clara de la distribución de las propiedades en Cali. Destaca que la mayoría de las casas disponibles tienen dos pisos, mientras que la mayor oferta de apartamentos se concentra en los niveles superiores, particularmente en el tercer piso.
dvf_sf <- st_as_sf(df2, coords = c("longitud", "latitud"), crs = 4326)
# Crea un mapa con ggplot2 usando "tipo de vivienda"
ggplot() +
geom_sf(data = cali, fill = "white", color = "black") +
geom_sf(data = dvf_sf, aes(color = tipo)) +
ggtitle("Distribución Espacial por Tipo de Vivienda") +
theme_minimal()Finalmente, en el mapa se observa una concentración significativa de la oferta de apartamentos en la parte oeste de la ciudad, seguida por la zona norte. Por otro lado, las casas muestran una concentración mayor en el centro y la zona sur de la ciudad.
En esta sección se dará visibilidad a las caracteristicas relevantes de los inmuebles en Cali, como tamaño, número de habitaciones, número de parqueaderos, número de baños, para comprender mejor las preferencias del mercado.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 30.0 80.0 123.0 174.9 229.0 1745.0
Se observa que el tamaño de los inmuebles varía entre 30 y 1745 metros cuadrados, con una mediana de 123 metros cuadrados y una media de 174.9 metros cuadrados. El siguiente histograma ilustra la distribución del tamaño de los inmuebles.
# Histograma de las áreas en metros cuadrados
ggplot(data = df2, aes(x = areaconst)) +
geom_histogram(binwidth = 80, fill = "#41B7C4", color = "black") +
labs(title = "Distribución de áreas en metros cuadrados",
x = "Área en metros cuadrados",
y = "Frecuencia") +
theme_minimal()El gráfico revela una concentración notable de áreas entre los valores de 80 y 240 metros cuadrados, lo cual coincide con el primer cuartil de 80 y el tercer cuartil de 229.
# Gráfico de Barras para Habitaciones
ggplot(df2, aes(x = factor(habitac))) +
geom_bar(fill = "#41B7C4", color = "black") +
labs(title = "Distribución de Viviendas por número de habitaciones",
x = "Habitaciones",
y = "Cantidad") +
theme_minimal()Aquí, observamos que más de 4000 registros corresponden a viviendas con 3 habitaciones, lo que sugiere que esta es una de las características más frecuentes entre los inmuebles analizados.
# Gráfico de Barras para Baños
ggplot(df2, aes(x = factor(banios))) +
geom_bar(fill = "#41B7C4", color = "black") +
labs(title = "Distribución de Viviendas por número de Baños",
x = "Baños",
y = "Cantidad") +
theme_minimal()En cuanto a los baños, es notable que la mayoría de las viviendas ofertadas cuentan con dos de ellos.
# Gráfico de Barras para Parqueaderos Disponibles
ggplot(df2, aes(x = factor(parquea))) +
geom_bar(fill = "#41B7C4", color = "black") +
labs(title = "Distribución de Viviendas por Número de Parqueaderos",
x = "Número de Parqueaderos",
y = "Cantidad") +
theme_minimal()Finalmente, este gráfico de barras indica que la gran mayoría de las viviendas cuentan con al menos un parqueadero.
Estos hallazgos ofrecen una visión integral del mercado inmobiliario en Cali y proporcionan información valiosa para inversionistaslos tomadores de decisiones.
Esta sección resalta la variabilidad de precios de las viviendas en Cali, reflejo de su diversidad socioeconómica. Se enfatiza la importancia del contexto social en el mercado inmobiliario, así como la influencia del tamaño y número de habitaciones en los precios. Además, se subraya la relevancia de la ubicación y el tipo de vivienda en la valoración de la propiedad. En términos empresariales, se sugiere la segmentación de mercado, la identificación de oportunidades de expansión y una mejora continua basada en el análisis del mercado.
Variabilidad de Precios: La amplia variabilidad de precios en el mercado inmobiliario de Cali refleja la diversidad de oferta y demanda en diferentes segmentos socioeconómicos de la ciudad. Esta variabilidad puede influir en las estrategias de fijación de precios y segmentación de mercado para empresas como B&C.
Relación con el Estrato: La relación directa entre el estrato socioeconómico y el precio de la vivienda resalta la importancia de considerar el contexto socioeconómico al analizar el mercado inmobiliario. Esta relación puede guiar decisiones relacionadas con la segmentación de mercado y la definición de estrategias de marketing.
Impacto del Tamaño y Número de Habitaciones: La relación entre el tamaño de la vivienda y su precio, así como el aumento del precio con el número de habitaciones, sugiere la influencia de factores como el espacio y la comodidad en las preferencias de los compradores. Estos hallazgos pueden informar decisiones de diseño y desarrollo de nuevos proyectos inmobiliarios.
Distribución Geográfica de Precios: La variación en los precios por zona destaca la importancia de la ubicación como factor determinante en la valoración de la vivienda. Esta información puede ser útil para identificar oportunidades de inversión y áreas de enfoque para la expansión de operaciones inmobiliarias.
Diferencias entre Tipos de Vivienda: Las disparidades en la distribución espacial de los precios según el tipo de vivienda revelan patrones de demanda y preferencias de los compradores en diferentes áreas de la ciudad. Estos insights pueden guiar decisiones de desarrollo y comercialización de proyectos inmobiliarios.
Segmentación de Mercado: El análisis detallado de los precios y características de las viviendas permite identificar segmentos de mercado específicos y adaptar las estrategias de marketing y fijación de precios para satisfacer las necesidades y preferencias de estos segmentos.
Identificación de Oportunidades: Los patrones identificados en la distribución geográfica y tipológica de la oferta de vivienda pueden revelar oportunidades para la expansión de la empresa en áreas específicas de la ciudad o para la diversificación de su cartera de productos.
Mejora Continua: La comprensión profunda del mercado inmobiliario de Cali proporcionada por este análisis puede servir como base para la mejora continua de las operaciones y la toma de decisiones de B&C, permitiendo una adaptación ágil a las dinámicas cambiantes del mercado.
El análisis descriptivo del mercado inmobiliario en Cali, Colombia, realizado en este informe ha arrojado importantes conclusiones que pueden guiar las decisiones estratégicas de la empresa B&C (Bienes y Casas). A continuación, se presentan las principales conclusiones derivadas de los objetivos específicos establecidos:
Refinamiento y Estructuración de la Base de Datos: La tarea de limpieza y organización de la base de datos proporcionada por B&C ha sido fundamental para garantizar la calidad y coherencia de los datos. Esto ha sentado las bases para un análisis preciso y fiable del mercado inmobiliario en Cali.
Análisis de Precios en Distintas Zonas de Cali: Se ha observado una variación significativa en los precios de las viviendas entre las diferentes zonas de la ciudad. Las áreas del sur y oeste de Cali muestran precios más altos, mientras que las zonas del centro y oriente presentan precios más bajos. Esta información es crucial para la fijación de precios y la segmentación del mercado.
Identificación de Tipos de Viviendas Más Comunes: A través del análisis de la base de datos, se ha determinado que los apartamentos son los tipos de vivienda más comunes en Cali, seguidos por las casas. Esta tendencia refleja las preferencias del mercado y proporciona información valiosa para el desarrollo de estrategias de comercialización dirigidas.
Características Relevantes de las Viviendas en Cali: Se han identificado las características más relevantes de las viviendas en venta en Cali, como el tamaño, el número de habitaciones y la disponibilidad de parqueaderos. Estos atributos son cruciales para comprender las necesidades y preferencias de los compradores, lo que permite a B&C adaptar su oferta a las demandas del mercado.
En resumen, el análisis detallado llevado a cabo en este informe proporciona a B&C una visión amplia del mercado inmobiliario en Cali. Esta información es fundamental para tomar decisiones informadas y desarrollar estrategias efectivas que impulsen el éxito y el crecimiento de la empresa en el competitivo sector inmobiliario de la ciudad.
Tomado de https://data.amerigeoss.org/dataset/capa-de-barrios-y-sectores-geograficos-de-santiago-de-cali
## R version 4.3.2 (2023-10-31 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 11 x64 (build 22621)
##
## Matrix products: default
##
##
## locale:
## [1] LC_COLLATE=English_World.utf8 LC_CTYPE=English_World.utf8
## [3] LC_MONETARY=English_World.utf8 LC_NUMERIC=C
## [5] LC_TIME=English_World.utf8
##
## time zone: America/Bogota
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] paqueteMETODOS_0.1.0 dplyr_1.1.4 rapportools_1.1
## [4] randtests_1.0.1 summarytools_1.0.1 MASS_7.3-60
## [7] lmtest_0.9-40 zoo_1.8-12 flextable_0.9.4
## [10] cubature_2.1.0 sf_1.0-15 ggplot2_3.4.4
## [13] psych_2.4.1
##
## loaded via a namespace (and not attached):
## [1] DBI_1.2.1 mnormt_2.1.1 tcltk_4.3.2
## [4] rlang_1.1.3 magrittr_2.0.3 matrixStats_1.2.0
## [7] e1071_1.7-14 compiler_4.3.2 mgcv_1.9-0
## [10] systemfonts_1.0.5 vctrs_0.6.5 reshape2_1.4.4
## [13] stringr_1.5.1 httpcode_0.3.0 pkgconfig_2.0.3
## [16] crayon_1.5.2 fastmap_1.1.1 backports_1.4.1
## [19] magick_2.8.2 ellipsis_0.3.2 labeling_0.4.3
## [22] pander_0.6.5 utf8_1.2.4 promises_1.2.1
## [25] rmarkdown_2.25 ragg_1.2.7 purrr_1.0.2
## [28] xfun_0.41 cachem_1.0.8 jsonlite_1.8.8
## [31] highr_0.10 later_1.3.2 uuid_1.2-0
## [34] pryr_0.1.6 parallel_4.3.2 R6_2.5.1
## [37] vcd_1.4-12 bslib_0.6.1 stringi_1.8.3
## [40] ranger_0.16.0 car_3.1-2 boot_1.3-28.1
## [43] lubridate_1.9.3 jquerylib_0.1.4 Rcpp_1.0.12
## [46] knitr_1.45 base64enc_0.1-3 splines_4.3.2
## [49] Matrix_1.6-1.1 httpuv_1.6.13 nnet_7.3-19
## [52] timechange_0.3.0 tidyselect_1.2.0 rstudioapi_0.15.0
## [55] abind_1.4-5 yaml_2.3.8 codetools_0.2-19
## [58] curl_5.2.0 lattice_0.21-9 tibble_3.2.1
## [61] plyr_1.8.9 shiny_1.8.0 withr_3.0.0
## [64] askpass_1.2.0 evaluate_0.23 units_0.8-5
## [67] proxy_0.4-27 zip_2.3.0 xml2_1.3.6
## [70] pillar_1.9.0 carData_3.0-5 KernSmooth_2.23-22
## [73] checkmate_2.3.1 VIM_6.2.2 generics_0.1.3
## [76] sp_2.1-3 munsell_0.5.0 scales_1.3.0
## [79] laeken_0.5.3 xtable_1.8-4 class_7.3-22
## [82] glue_1.7.0 gdtools_0.3.5 tools_4.3.2
## [85] gfonts_0.2.0 robustbase_0.99-2 data.table_1.14.10
## [88] grid_4.3.2 tidyr_1.3.0 colorspace_2.1-0
## [91] nlme_3.1-163 cli_3.6.2 textshaping_0.3.7
## [94] officer_0.6.3 fontBitstreamVera_0.1.1 fansi_1.0.6
## [97] gtable_0.3.4 DEoptimR_1.1-3 sass_0.4.8
## [100] digest_0.6.34 fontquiver_0.2.1 classInt_0.4-10
## [103] crul_1.4.0 farver_2.1.1 htmltools_0.5.7
## [106] lifecycle_1.0.4 mime_0.12 fontLiberation_0.1.0
## [109] openssl_2.1.1