Introduction

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.

Objetivos

  • 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.

Métodos

Proceso de Limpieza

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.

Proceso descriptivo

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"

Resultados

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

Relación de tipo de inmuebles:

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"

Distribuciones espacial de los 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"

Densidad de la concentración 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"

Frecuencia y peso de las zonas 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

Frecuencia y peso de los barrios de los inmuebles:

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.)

Cruce de zonas y estratos:

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

Boxplot de los estratos y la zona en funcion de los precios.

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"

Frecuencia y peso por zona y tipo de vivienda:

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%

Frecuencia y peso por zona y piso de la vivienda:

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

Distribución espacial del precio promedio y del precio por metro cuadrado según los barrios:

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

Discusión

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.

Conclusiones

Anexos

##############################################################################
#######                                                                #######
#                    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")