── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.4.4     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.0
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Attaching package: 'kableExtra'


The following object is masked from 'package:dplyr':

    group_rows
Skipping install of 'paqueteMETODOS' from a github remote, the SHA1 (341036c5) has not changed since last install.
  Use `force = TRUE` to force installation
Loading required package: cubature
Loading required package: flextable

Attaching package: 'flextable'
The following objects are masked from 'package:kableExtra':

    as_image, footnote
The following object is masked from 'package:purrr':

    compose
Loading required package: lmtest
Loading required package: zoo

Attaching package: 'zoo'
The following objects are masked from 'package:base':

    as.Date, as.Date.numeric
Loading required package: MASS

Attaching package: 'MASS'
The following object is masked from 'package:dplyr':

    select
Loading required package: psych

Attaching package: 'psych'
The following objects are masked from 'package:ggplot2':

    %+%, alpha
Loading required package: summarytools

Attaching package: 'summarytools'
The following object is masked from 'package:tibble':

    view
Loading required package: randtests
Loading required package: rapportools

Attaching package: 'rapportools'
The following objects are masked from 'package:summarytools':

    label, label<-
The following object is masked from 'package:dplyr':

    n
The following objects are masked from 'package:stats':

    IQR, median, sd, var
The following objects are masked from 'package:base':

    max, mean, min, range, sum

1 Introducción

Este estudio se enfoca en explorar el mercado de viviendas en Cali-Colombia, una ciudad que ha experimentado cambios significativos en su casco urbano y económico. Con una creciente demanda de vivienda impulsada por factores demográficos, económicos y sociales, entender las tendencias y patrones en el mercado inmobiliario se ha vuelto esencial para inversores, desarrolladores y formuladores de políticas. A través de un análisis detallado de una base de datos de propiedades en venta, este estudio busca identificar las características más relevantes de la oferta de vivienda, incluyendo el precio, la ubicación (zona), el estrato socioeconómico, y el tipo de vivienda (casa o apartamento). Mediante el uso de técnicas estadísticas descriptvia,se pretende extraer insights valiosos que permitan una comprensión más profunda del mercado inmobiliario de Cali. Al determinar las características que más influyen en el precio y la demanda de las viviendas, este estudio proporciona una base para la toma de decisiones informadas en el sector inmobiliario de la ciudad por región.

Esta es una imagen

2 Objetivos

  1. Manejo de datos faltantes y análisis exploratorio de los datos (EDA).
  2. Analisis de los precios de las viviendas en diferentes zonas de Cali.
  3. Identificación de los tipos de viviendas más ofertados en la ciudad.

3 Metodos

No es extraño que en este tipo de aplicaciones haya información que carezca de datos por varias razones, puede haberse producido por un error en el proceso de recopilación de datos, que ciertas medidas no sean aplicables o que, simplemente, determinados campos se hallan dejado en blanco.

Para este caso tenemos los siguientes datos faltantes:

Datos Faltantes por Variable
Variable Datos_Faltantes
id 3
zona 3
piso 2641
estrato 3
preciom 2
areaconst 3
parquea 1606
banios 3
habitac 3
tipo 3
barrio 3
longitud 3
latitud 3

Tal como se muestra en la tabla anterior se evidencia que para la variable “piso y parqueo” cuentan con el mayor numero de observaciones faltantes del data frame, el cual es una proporción muy grande comparado con el tamaño del data frame el cual es de \(8.330\) filas por \(13\) columnas.

Para manejar los datos faltantes en las variables “piso” y “parquea” del dataframe y realizar un análisis descriptivo efectivo, se adoptaron estrategias, considerando el contexto y la naturaleza de los datos.

3.1 Estrategias para Datos Faltantes

3.1.1 Analisís prelimínar

Primero, es crucial entender el significado de cada variable y cómo los datos faltantes pueden influir en el análisis:

\(Piso\): Indica el nivel en el que se encuentra una propiedad dentro de un edificio. Los datos faltantes podrían indicar casas o propiedades que no aplican a esta categoría. Parquea (Parqueadero): Refiere a la disponibilidad de espacio de estacionamiento. Los datos faltantes podrían significar que no se proporcionó esta información o que la propiedad no cuenta con parqueadero.

3.1.2 Imputación:

Para “Piso”: Se podría imputar los datos faltantes con un valor específico que indique “No Aplica” o \("0"\) para casas y terrenos que típicamente no tienen un número de piso.

Pero teniendo en cuenta el comportamiento típico de los tipos de vivienda en Colombia en donde normalmente los apartamentos son de \(1\) piso y las casas de \(1\) o mas pisos por unidad residencial; partiendo del supuesto anterior y aplicando una imputación estrategia para esta variable en donde los valores nulos para el tipo de vivienda apartamento se imputo por el valor escalar de \(1\) piso y para el tipo de vivienda casa se realizó una agrupación por zona y estrato calculando la moda e imputando por este valor de medida central los valores nulos.

\[ \text{Moda} = \underset{x}{\operatorname{argmax}} \, P(X = x) \]

Para “Parquea”: En el caso de los parqueaderos, se podría imputar los valores faltantes con “0” para indicar la ausencia de parqueadero, suponiendo que la falta de información implica la falta del mismo, o un valor que denote “Información no proporcionada”;Para este análisis se razono de manera similar que en la imputación para tipo de viviendas casas, donde se tuvo en cuenta el valor más común de numero de parqueadero correspondiente a la zona de Cali, estrato y tipo de vivienda.

3.2 Analisís exploratrorio de los datos (EDA)

Posterior al manejo de datos faltantes correspondientes a la data frame de B&C y para entender el comportamiento de los precios de vivienda en las diferentes zonas de Cali, se aplicaron técnicas de estadística descriptiva agrupando por las varibales “zona, tipo, estrato”, las cuales permitieron establecer y visualizar patrones de comportamiento de los precios de vivienda en zonas de la ciudad de Cali.

Para el cumplimiento del objetivo trazado se calcularon las siguientes medidas:

  1. Media: \[ \bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i \]
  2. Mediana: \[ \tilde{x} = \begin{cases} x_{(m+1)/2} & \text{si } n \text{ es impar} \\ \frac{1}{2} (x_{m/2} + x_{m/2 + 1}) & \text{si } n \text{ es par} \end{cases} \]
  3. Desviación estándar:

\[ \sigma = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^2} \]

4 Resultados

Como resultado de haber realizado las imputaciones correspondientes, se obtuvo un data frame tidy y sin datos nulos tal como se muestra en la siguiente tabla:

`summarise()` has grouped output by 'estrato'. You can override using the
`.groups` argument.
`summarise()` has grouped output by 'estrato'. You can override using the
`.groups` argument.
       id      zona      piso   estrato   preciom areaconst   parquea    banios 
        3         3         5         3         2         3         3         3 
  habitac      tipo    barrio  longitud   latitud 
        3         3         3         3         3 
Datos Faltantes por Variable
Variable Datos_Faltantes
id 0
zona 0
piso 0
estrato 0
preciom 0
areaconst 0
parquea 0
banios 0
habitac 0
tipo 0
barrio 0
longitud 0
latitud 0

En la distribución por precio y tipo de vivienda en las diferentes zonas de Cali, se evidencia que las viviendas que están ubicada en la zona oeste de la ciudad tienden a ser las más costosas, seguido de la zona sur y la zona norte.

También se nota que los tipos de vivienda pertenecientes a la zona centro y oriente presentan los precios mas bajos en la ciudad de Cali; por otro lado, se evidencia cierto patrón de comportamiento en donde el tipo de vivienda perteneciente a las casas tiende a ser mas costa que los apartamentos y que este comportamiento es independiente a la variable zona.

`summarise()` has grouped output by 'zona', 'estrato'. You can override using
the `.groups` argument.

La relación entre el área de construcción y el precio de vivienda muestra una relación directamente proporcional en el sentido de que entre más área tenga el tipo de vivienda más costosa será el mismo, a excepción de algunas observaciones que pueden ser tomadas como outliers o datos anómalos y deben ser tratados con técnicas de análisis apropiados para ellos; es importante mencionar que este comportamiento es independiente al tipo de vivienda.

Otra forma de visualizar la relación entre el área de la vivienda-precio, es segmentarlo por el estrato tal como se muestra en el siguiente gráfico, es importante mencionar que a medida de que el estrato es mas alto el tipo de vivienda mas frecuente es el de “apartamentos”; nótese que para el estrato \(3\) la mayor concentración de observaciones obedece a las casa pero para el estrato \(6\) la mayor concentración pertenece a las observaciones correspondientes a apartamentos.

   
    Apartamento casa
  3         639  814
  4        1404  727
  5        1767  983
  6        1296  695

Para determinar cual es el tipo de vivienda más ofertado en Cali, se realizaron agrupaciones por el tipo de vivienda, zona y estrato; cabe resaltar que para todas las zonas el tipo de vivienda mas ofertado son los apartamentos, a través de la segmentación por estrato se muestra que este comportamiento solo es diferente para el estrato 3 de la zona centro y oriente que a su vez son las zonas más económicas para la ciudad de Cali tal como se mostró anteriormente. Este comportamiento puede estar relacionado con transiciones en la urbanización de la ciudad que tienden a las unidades residenciales de propiedad horizontal junto que con el tipo de comprador de vivienda presente en la ciudad de cali.

`summarise()` has grouped output by 'zona', 'tipo'. You can override using the
`.groups` argument.

Si abordamos esta relación teniendo en cuenta el valor medio de la variable precio, podemos afirmar que el tipo de vivienda casa es mas costoso que los apartamentos independientemente de los estratos y las zonas, por ende, tiene sentido mencionar que esta puede ser una de las razones por la cual el tipo de vivienda mas ofertado sean los apartamentos.

`summarise()` has grouped output by 'zona', 'tipo'. You can override using the
`.groups` argument.

5 Discución

Este estudio ha revelado insights valiosos sobre el mercado inmobiliario de Cali, destacando cómo las variables de zona, tipo de vivienda, estrato y área de construcción interactúan para influir en los precios de las viviendas. La evidencia sugiere que la zona oeste de la ciudad alberga las propiedades más costosas, lo cual podría reflejar una preferencia por características residenciales específicas o una mayor disponibilidad de servicios y comodidades en esta área. Contrariamente, las zonas centro y oriente presentan opciones más accesibles, sugiriendo una estratificación económica clara dentro del paisaje urbano de Cali.

La observación de que las casas tienden a ser más costosas que los apartamentos, independientemente de la zona, sugiere una valoración consistente de las características únicas que ofrecen las casas, como mayor privacidad, espacio y posiblemente acceso a terrenos. Esta tendencia persiste a pesar de la creciente oferta de apartamentos, lo cual indica una dinámica de mercado compleja donde las preferencias personales y la percepción del valor juegan un papel crucial.

El análisis también reveló una relación directamente proporcional entre el área de construcción y el precio, lo cual es intuitivo pero importante de confirmar. Las excepciones a esta tendencia, identificadas como outliers, subrayan la necesidad de técnicas analíticas sofisticadas para comprender completamente la variabilidad de precios dentro del mercado.

La segmentación por estrato mostró cómo el tipo de vivienda predominante cambia de casas en el estrato 3 a apartamentos en el estrato 6, lo cual podría reflejar cambios en las preferencias de vivienda a medida que aumenta el nivel socioeconómico, o posiblemente diferencias en la disponibilidad de tipos de propiedades en estos segmentos del mercado.

6 Conclusión

Cobra sentido mencionar que este estudio partió del hecho de unas imputaciones basadas en supuestos, para este tipo de casos es fundamental contar con el ojo experto que conozca y valide este tipo de acciones.

Nuestro estudio proporciona una visión integral de las dinámicas del mercado inmobiliario en Cali, destacando la influencia significativa de la zona, el tipo de vivienda, el estrato y el área de construcción en los precios de las viviendas. La predominancia de apartamentos en la oferta de viviendas en la mayoría de las zonas y estratos, con la notable excepción de casas en estratos más bajos en zonas específicas, refleja una tendencia hacia la urbanización y la preferencia por viviendas multifamiliares en áreas urbanas densamente pobladas.

Este estudio subraya la importancia de considerar una variedad de factores al evaluar el mercado inmobiliario, y ofrece una base sólida para futuras investigaciones sobre cómo las tendencias urbanas y las preferencias de vivienda evolucionan en Cali. Además, los hallazgos pueden guiar a los desarrolladores inmobiliarios, inversores y formuladores de políticas en la toma de decisiones informadas, promoviendo estrategias que satisfagan las necesidades de vivienda de la población de Cali de manera equitativa y sostenible.

Finalmente, aunque las casas tienden a ser más costosas que los apartamentos, la mayor oferta de apartamentos sugiere una respuesta del mercado a una demanda creciente de opciones de vivienda más accesibles y adaptadas a un estilo de vida urbano. Este equilibrio entre oferta y demanda refleja la complejidad del mercado inmobiliario de Cali y subraya la necesidad de seguir monitoreando las tendencias del mercado para anticipar las necesidades futuras de vivienda en la ciudad.

7 Anexos

library(tidyverse)

devtools::install_github(“dgonxalex80/paqueteMETODOS”) CARGUA DEL PAQUETE

library(paqueteMETODOS) CARGA DE LA LIBRERIA

data(vivienda_faltantes) CARGA DE LA DATA

df = data.frame(vivienda_faltantes) # DATA EN FORMA DE DATA FRAME

dim(df)

Consultando las lo niveles de las variables tipo caracter

unique(df\(zona) unique(df\)tipo)

la variable ‘tipo’ es una variable de tipo caracter la cual tiene diferentes niveles que siginifican los mismo para manejar este error de input de los datos se hace el siguiente manejo

df\(tipo <- ifelse(df\)tipo %in% c(‘Casa’, ‘CASA’), ‘casa’, df\(tipo) df\)tipo <- ifelse(df\(tipo %in% c('APARTAMENTO', 'apto'), 'Apartamento', df\)tipo)

estandarizar nombre de los barrios limpiar_barrios <- function(nombres) { nombres <- tolower(trimws(iconv(nombres, from = “UTF-8”, to = “ASCII//TRANSLIT”))) nombres <- gsub(“[_ ]”, ““, nombres) return(nombres) }

limpiar_barrios(df\(barrio) unique(df\)barrio)

str(df) estructura del data frame

datos_faltantes =colSums(is.na(df))%>% as.data.frame()%>% tibble::rownames_to_column(“Variable”) %>% setNames(c(“Variable”, “Datos_Faltantes”)) #consulta de datos nulos por variables

kable(datos_faltantes, format = “html”, caption = “Datos Faltantes por Variable”) %>% kable_styling(bootstrap_options = c(“striped”, “hover”))

names(df) datos_faltantes

datos_nulos <- colSums(is.na(df)) %>% as.data.frame() %>% tibble::rownames_to_column(“Variable”) %>% setNames(c(“Variable”, “Datos_Nulos”))

ggplot(datos_nulos, aes(x = Variable, y = Datos_Nulos, fill = Variable)) + geom_bar(stat = “identity”, show.legend = FALSE) + theme_minimal() + labs(title = “Distribución de Datos Nulos por Variable”, x = “Variable”, y = “Cantidad de Datos Nulos”) + theme(axis.text.x = element_text(angle = 45, hjust = 1))

table(df\(zona[is.na(df\)piso)]) # datos faltantes por zona table(df\(tipo[is.na(df\)piso)]) table(df\(barrio[is.na(df\)piso)]) table(df\(tipo[is.na(df\)parquea)]) moda <- function(x) { uniqx <- unique(x) uniqx[which.max(tabulate(match(x, uniqx)))] }

df_moda_piso <- df %>% filter(!is.na(piso), !is.na(estrato)) %>% # Excluir valores NA en ‘piso’ y ‘estrato’ group_by(estrato, zona) %>% summarise(moda_piso = moda(piso)) %>% arrange(estrato, zona)

df_moda_piso

en esta imputacion se plantea el hecho que los apartamentos normalmente en colombia son de 1 piso y las casas son de mas pisos

df_imputado_2 <- df %>% left_join(df_moda_piso, by = c(“zona”, “estrato”)) %>% mutate(piso = if_else(is.na(piso) & tipo == “Apartamento”,1, piso), piso = if_else(is.na(piso) & tipo == “casa”, moda_piso, piso)) %>% dplyr::select(-moda_piso)

Opcional, elimina la columna moda_piso después de la imputación vamos a entender el comportamiento del numero de parquedero teniendo en cuenta la relacion con el estrato y el tipo de vivienda ejemplo enender cual es el numero de apartamento mas comun en apartamentos de estrato 3 igual para casa.

df_moda_parquea <- df_imputado_2 %>% filter(!is.na(parquea), !is.na(estrato)) %>% # Excluir valores NA en ‘piso’ y ‘estrato’ group_by(estrato, tipo) %>% summarise(moda_parquea = moda(parquea)) %>% arrange(estrato, tipo)

df_moda_parquea

df_imputado_3 <- df_imputado_2 %>% left_join(df_moda_parquea, by = c(“estrato”, “tipo”)) %>% mutate(parquea = if_else(is.na(parquea) & tipo == “Apartamento”,moda_parquea, parquea), parquea = if_else(is.na(parquea) & tipo == “casa”, moda_parquea, parquea)) %>% dplyr::select(-moda_parquea)

colSums(is.na(df_imputado_3)) df_sin_nulos = na.omit(df_imputado_3)

df_sin_nulos = colSums(is.na(df_sin_nulos))%>% as.data.frame()%>% tibble::rownames_to_column(“Variable”) %>% setNames(c(“Variable”, “Datos_Faltantes”))

kable(df_sin_nulos, format = “html”, caption = “Datos Faltantes por Variable”) %>% kable_styling(bootstrap_options = c(“striped”, “hover”) estadisticas descriptiva por zonas y estrato

descriptiva_zona_estrato = df_sin_nulos %>% group_by(zona, estrato, tipo) %>% summarise(media=mean(preciom, na.rm=T), mediana = median(preciom, na.rm=T), Desviacion_estandar = sd(preciom, na.rm=T), minimo = min(preciom, na.ram=T), maximo = max(preciom, na.rm=T)) distribucion de los precios de las viviendas por tipo ggplot(df_sin_nulos,aes(x=zona, y= preciom, fill= tipo)) + geom_boxplot() + theme_minimal() + labs(title = “Distribucion de precios por Zona y Tipo de Vivien”, y = “Precio”, x = “Zona”, facet_wrap(~tipo))

ggplot(df_sin_nulos, aes(x=areaconst, y = preciom, color = tipo))+ geom_jitter()+ labs(title = “Relación entre Área de Construcción y Precio de Viviendas”, x = “Área de Construcción (m²)”, y = “Precio”, color = “Tipo de Vivienda”) + theme_minimal(c)

ggplot(df_sin_nulos, aes(x=estrato, y = preciom, color = tipo))+ geom_jitter()+ labs(title = “Relación entre Área de Construcción y Precio de Viviendas”, x = “Estrato”, y = “Área de Construcción (m²)”, color = “Tipo de Vivienda”) + theme_minimal()

tipo de vivienda mas ofertada teniendo en cuenta la zona y el estrato df_agrupado = df_sin_nulos %>% group_by(zona, tipo, estrato) %>% summarise(n= dplyr::n()) %>% arrange(zona, estrato, desc(n))#pareciera de que a medida que el estrato es mas alto, el tipo de vivienda preferido son los apartamentos sobre las casa

grafico library(ggplot2)

ggplot(df_agrupado, aes(x = estrato, y = n, fill = tipo)) + geom_bar(stat = “identity”, position = “dodge”) + facet_wrap(~zona, scales = “free_x”) + labs(title = “Número de Ofertas por Tipo de Vivienda, Zona y Estrato”, x = “Estrato”, y = “Número de Ofertas”, fill = “Tipo de Vivienda”) + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))