La ciudad de Cali, capital del Valle de Cauca, goza de ser uno de los principales centros económicos del país, hasta el último registro del Indicador de Importancia Económica Municipal, la ciudad representaba cerca de la mitad del valor agregado del departamento; un 46.2 % ($32.558.638.363), siendo a nivel departamental la tercera economía más importante del país con un peso del 9.6% para 2022. Cali no solo destaca por sus cifras económicas, sino que también se distingue por su riqueza cultural, lo cual agrega un atractivo adicional a la ciudad. La dinámica red empresarial de Cali impulsa la innovación, contribuyendo así a un comercio sólido y robusto. Estos elementos convergen para consolidar a Cali como una ciudad versátil y competente en diversos aspectos, lo que le permite no solo competir a nivel nacional, sino también posicionarse en el escenario internacional. En este contexto, la focalización o diversificación del mercado inmobiliario emerge como una consideración esencial para las empresas inmersas en este sector. El propósito fundamental de este informe es investigar la dirección hacia la cual se concentra y debería dirigirse este mercado, proporcionando así una perspectiva integral para las decisiones estratégicas en el ámbito inmobiliario.
Analizar exhaustivamente la composición del mercado de bienes inmuebles en la ciudad, desglosando detalladamente su estructura y precios asociados.
Investigar y clasificar la tipología de viviendas presente en el mercado, centrándose en sus características particulares y valores asociados.
Evaluar el nivel de equipamiento de las viviendas en la ciudad, abordando aspectos relevantes que influyan en su valor y atractivo para los potenciales compradores.
Examinar la distribución espacial de las viviendas en el área urbana, con el objetivo de identificar patrones de concentración basados en la variabilidad de los precios.
Proporcionar un análisis detallado de la relación entre las características estructurales de las viviendas, sus precios y la distribución espacial, con el fin de ofrecer una comprensión integral del mercado inmobiliario en la ciudad.
Descripción general: La base de datos analizada consta de 8330 observaciones representando componentes únicos identificados por un ID en un contexto de datos de sección cruzada. Inicialmente compuesta por 13 variables, se incorporan tres variables adicional para estimar el precio de la vivienda en millones. La descripción aborda las características de los vectores, proporcionando ejemplos ilustrativos. Un análisis detallado revela la frecuencia y tipología variable, así como la cantidad de valores perdidos en cada variable, facilitando la evaluación de la integridad de los datos.
homogeneización de los vectores: La normalización de los vectores característicos se lleva a cabo mediante la transformación uniforme de todas las palabras a mayúsculas o minúsculas en una única composición. Simultáneamente, se procede a la eliminación de acentos diacríticos presentes en la lengua española, buscando establecer una representación coherente y homogénea de los datos.
Inmuebles duplicados: La imperativa necesidad de disponer de información única se fundamenta en la singularidad de cada observación, aspirando a que cada instancia represente exclusivamente una unidad en la muestra. Este enfoque busca mitigar posibles errores asociados a la identificación, particularmente en lo referente a identificadores similares. Se Conjuga esta estrategia analítica con la consideración de la ubicación y tipología de la vivienda, vinculadas intrínsecamente a su correspondiente valor.
Limpieza de datos faltantes: Conocer la ausencia de los datos en variables de relevante interés es un ejercicio primordial en la investigación ya que se parte que los missing se generan de forma aleatoria y no sistemática o sesgada. Para esto se cruza información del precio de la vivienda y la identidad de la misma.
Imputación de datos: ya que la implementación utilizada con anterioridad depuro aquellos datos faltantes, podemos entender que estos datos cumplen con errores en la base o de digitación, de no haber sido así se utilizaría una prueba de dos muestras para determinar diferencias significativas en relación a los precios, características de las viviendas y área construida por la identidad de la observación en la base.
Distribución, histograma y función Kernel de precios por zona: La distribuciones que presentan los datos es parte fundamental de análisis de una variable aleatoria, ya que esta demuestra concentraciones a nivel de densidad.
Limpieza de Outlier por zona: En los procesos estadísticos, la presencia de observaciones atípicas es una eventualidad que puede distorsionar el análisis. En este contexto, resulta esencial abordar la detección y manejo de estos datos atípicos de manera específica, teniendo en cuenta la clasificación según la zona a la que pertenecen.
\(\Longrightarrow\) Los paso aquí presentados se enmarcan en el proceso de depuración de la base.
Relación de tipo de inmuebles: Conocer la relación de viviendad tipo casa o apartamentos resulta clave para enfocar la concentración de mercado.
Distribuciones espacial de los inmuebles: El mercado inmobiliario requiere de la información espacial de estas observaciones, por tal motivo se implementa una georreferenciación de los puntos donde se encuentran situados estos inmuebles.
Densidad de la concentración de los inmuebles: En consonancia con lo anterior, es importante conocer la densidad de estos inmuebles.
Frecuencia y peso de las zonas de los inmuebles: Una vez que se ha identificado la distribución, resulta crucial analizar la frecuencia de las zonas y evaluar su ponderación en la muestra. Este procedimiento permite comprender la representatividad relativa de cada zona en el conjunto de datos, brindando una perspectiva cuantitativa de la prevalencia de distintas áreas geográficas en la muestra en consideración.
Frecuencia y peso de los barrios de los inmuebles: Junto al punto anterior se hace un conteo de los barrios.
Cruce de zonas y estratos: La adquisición de información acerca de las distintas zonas y sus estratos económicos se revela como un paso esencial para la identificación de nichos de mercado apropiados para la colocación de ofertas inmobiliarias. Este conocimiento facilita la delimitación de segmentos específicos con base en las características económicas de las áreas geográficas, permitiendo una estrategia de comercialización más precisa y dirigida.
Cruce de zonas y tipo de vivienda: La comprensión de la tipología de viviendas construidas en distintas zonas reviste importancia significativa en la identificación y delimitación de nichos de mercado. Este conocimiento contribuye a discernir las preferencias habitacionales en función de las características específicas de cada área geográfica, permitiendo una segmentación más precisa y eficaz en estrategias de marketing inmobiliario.
Frecuencia y peso por zona y tipo de vivienda: Frente a la agrupación de viviendas por barrios y zonas, es imperativo indagar en la configuración de estas dos dimensiones en relación con variables significativas, tales como el precio por metro cuadrado. Este indicador refleja la valoración tanto de la zona geográfica como del tipo de vivienda, estableciendo una conexión esencial entre la distribución espacial y las características intrínsecas de las propiedades.
Frecuencia y peso por zona y piso de la vivienda: Conocer la valoración de zona y piso en el que se encuentre la vivienda es clave para definir la preferencias y valor que se les da al inmueble según sus características.
Distribución espacial del precio promedio y del precio por metro cuadrado según los barrios: Una vez completado el proceso de validación y filtrado de los valores que podrían influir negativamente en los análisis, se procede a calcular la media del precio y a asignar esta referencia espacial al barrio en el cual la vivienda se encuentra ubicada.
Discrepancia de la ubicación con su zona de identificación: Revisar de la congruencia de la información proporciona indicios acerca de la confiabilidad inherente a los datos, delineando aspectos clave de su coherencia y validez.
Descripción general: La base de datos con la que se cuenta está constituida por un marco de 8330x15, 3 variables de tipo caracter y 12 de tipo númerica, en totas nuesta base por lo menos se tiene dos o un poco más de valores vacios en cada vector.
## [1] "Descripción general"
## id zona piso estrato preciom areaconst parquea banios habitac
## 1 8312 Zona Oeste 4 6 1300 318 2 4 2
## 2 8311 Zona Oeste 1 6 480 300 1 4 4
## 3 8307 Zona Oeste NA 5 1200 800 4 7 5
## 4 8296 Zona Sur 2 3 220 150 1 2 4
## 5 8297 Zona Oeste NA 5 330 112 2 4 3
## 6 8298 Zona Sur NA 5 1350 390 8 10 10
## tipo barrio longitud latitud valor_Vivienda LN_PRECIO
## 1 Apartamento arboleda -76576 3454 1300000000 20.99
## 2 Casa normandía -76571 3454 480000000 19.99
## 3 Casa miraflores -76568 3455 1200000000 20.91
## 4 Casa el guabal -76565 3417 220000000 19.21
## 5 Casa bella suiza alta -76565 3408 330000000 19.61
## 6 Casa bella suiza alta -76565 3409 1350000000 21.02
## 'data.frame': 8330 obs. of 15 variables:
## $ id : num 8312 8311 8307 8296 8297 ...
## $ zona : chr "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
## $ piso : num 4 1 NA 2 NA NA 2 NA NA 2 ...
## $ estrato : num 6 6 5 3 5 5 6 5 5 5 ...
## $ preciom : num 1300 480 1200 220 330 1350 305 480 275 285 ...
## $ areaconst : num 318 300 800 150 112 390 125 280 74 120 ...
## $ parquea : num 2 1 4 1 2 8 2 4 1 2 ...
## $ banios : num 4 4 7 2 4 10 3 4 2 4 ...
## $ habitac : num 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 ...
## $ valor_Vivienda: num 1300000000 480000000 1200000000 220000000 330000000 1350000000 305000000 480000000 275000000 285000000 ...
## $ LN_PRECIO : num 21 20 20.9 19.2 19.6 ...
| skim_type | skim_variable | n_missing | complete_rate | character.min | character.max | character.empty | character.n_unique | character.whitespace | numeric.mean | numeric.sd | numeric.p0 | numeric.p25 | numeric.p50 | numeric.p75 | numeric.p100 | numeric.hist |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| character | zona | 3 | 0.9996 | 8 | 12 | 0 | 5 | 0 | NA | NA | NA | NA | NA | NA | NA | NA |
| character | tipo | 3 | 0.9996 | 4 | 11 | 0 | 6 | 0 | NA | NA | NA | NA | NA | NA | NA | NA |
| character | barrio | 3 | 0.9996 | 4 | 29 | 0 | 436 | 0 | NA | NA | NA | NA | NA | NA | NA | NA |
| numeric | id | 3 | 0.9996 | NA | NA | NA | NA | NA | 4163.991 | 2403.9264 | 1.000 | 2082.50 | 4164.00 | 6245.50 | 8319.00 | ▇▇▇▇▇ |
| numeric | piso | 2641 | 0.6830 | NA | NA | NA | NA | NA | 3.772 | 2.6150 | 1.000 | 2.00 | 3.00 | 5.00 | 12.00 | ▇▃▁▁▁ |
| numeric | estrato | 3 | 0.9996 | NA | NA | NA | NA | NA | 4.634 | 1.0293 | 3.000 | 4.00 | 5.00 | 5.00 | 6.00 | ▅▆▁▇▆ |
| numeric | preciom | 2 | 0.9998 | NA | NA | NA | NA | NA | 434.241 | 329.0157 | 58.000 | 220.00 | 330.00 | 540.00 | 1999.00 | ▇▂▁▁▁ |
| numeric | areaconst | 3 | 0.9996 | NA | NA | NA | NA | NA | 174.988 | 142.9498 | 30.000 | 80.00 | 123.00 | 229.00 | 1745.00 | ▇▁▁▁▁ |
| numeric | parquea | 1606 | 0.8072 | NA | NA | NA | NA | NA | 1.836 | 1.1251 | 1.000 | 1.00 | 2.00 | 2.00 | 10.00 | ▇▁▁▁▁ |
| numeric | banios | 3 | 0.9996 | NA | NA | NA | NA | NA | 3.112 | 1.4283 | 0.000 | 2.00 | 3.00 | 4.00 | 10.00 | ▇▇▃▁▁ |
| numeric | habitac | 3 | 0.9996 | NA | NA | NA | NA | NA | 3.605 | 1.4591 | 0.000 | 3.00 | 3.00 | 4.00 | 10.00 | ▂▇▂▁▁ |
| numeric | longitud | 3 | 0.9996 | NA | NA | NA | NA | NA | -21845.128 | 34503.8967 | -76576.000 | -76506.00 | -76.54 | -76.52 | -76.46 | ▃▁▁▁▇ |
| numeric | latitud | 3 | 0.9996 | NA | NA | NA | NA | NA | 970.370 | 1539.1561 | 3.333 | 3.39 | 3.45 | 3367.00 | 3497.00 | ▇▁▁▁▃ |
| numeric | valor_Vivienda | 2 | 0.9998 | NA | NA | NA | NA | NA | 434240634.006 | 329015703.6155 | 58000000.000 | 220000000.00 | 330000000.00 | 540000000.00 | 1999000000.00 | ▇▂▁▁▁ |
| numeric | LN_PRECIO | 2 | 0.9998 | NA | NA | NA | NA | NA | 19.657 | 0.6703 | 17.876 | 19.21 | 19.61 | 20.11 | 21.42 | ▁▅▇▅▂ |
## [1] "id = Identificador único de la vivienda"
## [1] "zona = Zona de la ciudad"
## [1] "piso = Piso en la que está ubicada la vivienda"
## [1] "estrato = Estrato"
## [1] "preciom = Precio en millones de pesos"
## [1] "areaconst = Área construida en metros cuadrados"
## [1] "parqueaderos = Número de parqueaderos"
## [1] "banios = Numero de banos"
## [1] "habitaciones = Número de habitaciones"
## [1] "tipo = Tipo de vivienda"
## [1] "barrio = Barrio"
## [1] "longitud=Coordenada de longitud"
## [1] "latitud = Coordenada de latitud"
Homogeneización de los vectores caracteristicos: En esta fase del análisis de datos, se llevó a cabo la normalización de la variable “barrio” mediante la eliminación de acentos. Además, se procedió a la estandarización de algunos nombres de barrios que presentaban una longitud excesiva, corrigiendo la presencia de caracteres adicionales. También se implementó la identificación de categorías mediante la clasificación de los barrios en zonas específicas y la categorización según el tipo de vivienda.
Inmuebles duplicados: Se identificó la presencia de 9 observaciones duplicadas en la base de datos. Dado que la base de datos posee un identificador único, se llevó a cabo un análisis y posterior limpieza de aquellos registros duplicados presentes en la muestra..
Limpieza de datos faltantes: Se realizó una descripción detallada de la estructura de los vectores en relación con la presencia de valores faltantes. Dado el carácter preponderante de la información espacial, se procedió a la eliminación de una observación que carecía de dicha información, con el objetivo de preservar la integridad del conjunto de datos.
## [1] "Limpieza de datos faltantes"
## ZONA_TIPO preciom valor_Vivienda LN_PRECIO id zona estrato areaconst
## 4812 1 1 1 1 1 1 1 1
## 1912 1 1 1 1 1 1 1 1
## 877 1 1 1 1 1 1 1 1
## 726 1 1 1 1 1 1 1 1
## 1 1 1 1 1 0 0 0 0
## 2 1 0 0 0 0 0 0 0
## 0 2 2 2 3 3 3 3
## banios habitac tipo barrio longitud latitud parquea piso
## 4812 1 1 1 1 1 1 1 1 0
## 1912 1 1 1 1 1 1 1 0 1
## 877 1 1 1 1 1 1 0 1 1
## 726 1 1 1 1 1 1 0 0 2
## 1 0 0 0 0 0 0 0 0 12
## 2 0 0 0 0 0 0 0 0 15
## 3 3 3 3 3 3 1606 2641 4283
| FALSE | TRUE | |
|---|---|---|
| FALSE | 8327 | 1 |
| TRUE | 0 | 2 |
Imputación de datos: Para esto no fue necesario realizar esta práctica debido a que al eliminar duplicados y datos faltante en relación a todas sus observaciones se procede a analizar la infromación resultante.
## [1] "Limpieza de datos faltantes"
Distribución; histograma y función Kernel de precios por zona: La evaluación de la distribución de los datos a través de la representación de su densidad mediante un histograma, acompañado de la función de Kernel, proporciona información acerca de la distribución probabilística subyacente. Observamos que, en términos generales, la distribución de los datos según la zona y el tipo de vivienda exhibe similitudes con una distribución probabilística Gamma. Esto implica que, en términos generales, los datos tienden a agruparse en una fracción más reducida, no necesariamente en términos de precios, sino más bien en cuanto a tendencias en comparación con los precios más elevados.
## [1] "Distribución de los datos"
Limpieza de Outlier por zona: La decisión de retener los datos atípicos en un conjunto agregado se basa en el hecho de que en nueve de las zonas, la distribución exhibe una agrupación similar, lo que permite la preservación de la heterogeneidad en la muestra en función de su ubicación geográfica. Tras la aplicación de este criterio, la muestra resultante consta de 7820 observaciones.
## [1] "Limpieza de otlier por zona"
La consideración de la ubicación espacial de los inmuebles se revela como un factor fundamental para la identificación de nichos de mercado. En este contexto, se procede a la carga de la capa geoespacial correspondiente a los barrios de Cali, facilitando así la realización de análisis cruzados con datos espaciales.
## Reading layer `Cali_Barrios' from data source
## `C:\Users\nicol.NICOLAS_GP\Dropbox\Información Espacial\Colombia\Cali\Cali_Barrios.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 335 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 1054000 ymin: 860200 xmax: 1068000 ymax: 879000
## Projected CRS: MAGNA-SIRGAS / Cali urban grid
La distribución de la totalidad de los inmuebles muestra una concentración predominante en las viviendas tipo apartamento, abarcando el 60% del conjunto, en contraste con las viviendas tipo casas, que representan el 39%. Esta relación implica una proporción de 1.5 apartamentos por cada casa en la muestra.
Está frecuencia
## [1] "Relación de tipo de inmuebles"
La distribución geoespacial de los inmuebles revela una concentración significativa en las áreas situadas al sur y norte de la ciudad, según la información proporcionada por la capa de polígonos.
## [1] "Distribuciones espacial de los inmuebles"
Al realizar una ponderación por frecuencias de los puntos geográficos sobre los barrios, se observa una concentración notable en la región del Valle del Lili.
## [1] "Densidad de la concentración de los inmuebles"
La concentración en la zona sur constituye el 55.6% del total de la ciudad, seguida por la zona norte con el 23%. Este hallazgo sugiere que el 70% de la distribución de inmuebles se explica únicamente por dos zonas específicas de la ciudad.
## [1] "Frecuencia y peso de las zonas de los inmuebles"
| Var1 | Freq |
|---|---|
| Zona Centro | 115 |
| Zona Norte | 1835 |
| Zona Oeste | 1170 |
| Zona Oriente | 340 |
| Zona Sur | 4360 |
| Var1 | Freq |
|---|---|
| Zona Centro | 1.471 |
| Zona Norte | 23.465 |
| Zona Oeste | 14.962 |
| Zona Oriente | 4.348 |
| Zona Sur | 55.755 |
Como se mencionó previamente, Valle del Lili abarca el 12% del total de la muestra, Ciudad Jardín representa el 6%, y Pance comprende el 5%. (Por temas esteticos de presentación no se abjunta la tabla, pero el código para esta se encuentra en los anexos.)
Predominantemente, la concentración de inmuebles se localiza en la zona sur, específicamente en los estratos 5, abarcando el 20% de las unidades residenciales.
## [1] "Cruce de zonas y estratos"
| 3 | 4 | 5 | 6 | |
|---|---|---|---|---|
| Zona Centro | 1.3043 | 0.1407 | 0.0256 | 0.000 |
| Zona Norte | 7.3018 | 5.1407 | 9.5524 | 1.471 |
| Zona Oeste | 0.6905 | 1.0742 | 3.6701 | 9.527 |
| Zona Oriente | 4.2455 | 0.0767 | 0.0256 | 0.000 |
| Zona Sur | 4.8721 | 20.6010 | 21.0870 | 9.194 |
En términos generales, la distribución de precios exhibe una notable homogeneidad al ser analizada a nivel de estrato. No obstante, se observa un comportamiento divergente en las zonas oriente y oeste en comparación con el resto de las zonas. Este patrón sugiere que las zonas norte y sur mantienen precios coherentes con sus respectivos estratos.
## [1] "Boxplot del estrato y zona en función del precio"
Al realizar una discriminación basada en la zona geográfica y el tipo de vivienda, se observa que la región sur mantiene una significativa cuota de concentración de mercado, con predominio de viviendas tipo casa. No obstante, las áreas más valorizadas se localizan en la zona este, especialmente en el caso de viviendas tipo apartamento.
## [1] "Cruce de zonas y tipo de vivienda"
| ZONA_TIPO | TOTAL_VIVIENDAS | PESO_VIVIENDAS | PRECIO_VIVIENDA | FRE_PRECIO_VIVIENDA | TOTAL_AREA | FRE_AREA | PRECIO_M2 | FRE_PRECIO_M2 |
|---|---|---|---|---|---|---|---|---|
| Zona_Cen-Apt | 22 | 0.28% | 3728000000 | 0.12% | 1975 | 0.15% | 1887824 | 8.91% |
| Zona_Ori-Apt | 54 | 0.69% | 6246000000 | 0.2% | 4205 | 0.32% | 1485396 | 7.01% |
| Zona_Cen-Casa | 93 | 1.19% | 28434000000 | 0.92% | 19544 | 1.51% | 1454908 | 6.87% |
| Zona_Oes-Casa | 165 | 2.11% | 116695000000 | 3.78% | 56103 | 4.32% | 2080000 | 9.82% |
| Zona_Ori-Casa | 286 | 3.66% | 68703000000 | 2.23% | 60552 | 4.66% | 1134609 | 5.35% |
| Zona_Nor-Casa | 691 | 8.84% | 281644000000 | 9.13% | 172706 | 13.3% | 1630774 | 7.7% |
| Zona_Oes-Apt | 1005 | 12.85% | 643766000000 | 20.88% | 167862 | 12.93% | 3835084 | 18.1% |
| Zona_Nor-Apt | 1144 | 14.63% | 290475000000 | 9.42% | 104750 | 8.07% | 2773034 | 13.09% |
| Zona_Sur-Casa | 1837 | 23.49% | 1017275000000 | 32.99% | 488819 | 37.66% | 2081087 | 9.82% |
| Zona_Sur-Apt | 2523 | 32.26% | 626692000000 | 20.32% | 221580 | 17.07% | 2828292 | 13.35% |
El núcleo central de la ciudad exhibe un elevado valor, particularmente en los pisos 4, 5 y 11, donde se registra una relación destacada entre el precio y el metro cuadrado. Además, los inmuebles ubicados en la zona oriente, específicamente en los pisos 4 y 5, también manifiestan un aprecio significativo.
## [1] "Cruce de zonas y piso"
| zona | piso | TOTAL_VIVIENDAS | PESO_VIVIENDAS | PRECIO_VIVIENDA | FRE_PRECIO_VIVIENDA | TOTAL_AREA | FRE_AREA | PRECIO_M2 | FRE_PRECIO_M2 |
|---|---|---|---|---|---|---|---|---|---|
| Zona Centro | 1 | 32 | 27.83% | 7739000000 | 24.06% | 5432.0 | 25.24% | 1424705 | 12.14 |
| Zona Centro | 2 | 15 | 13.04% | 4542000000 | 14.12% | 3087.5 | 14.35% | 1471093 | 12.53 |
| Zona Centro | 3 | 7 | 6.09% | 1995000000 | 6.2% | 1349.0 | 6.27% | 1478873 | 12.60 |
| Zona Centro | 4 | 5 | 4.35% | 933000000 | 2.9% | 425.8 | 1.98% | 2191375 | 18.67 |
| Zona Centro | 5 | 5 | 4.35% | 615000000 | 1.91% | 336.0 | 1.56% | 1830357 | 15.60 |
| Zona Centro | 11 | 2 | 1.74% | 460000000 | 1.43% | 249.0 | 1.16% | 1847390 | 15.74 |
| Zona Centro | NA | 49 | 42.61% | 15878000000 | 49.37% | 10639.0 | 49.44% | 1492433 | 12.72 |
| Zona Norte | 1 | 174 | 9.48% | 55327000000 | 9.67% | 28073.2 | 10.12% | 1970809 | 5.74 |
| Zona Norte | 2 | 279 | 15.2% | 100766000000 | 17.61% | 56258.9 | 20.28% | 1791112 | 5.21 |
| Zona Norte | 3 | 184 | 10.03% | 55032000000 | 9.62% | 28911.1 | 10.42% | 1903490 | 5.54 |
| Zona Norte | 4 | 124 | 6.76% | 27557000000 | 4.82% | 11571.9 | 4.17% | 2381366 | 6.93 |
| Zona Norte | 5 | 114 | 6.21% | 21615000000 | 3.78% | 8793.0 | 3.17% | 2458217 | 7.15 |
| Zona Norte | 6 | 31 | 1.69% | 10640000000 | 1.86% | 3329.0 | 1.2% | 3196193 | 9.30 |
| Zona Norte | 7 | 32 | 1.74% | 10528000000 | 1.84% | 3973.0 | 1.43% | 2649887 | 7.71 |
| Zona Norte | 8 | 34 | 1.85% | 9910000000 | 1.73% | 3142.9 | 1.13% | 3153179 | 9.18 |
| Zona Norte | 9 | 30 | 1.63% | 10227000000 | 1.79% | 3363.4 | 1.21% | 3040664 | 8.85 |
| Zona Norte | 10 | 25 | 1.36% | 8215000000 | 1.44% | 2629.0 | 0.95% | 3124762 | 9.09 |
| Zona Norte | 11 | 30 | 1.63% | 10608000000 | 1.85% | 3412.2 | 1.23% | 3108872 | 9.05 |
| Zona Norte | 12 | 37 | 2.02% | 14271000000 | 2.49% | 3959.0 | 1.43% | 3604698 | 10.49 |
| Zona Norte | NA | 741 | 40.38% | 237423000000 | 41.5% | 120039.1 | 43.26% | 1977881 | 5.76 |
| Zona Oeste | 1 | 84 | 7.18% | 44165000000 | 5.81% | 14142.2 | 6.31% | 3122921 | 6.63 |
| Zona Oeste | 2 | 117 | 10% | 71710000000 | 9.43% | 26913.2 | 12.02% | 2664492 | 5.66 |
| Zona Oeste | 3 | 132 | 11.28% | 75075000000 | 9.87% | 23448.5 | 10.47% | 3201701 | 6.80 |
| Zona Oeste | 4 | 97 | 8.29% | 55713000000 | 7.33% | 16850.0 | 7.52% | 3306400 | 7.02 |
| Zona Oeste | 5 | 84 | 7.18% | 47185000000 | 6.2% | 12675.9 | 5.66% | 3722430 | 7.91 |
| Zona Oeste | 6 | 80 | 6.84% | 52715000000 | 6.93% | 13763.6 | 6.15% | 3830016 | 8.13 |
| Zona Oeste | 7 | 54 | 4.62% | 38558000000 | 5.07% | 10527.3 | 4.7% | 3662671 | 7.78 |
| Zona Oeste | 8 | 40 | 3.42% | 31020000000 | 4.08% | 7854.3 | 3.51% | 3949434 | 8.39 |
| Zona Oeste | 9 | 40 | 3.42% | 35969000000 | 4.73% | 8081.0 | 3.61% | 4451058 | 9.45 |
| Zona Oeste | 10 | 26 | 2.22% | 21125000000 | 2.78% | 5257.0 | 2.35% | 4018452 | 8.54 |
| Zona Oeste | 11 | 20 | 1.71% | 18630000000 | 2.45% | 4239.0 | 1.89% | 4394904 | 9.33 |
| Zona Oeste | 12 | 12 | 1.03% | 10743000000 | 1.41% | 3149.0 | 1.41% | 3411559 | 7.25 |
| Zona Oeste | NA | 384 | 32.82% | 257853000000 | 33.91% | 77064.6 | 34.41% | 3345932 | 7.11 |
| Zona Oriente | 1 | 72 | 21.18% | 14100000000 | 18.81% | 10873.4 | 16.79% | 1296738 | 15.33 |
| Zona Oriente | 2 | 60 | 17.65% | 12832000000 | 17.12% | 10601.0 | 16.37% | 1210452 | 14.31 |
| Zona Oriente | 3 | 54 | 15.88% | 13945000000 | 18.61% | 11800.6 | 18.22% | 1181717 | 13.97 |
| Zona Oriente | 4 | 7 | 2.06% | 2184000000 | 2.91% | 2053.0 | 3.17% | 1063809 | 12.58 |
| Zona Oriente | 5 | 8 | 2.35% | 842000000 | 1.12% | 497.0 | 0.77% | 1694165 | 20.03 |
| Zona Oriente | 10 | 1 | 0.29% | 175000000 | 0.23% | 187.0 | 0.29% | 935829 | 11.07 |
| Zona Oriente | NA | 138 | 40.59% | 30871000000 | 41.19% | 28745.0 | 44.39% | 1073961 | 12.70 |
| Zona Sur | 1 | 447 | 10.25% | 183639000000 | 11.17% | 78070.8 | 10.99% | 2352210 | 6.65 |
| Zona Sur | 2 | 897 | 20.57% | 432087000000 | 26.28% | 200754.8 | 28.26% | 2152312 | 6.09 |
| Zona Sur | 3 | 672 | 15.41% | 253022000000 | 15.39% | 113271.4 | 15.94% | 2233767 | 6.32 |
| Zona Sur | 4 | 342 | 7.84% | 94905000000 | 5.77% | 40124.7 | 5.65% | 2365254 | 6.69 |
| Zona Sur | 5 | 332 | 7.61% | 76784000000 | 4.67% | 27335.2 | 3.85% | 2808982 | 7.94 |
| Zona Sur | 6 | 117 | 2.68% | 31902000000 | 1.94% | 11220.4 | 1.58% | 2843212 | 8.04 |
| Zona Sur | 7 | 109 | 2.5% | 27966000000 | 1.7% | 10323.8 | 1.45% | 2708897 | 7.66 |
| Zona Sur | 8 | 113 | 2.59% | 27442000000 | 1.67% | 9037.4 | 1.27% | 3036496 | 8.59 |
| Zona Sur | 9 | 69 | 1.58% | 18663000000 | 1.14% | 6070.5 | 0.85% | 3074376 | 8.69 |
| Zona Sur | 10 | 70 | 1.61% | 18229000000 | 1.11% | 6091.8 | 0.86% | 2992403 | 8.46 |
| Zona Sur | 11 | 24 | 0.55% | 7790000000 | 0.47% | 2448.0 | 0.34% | 3182190 | 9.00 |
| Zona Sur | 12 | 21 | 0.48% | 6832000000 | 0.42% | 2053.0 | 0.29% | 3327813 | 9.41 |
| Zona Sur | NA | 1147 | 26.31% | 464706000000 | 28.27% | 203597.0 | 28.66% | 2282480 | 6.45 |
La identificación espacial de áreas con viviendas de alto precio permite una focalización más precisa del sector inmobiliario, considerando tanto efectos espaciales como oportunidades de mercado. En este contexto, se observa que los barrios con los mayores precios promedio incluyen Vista Hermosa, Pance, Ciudad Jardín, Ciudad Campestre y Río Lili.
Aunque los precios promedio ofrecen indicios de oportunidades, un
indicador adicional de valorización es el costo por metro cuadrado. En
este sentido, además de los barrios previamente mencionados, se
identifican otros como Laguna del Pondaje, Porvenir, Arboleda,
Normandia, Cristales y Santa Isabel, que muestran un mayor valor en este
indicador.
dfsd
A pesar de que las cifras son consistentes con el conocimiento previo de la ciudad, se identifica un factor de confusión relacionado con dos variables específicas. En este caso, la ubicación espacial no concuerda con la zona que se atribuye al inmueble, lo cual, de manera preliminar, podría atribuirse a posibles errores en la geolocalización.
## Reading layer `Cali_Barrios' from data source
## `C:\Users\nicol.NICOLAS_GP\Dropbox\Información Espacial\Colombia\Cali\Cali_Barrios.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 335 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 1054000 ymin: 860200 xmax: 1068000 ymax: 879000
## Projected CRS: MAGNA-SIRGAS / Cali urban grid
La segmentación del mercado se torna indispensable al considerar las zonas de la ciudad en función del tipo de vivienda. No obstante, se observa que determinados barrios en la ciudad poseen un alto valor de mercado, a pesar de no pertenecer a las zonas tradicionalmente fuertes de la capital del Valle.
El análisis del enfoque de vivienda debe iniciarse con la consideración del piso en el cual se encuentra ubicada. Asimismo, se propone desvincular el enfoque de frecuencia de vivienda para su aplicación específica en ciertos barrios.
Aunque, en términos generales, la parte oriental de la ciudad no muestra una coherencia clara con respecto a los estratos, se identifican barrios específicos en dicha área como oportunidades concretas para nichos de mercado.
Se identifican oportunidades significativas en una parte sustancial de los barrios ubicados en la zona oriental de la ciudad, los cuales presentan una marcada tendencia hacia la valorización.
En el núcleo central de la ciudad, los pisos 3, 4, 5 y 11 representan una atractiva oportunidad para segmentos específicos de mercado.
En consonancia con las viviendas situadas en pisos superiores al segundo, los apartamentos ofrecen una atractiva perspectiva de inversión.
La zona tradicional de la ciudad debería orientarse preferentemente hacia los apartamentos, ya que esta característica está siendo altamente valorada en el mercado actual.
##############################################################################
####### #######
# PONTIFICIA UNIVERSIDAD JAVERIANA #
# MÉTODOS Y SIMULACIÓN ESTADÍSTICA #
# Análisis de Datos en el Sector Inmobiliario #
####### #######
###############################################################################
#By: Nicolás García Peñaloza
#+57 3122852823
#nicolasgp0109@gmail.com
#nicolasgp0109@javerianacali.edu.co
getwd()
options('scipen'=100, 'digits'=4)
cat('/f')
rm(list=ls())
list=ls()
paquetes = c('devtools' , 'dgonxalex80/paqueteMETODOS' ,
'skimr' , 'VIM' , 'mice' , 'table1' , 'sf' ,
'naniar' , 'here' , 'purrr' ,
'stringr' , 'stringi' ,
'viridis' ,'ddpcr' , 'rstatix' ,
'biscale')
for(N in paquetes ){
if (length(grep(N,installed.packages()[,1])) == 0 ){ install.packages(N) ; print(paste0("Nicolas La libreria ", "'", N ,"'", " ha sido instalada."))}
else { print(paste0("Nicolas La libreria ", "'", N ,"'", " ya esta instalada."))}
rm(N)}
sapply(paquetes,require,character.only=T) ; rm(paquetes , list)
#devtools::install_github("dgonxalex80/paqueteMETODOS")
library(paqueteMETODOS)
#### Inicio ----
DATA = paqueteMETODOS::vivienda_faltantes |> data.frame() |> mutate(valor_Vivienda = (preciom*1000000)) |> #*areaconst
mutate(LN_PRECIO = log(valor_Vivienda ) )
print("Descripción general")
head(DATA)
DATA |> str()
skimr::skim(DATA)
?paqueteMETODOS::vivienda_faltantes
print("id = Identificador único de la vivienda")
print("zona = Zona de la ciudad")
print("piso = Piso en la que está ubicada la vivienda")
print("estrato = Estrato")
print("preciom = Precio en millones de pesos")
print("areaconst = Área construida en metros cuadrados")
print("parqueaderos = Número de parqueaderos")
print("banios = Número de baños")
print("habitaciones = Número de habitaciones")
print("tipo = Tipo de vivienda")
print("barrio = Barrio")
print("longitud=Coordenada de longitud")
print("latitud = Coordenada de latitud")
print("homogeneización")
DATA = DATA |> mutate(
tipo = str_to_title(tipo) ,
barrio = str_to_title(barrio)
) |> mutate(barrio = iconv(barrio , to='ASCII//TRANSLIT')) |> mutate(
barrio = str_replace(barrio, "\\?\\?" , "u")) |> mutate(
barrio = str_replace(barrio, "\\?" , "u")
) |> mutate(
barrio = str_to_title(barrio)
) |> mutate(
barrio = gsub( "Valle De Lili" , "Lili" ,barrio ,) ,
barrio = gsub( "Valle Del Lili" , "Lili" , barrio ),
tipo = gsub( "Apto" , "Apartamento" , tipo )
) |> mutate( ZONA_TIPO = case_when(
zona == "Zona Centro" & tipo == "Apartamento" ~ "Zona_Cen-Apt" ,
zona == "Zona Norte" & tipo == "Apartamento" ~ "Zona_Nor-Apt" ,
zona == "Zona Oeste" & tipo == "Apartamento" ~ "Zona_Oes-Apt" ,
zona == "Zona Oriente" & tipo == "Apartamento" ~ "Zona_Ori-Apt" ,
zona == "Zona Sur" & tipo == "Apartamento" ~ "Zona_Sur-Apt" ,
zona == "Zona Centro" & tipo == "Casa" ~ "Zona_Cen-Casa" ,
zona == "Zona Norte" & tipo == "Casa" ~ "Zona_Nor-Casa" ,
zona == "Zona Oeste" & tipo == "Casa" ~ "Zona_Oes-Casa" ,
zona == "Zona Oriente" & tipo == "Casa" ~ "Zona_Ori-Casa" ,
zona == "Zona Sur" & tipo == "Casa" ~ "Zona_Sur-Casa" ,
TRUE ~ "NA"))
print("¿Hay duplicados? Sí")
length(unique(DATA$id))
table(duplicated(DATA$id))
table(duplicated(DATA[, c("id", "tipo", "longitud", "latitud" , "valor_Vivienda")]))
print("Valores perdidos")
vis_miss(DATA)
md.pattern(DATA)
table(is.na(DATA$valor_Vivienda) , is.na(DATA$id))
print("Duplicados y limpieza de datos faltantes")
DATA = DATA |>
mutate(dummy_duplicates = ifelse( +duplicated(paste0(id,tipo,longitud,latitud), fromLast = TRUE), 1, 0) ) |>
dplyr::filter(dummy_duplicates == 0 ) |> dplyr::filter( !is.na(longitud))
print("Distribución de los datos")
DATA |> dplyr::filter( ZONA_TIPO != "NA" ) |> ggplot( aes(x = valor_Vivienda )) +
geom_histogram(aes(y = ..density..),
colour = "black", fill = "#238A8DFF") +
geom_density(lwd = 1, colour = 4,
fill = 4, alpha = 0.25) +
theme_void()
DATA |> dplyr::filter( ZONA_TIPO != "NA" ) |> ggplot( aes(x = valor_Vivienda )) +
geom_histogram(aes(y = ..density.. ) ,
colour = "black", fill = "#238A8DFF"
) +
geom_density( lwd = 1, colour = 4,
fill = "white", alpha = 0.25) +
theme_void() +
facet_wrap(~ ZONA_TIPO , scales = 'free' )
print("Limpieza de otlier por zona")
DATA = DATA |> dplyr::filter(ZONA_TIPO != "NA") |>
group_by(ZONA_TIPO) |>
mutate(atipico_precio = ifelse(
valor_Vivienda > quantile(
valor_Vivienda , 0.75, na.rm = TRUE) + 1.5*IQR(valor_Vivienda , na.rm = TRUE) |
valor_Vivienda < quantile(valor_Vivienda , 0.25 , na.rm = TRUE) -1.5*IQR(
valor_Vivienda , na.rm = TRUE) , NA , valor_Vivienda)) |> dplyr::filter(!is.na(atipico_precio))
DATA |> dplyr::filter( ZONA_TIPO != "NA") |>
ggplot( aes(x = atipico_precio )) +
geom_histogram(aes(y = ..density.. ) ,
colour = "black", fill = "#238A8DFF"
) +
geom_density( lwd = 1, colour = 4,
fill = "white", alpha = 0.25) +
theme_void() +
facet_wrap(~ ZONA_TIPO , scales = 'free' )
DATA |> dplyr::filter( ZONA_TIPO != "NA" ) |> ggplot( aes(x = valor_Vivienda )) +
geom_histogram(aes(y = ..density..),
colour = "black", fill = "#238A8DFF") +
geom_density(lwd = 1, colour = 4,
fill = 4, alpha = 0.25) +
theme_void()
# EDA----------------
BARRIOS = st_read("C:/Users/nicol.NICOLAS_GP/Dropbox/Información Espacial/Colombia/Cali/Cali_Barrios.shp") |>
mutate(
barrio = str_to_title(barrio)
) |> mutate(barrio = iconv(barrio , to='ASCII//TRANSLIT')) |> mutate(
barrio = str_replace(barrio, "\\?\\?" , "u")) |> mutate(
barrio = str_replace(barrio, "\\?" , "u")
) |> mutate(
barrio = str_to_title(barrio)
)
INMUEBLES = st_as_sf(x = DATA , coords = c("longitud" , "latitud"), crs = "+proj=longlat +datum=WGS84 +no_defs ")
print("Relación de tipo de inmuebles")
table(DATA$zona)
table(DATA$tipo)
table(DATA$barrio)
DATA |> group_by(tipo) |> summarise( TOTAL = n(tipo) ) |> mutate(
PESO_TIPO = round((TOTAL / sum(TOTAL))*100,2)
) |> mutate(ymax = cumsum( PESO_TIPO)) |>
mutate(ymin = c(0, head(ymax, n=-1))) |>
mutate(labelPosition = ((ymax + ymin) / 2) ,
label = paste0(tipo, "\n Total: ", TOTAL ,"\n ", PESO_TIPO , "%" )) |>
ggplot( aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill= tipo )) +
geom_rect() +
geom_text( x=2, aes(y = labelPosition, label = label ) , colour = c( "#238A8DFF" , '#440154FF' ) , size=6) +
coord_polar(theta="y") + scale_fill_manual(values = c( "#238A8DFF" , '#440154FF' )) +
xlim(c(-1, 4)) +
theme_void() +
theme(legend.position = "none")
print("Distribuciones espacial de los inmuebles")
ggplot() + geom_sf(data = BARRIOS , color = "black" , fill = "#238A8DFF" ) +
geom_sf(data = INMUEBLES ,color='#440154FF' , size = 1 ) +
theme_void()
print("Densidad de la concentración de los inmuebles")
ggplot() +
geom_sf(data = BARRIOS) +
geom_density_2d_filled(data = INMUEBLES ,
mapping = aes(x = map_dbl(geometry, ~.[1]),
y = map_dbl(geometry, ~.[2])),
alpha = 0.4) +
theme_void() + theme(legend.position = "none")
print("Frecuencia y peso de las zonas de los inmuebles")
DATA$zona |> table()
prop.table(table(DATA$zona ))*100
print("Frecuencia y peso de las zonas de los inmuebles")
DATA$barrio |> table()
View(prop.table(table(DATA$barrio))*100)
print("Cruce de zonas y estratos")
prop.table(table(DATA$zona , DATA$estrato))*100
print("Cruce de zonas y tipo de vivienda")
DATA |> dplyr::filter( ZONA_TIPO != "NA" ) |>
group_by(ZONA_TIPO) |>
summarise(
PRECIO_VIVIENDA = sum(valor_Vivienda),#suma precio total
TOTAL_VIVIENDAS = n(ZONA_TIPO), #Suma cantidad de viviendas
TOTAL_AREA= sum(areaconst), #Suma area total
PRECIO_M2 = sum(valor_Vivienda) / sum(areaconst)
) |>
mutate(
FRE_PRECIO_VIVIENDA = paste0(round((PRECIO_VIVIENDA / sum(PRECIO_VIVIENDA))*100,2),"%" ), # Frecuencia
PESO_VIVIENDAS = paste0(round((TOTAL_VIVIENDAS / sum(TOTAL_VIVIENDAS))*100,2),"%" ), #Saca frecuencia r. cantidad viviendas
FRE_AREA = paste0(round((TOTAL_AREA / sum(TOTAL_AREA))*100,2),"%" ),
FRE_PRECIO_M2 = paste0(round((PRECIO_M2/sum(PRECIO_M2))*100,2),"%" )
) |>
dplyr::select(ZONA_TIPO, TOTAL_VIVIENDAS , PESO_VIVIENDAS , PRECIO_VIVIENDA , FRE_PRECIO_VIVIENDA , TOTAL_AREA ,
FRE_AREA , PRECIO_M2 , FRE_PRECIO_M2 ) |>
arrange(TOTAL_VIVIENDAS)
print("Boxplot del estrato y zona en función del precio")
DATA |> ggplot() +
geom_boxplot( aes(x = as.factor(estrato) , y = LN_PRECIO , fill = as.factor(estrato) )) +
theme_void() +
scale_fill_manual("Estrato", values = c("#482677FF", "#2D708EFF", "#3CBB75FF", "#DCE319FF")) +
theme(axis.text.y = element_text(size = 14)) +
facet_wrap(~ ZONA_TIPO , scale="fixed")
print("Cruce de zonas y piso")
table(DATA$zona , DATA$piso)
table(DATA$piso, useNA = "always")
DATA |> dplyr::filter( !is.na(zona) ) |>
group_by(zona , piso ) |>
summarise(
PRECIO_VIVIENDA = sum(valor_Vivienda),#suma precio total
TOTAL_VIVIENDAS = n(), #Suma cantidad de viviendas
TOTAL_AREA= sum(areaconst), #Suma area total
PRECIO_M2 = sum(valor_Vivienda) / sum(areaconst)
) |>
mutate(
FRE_PRECIO_VIVIENDA = paste0(round((PRECIO_VIVIENDA / sum(PRECIO_VIVIENDA))*100,2),"%" ), # Frecuencia
PESO_VIVIENDAS = paste0(round((TOTAL_VIVIENDAS / sum(TOTAL_VIVIENDAS))*100,2),"%" ), #Saca frecuencia r. cantidad viviendas
FRE_AREA = paste0(round((TOTAL_AREA / sum(TOTAL_AREA))*100,2),"%" ),
FRE_PRECIO_M2 = round((PRECIO_M2/sum(PRECIO_M2))*100,2)
) |>
dplyr::select(zona , piso, TOTAL_VIVIENDAS , PESO_VIVIENDAS , PRECIO_VIVIENDA , FRE_PRECIO_VIVIENDA , TOTAL_AREA ,
FRE_AREA , PRECIO_M2 , FRE_PRECIO_M2 ) |>
arrange(zona , piso) |> View()
print("Precio Promedio")
BARRIOS = st_transform(BARRIOS, st_crs(INMUEBLES))
st_join(x = BARRIOS , y = INMUEBLES ) |> group_by( geometry) |>
summarise( PRECIO = mean(valor_Vivienda) )
ggplot() + geom_sf(aes(fill = PRECIO )) +
theme_void() + scale_fill_viridis("Precio Promedio")
print("Precio M2 Promedio")
st_join(x = BARRIOS , y = INMUEBLES ) |> group_by( geometry) |>
summarise( PRECIO_M2 = mean(valor_Vivienda/areaconst)) |>
ggplot() + geom_sf(aes(fill = PRECIO_M2 )) +
theme_void() + scale_fill_viridis("Precio Promedio metro 2")
## Las viviendas Georeferenciadas no guardan congruencia con la zona a la que expresa permanecer, esto muestra una falta de concistencia que requiere contesto para expresar conclusiones consisas.
BARRIOS = st_read("C:/Users/nicol.NICOLAS_GP/Dropbox/Información Espacial/Colombia/Cali/Cali_Barrios.shp") |>
mutate(
barrio = str_to_title(barrio)
) |> mutate(barrio = iconv(barrio , to='ASCII//TRANSLIT')) |> mutate(
barrio = str_replace(barrio, "\\?\\?" , "u")) |> mutate(
barrio = str_replace(barrio, "\\?" , "u")
) |> mutate(
barrio = str_to_title(barrio)
)
INMUEBLES = st_as_sf(x = DATA , coords = c("longitud" , "latitud"), crs = "+proj=longlat +datum=WGS84 +no_defs ")
ggplot() + geom_sf(data = BARRIOS , color = "black" , fill = "white" ) +
geom_sf(data = INMUEBLES , aes(color = zona) , size = 1.5 ) +
theme_void() + scale_colour_viridis_d()#option = "H")