Análisis del mercado inmobiliario en la ciudad de Cali (Colombia) - Empresa de Bienes y Casas B&C

Introducción:

El mercado inmobiliario en Colombia, y específicamente en la ciudad de Cali, ha mostrado un crecimiento sostenido que se proyecta continuará en el futuro. Dada esta tendencia, es crucial para B&C (Bienes y Casas) contar con un informe detallado que incluya un análisis estadístico profundo y relevante para su nicho de mercado y su expansión. Este análisis proporciona información clave para la toma de decisiones en áreas como mercadeo, fijación de precios, expansión del mercado, y la personalización de servicios para diferentes clientes. Todo esto contribuirá a que la empresa no solo incremente su rentabilidad y mitigue riesgos, sino que también fortalezca su reputación (goodwill) y eleve la satisfacción de sus clientes

Objetivos:

Este informe busca lograr los siguientes objetivos:

  • Realizar un análisis descriptivo que proporcione información clave sobre el mercado de vivienda.
  • Establecer precios de venta por zonas para desarrollar estrategias de marketing efectivas.
  • Identificar y destacar variables o factores críticos en la base de datos que sean esenciales para la toma de decisiones.

Métodos:

En la realización del informe, es necesario tener en cuenta:

  • Revisar la base de datos correspondiente a “Viviendas_faltantes”, para conocer la información que la misma presenta.
  • La limpieza de datos
  • El análisis de datos para conocer su comportamiento.

Resultados:

  1. La base de datos “vivienda_faltantes”, contiene 8.330 registros distribuidos en 13 columnas, descritas como: id, zona, piso, estrato, preciom,, areaconst, parquea, Banios, tipo, barrio, longitud, latitud, con la cual, se realiza el siguiente proceso:

1.Visión de los datos por columna, sin tener en cuenta aquellos incompletos o NA:

  • La frecuencia de observaciones por la columna Zona son:

La tabla de frecuencia está dada por:

Freq % Valid % Total
Zona Centro 124 1.489 1.489
Zona Norte 1922 23.082 23.073
Zona Oeste 1204 14.459 14.454
Zona Oriente 351 4.215 4.214
Zona Sur 4726 56.755 56.735
3 0.036
Total 8330 100.000 100.000
Análisis de los resultados:
  • La zona en la que se concentra la mayor compra de vivienda en en la zona Sur con el 56,7% de capacidad, seguido de la zona Norte que posee una capacidad del 23,1%.
  • Por el contrario, la zona en la que menos ventas se presenta es en la zona Oeste con un porcentaje del 4,2% de ocupación, que corresponde a tan solo 351 casas o apartamentos.

Las diferentes zonas se muestran en los siguientes gráficos:

  • Columna piso:

Análisis de los resultados:
  • El gráfico indica que la mayor preferencia de elección en la compra de vivienda está en el número 2 y número 3.

  • Es notorio que en los pisos 11 y 12 no hay mucha frecuencia, en comparación con los demás pisos.

  • Columna estrato:

Análisis de los resultados:
  • El gráfico indica que la mayor estrato es el número 5 y existe una diferencia leve entre los estratos 4 y 6.

  • Columna parque:

Análisis de los resultados:
  • El gráfico indica que la mayor preferencia por un espacio vehicular es de uno por hogar.

  • Columna baños:

Análisis de los resultados:
  • El gráfico muestra que la preferencia son dos baños por hogar, seguido por el número 3.

2. Se tiene en cuenta la falta de datos (NA) por las respectivas columnas importantes para el análisis, por lo que se encuentra:

3. Organización de la data:

Con el análisis de los datos NA se pude determinar que los últimos tres datos no son relevantes para el análisis, por lo que la decisión es eliminar los registros que presentan inconsistencias y carecen de información por fila.

Es importante resaltar, que igualmente se analizan aquellos valores que poseen diferente definición de tipo vivienda en el que se encontró alguna semejanza, como lo son:

  1. Apartamento - APARTAMENTO - apto
  2. Casa - casa - CASA
  3. NA

Por lo que se estandariza el tipo de vivienda, dejandole una etiquetaen inicial minúscula, de la siguiente manera:

  1. apartamento
  2. casa
  3. apto
  4. NA

A continuación se muestra la tabla de distribución de frecuencia correspondiente al tipo de vivienda:

Freq % Valid % Total
apartamento 5106 61.319 61.297
casa 3221 38.681 38.667
3 0.036
Total 8330 100.000 100.000
Análisis de los resultados:
  • Entre una casa y un apartamento, quizá debido a los costos o a la influencia de precio reside en que el 61.3% de la población Caleña prefiere habitar un apartamento.

4. Análisis de la data distribuidos con relación al Estrato:

  • Zona centro: Esta zona contine un total de 124 registros, distribuidos así:
    • Estrato 3 = 105 viviendas
    • Estrato 4 = 14 viviendas
    • Estrato 5 = 4 viviendas
    • Estrato 6 = 1 vivienda
  • Zona norte: Esta zona contiene un total de 1922 registros, distribuidos así:
    • Estrato 3 = 572 viviendas
    • Estrato 4 = 408 viviendas
    • Estrato 5 = 770 viviendas
    • Estrato 6 = 172 viviendas
  • Zona sur: Esta zona contiene 4726 registros distribuidos así:
    • Estrato 3 = 382 viviendas
    • Estrato 4 = 1616 viviendas
    • Estrato 5 = 1685 viviendas
    • Estrato 6 = 1043 vivienda
  • Zona Oeste: Esta zona contien 1204 registros distribuidos así:
    • Estrato 3 = 54 viviendas
    • Estrato 4 = 85 viviendas
    • Estrato 5 = 290 viviendas
    • Estrato 6 = 775 vivienda
  • Zona Oriente: Esta zona contien 351 registros distribuidos así:
    • Estrato 3 = 340 viviendas
    • Estrato 4 = 8 viviendas
    • Estrato 5 = 2 viviendas
    • Estrato 6 = 1 vivienda
    La anterior distribución se puede ver en el siguiente gráfico:

5. Análisis de las medidas de tendencia y dispersión de los datos:

  • Con respecto al precio de las propiedades:

    preciom
    Mean 309.69
    Std.Dev 162.15
    Min 100.00
    Q1 187.50
    Median 297.00
    Q3 362.50
    Max 1100.00
    MAD 126.02
    IQR 172.50
    CV 0.52
    Skewness 1.94
    SE.Skewness 0.22
    Kurtosis 5.92
    N.Valid 124.00
    Pct.Valid 100.00
  • Con respecto al área de construcción:

    areaconst
    Mean 194.04
    Std.Dev 109.78
    Min 52.00
    Q1 122.50
    Median 160.00
    Q3 247.50
    Max 750.00
    MAD 94.15
    IQR 122.50
    CV 0.57
    Skewness 1.75
    SE.Skewness 0.22
    Kurtosis 5.07
    N.Valid 124.00
    Pct.Valid 100.00
6. Conclusiones:
  • El promedio del valor de la vivienda en Cali es de $309.69 millones de pesos.
  • El valor de la vivienda más económica se registro en $100 millones.
  • Por el contrario, la vivienda más costosa se registro en $1000 millones más que la vivienda más economica.
  • El 25% de las viviendas reportan un precio igual o inferior a $187.50 millones.
  • El 50% de las viviendas reporta un precio de $297 millones.
  • El 75% de las viviendas reportan un precio mayor o igual a $187.50 millones.
  • El registro de la vivienda con menor área fue de 52 m2.
  • Por el contrario, la vivienda con mayor área fue de 750 m2.
  • El 25% de las viviendas reportan un área igual o onferior a 122.5 m2.
  • El 50% de las viviendas reportan un área de 160 m2.
  • El 75% de las viviendas reportan un área entre 122.5 m2 y 247.50 m2.

Anexos:

Anexo a este documento, se adjunta el código trabajado para la obtención de los anteriores resultados, la cual, puede ser contemplada en el archivo .Rmd.

 #Observar el número de columnas definido en la base de datos.
names(vivienda_faltantes) 
table(vivienda_faltantes$zona)
table(vivienda_faltantes$piso)
table(vivienda_faltantes$estrato)
table(vivienda_faltantes$parquea)
table(vivienda_faltantes$banios)
table(vivienda_faltantes$habitac)
table(vivienda_faltantes$tipo)
table(vivienda_faltantes$barrio)

# Los N/A en las columna.
sum(is.na(vivienda_faltantes$zona))
sum(is.na(vivienda_faltantes$piso)) 
sum(is.na(vivienda_faltantes$estrato))
sum(is.na(vivienda_faltantes$preciom))
sum(is.na(vivienda_faltantes$areaconst))
sum(is.na(vivienda_faltantes$parquea))
sum(is.na(vivienda_faltantes$banios))
sum(is.na(vivienda_faltantes$habitac))
sum(is.na(vivienda_faltantes$tipo))
sum(is.na(vivienda_faltantes$barrio))
na.omit(vivienda_faltantes)

# Ver los valores distintos en cada columna zona.
VF_ZonaCentro = subset(vivienda_faltantes, vivienda_faltantes$zona == 'Zona Centro')
VF_ZonaSur = subset(vivienda_faltantes, vivienda_faltantes$zona == 'Zona Sur')
VF_ZonaOeste = subset(vivienda_faltantes, vivienda_faltantes$zona == 'Zona Oeste')
VF_ZonaNorte = subset(vivienda_faltantes, vivienda_faltantes$zona == 'Zona Norte')
VF_ZonaOriente = subset(vivienda_faltantes, vivienda_faltantes$zona == 'Zona Oriente')


# Saber que valores distintos están en cada columna.
distinct(select(vivienda_faltantes, piso)) 
distinct(select(vivienda_faltantes, estrato)) 
distinct(select(vivienda_faltantes, parquea)) 
distinct(select(vivienda_faltantes, banios))
distinct(select(vivienda_faltantes, habitac)) 
distinct(select(vivienda_faltantes, tipo)) 
 
 # Arreglo de la data para que sea uniforme para la columna tipo estrato

vivienda_faltantes$tipo=str_to_lower(vivienda_faltantes$tipo) 
vivienda_faltantes$tipo[vivienda_faltantes$tipo=='apto']='apartamento'
vf_zonaCentro_estrato3 = subset(VF_ZonaCentro, VF_ZonaCentro$estrato == 3)
vf_zonaCentro_estrato4 = subset(VF_ZonaCentro, VF_ZonaCentro$estrato == 4)
vf_zonaCentro_estrato5 = subset(VF_ZonaCentro, VF_ZonaCentro$estrato == 5)
vf_zonaCentro_estrato6 = subset(VF_ZonaCentro, VF_ZonaCentro$estrato == 6)
vf_zonaNorte_estrato3 = subset(VF_ZonaNorte, VF_ZonaNorte$estrato == 3)
vf_zonaNorte_estrato4 = subset(VF_ZonaNorte, VF_ZonaNorte$estrato == 4)
vf_zonaNorte_estrato5 = subset(VF_ZonaNorte, VF_ZonaNorte$estrato == 5)
vf_zonaNorte_estrato6 = subset(VF_ZonaNorte, VF_ZonaNorte$estrato == 6)
vf_zonaSur_estrato3 = subset(VF_ZonaSur, VF_ZonaSur$estrato == 3)
vf_zonaSur_estrato4 = subset(VF_ZonaSur, VF_ZonaSur$estrato == 4)
vf_zonaSur_estrato5 = subset(VF_ZonaSur, VF_ZonaSur$estrato == 5)
vf_zonaSur_estrato6 = subset(VF_ZonaSur, VF_ZonaSur$estrato == 6)
vf_zonaOeste_estrato3 = subset(VF_ZonaOeste, VF_ZonaOeste$estrato == 3)
vf_zonaOeste_estrato4 = subset(VF_ZonaOeste, VF_ZonaOeste$estrato == 4)
vf_zonaOeste_estrato5 = subset(VF_ZonaOeste, VF_ZonaOeste$estrato == 5)
vf_zonaOeste_estrato6 = subset(VF_ZonaOeste, VF_ZonaOeste$estrato == 6)
vf_zonaOriente_estrato3 = subset(VF_ZonaOriente, VF_ZonaOriente$estrato == 3)
vf_zonaOriente_estrato4 = subset(VF_ZonaOriente, VF_ZonaOriente$estrato == 4)
vf_zonaOriente_estrato5 = subset(VF_ZonaOriente, VF_ZonaOriente$estrato == 5)
vf_zonaOriente_estrato6 = subset(VF_ZonaOriente, VF_ZonaOriente$estrato == 6)


#Graficos: 
#Zona: Apart vs casa
id <- 1:10
zona <- c("Norte", "Sur", "Este", "Oeste", "Norte", "Sur", "Este", "Oeste", "Norte", "Sur")
piso <- sample(1:10, 10, replace = TRUE)
estrato <- sample(1:6, 10, replace = TRUE)
preciom <- runif(10, min = 100000, max = 500000)
areaconst <- runif(10, min = 50, max = 200)
parquea <- sample(0:1, 10, replace = TRUE)
banios <- sample(1:4, 10, replace = TRUE)
habitac <- sample(1:5, 10, replace = TRUE)
tipo <- sample(c("Casa", "Apartamento"), 10, replace = TRUE)
barrio <- sample(c("Barrio A", "Barrio B", "Barrio C"), 10, replace = TRUE)
longitud <- runif(10, min = -75, max = -74)
latitud <- runif(10, min = 4, max = 5)

# Crear el data frame con la variable 'zona' en minúsculas
df <- data.frame(id, zona, piso, estrato, preciom, areaconst, parquea, banios, habitac, tipo, barrio, longitud, latitud)

# Gráfico de barras apiladas usando ggplot2
ggplot(df, aes(x = zona, fill = tipo)) +
  geom_bar(position = "fill") +
  labs(title = "Proporción de Tipos de Propiedad por Zona", x = "Zona", y = "Proporción") 

#Zona de preferencia
frecuencia <- c(124, 1922, 1204, 351, 4726)

df <- data.frame(zona, frecuencia)   # Data frame

# Gráfico de barras
ggplot(df, aes(x = zona, y = frecuencia, fill = zona)) +
  geom_bar(stat = "identity") +
  labs(title = "Frecuencia de Observaciones por Zona", x = "Zona", y = "Frecuencia") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

#Pisos
piso <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
frecuencia_piso <- c(861, 1450, 1097, 607, 568, 245, 207, 211, 146, 130, 84, 83)

df_piso <- data.frame(piso, frecuencia_piso)

# Gráfico de barras
ggplot(df_piso, aes(x = factor(piso), y = frecuencia_piso)) +
  geom_bar(stat = "identity", fill = "violet") +
  labs(title = "Frecuencia por Número de Pisos", x = "Número de Pisos", y = "Frecuencia") +
  theme_minimal()

#Estrato
estrato <- c(3, 4, 5, 6)
frecuencia_estrato <- c(1453, 2131, 2751, 1992)

# Data frame
df_estrato <- data.frame(estrato, frecuencia_estrato)

# Gráfico de barras
ggplot(df_estrato, aes(x = factor(estrato), y = frecuencia_estrato)) +
  geom_bar(stat = "identity", fill = "lightgreen") +
  labs(title = "Frecuencia por Estrato", x = "Estrato", y = "Frecuencia") +
  theme_minimal()

#Parqueadero
parquea <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
frecuencia_parquea <- c(3156, 2478, 521, 386, 68, 68, 18, 17, 4, 8)

# Crear un data frame
df_parquea <- data.frame(parquea, frecuencia_parquea)

# Gráfico de barras
ggplot(df_parquea, aes(x = factor(parquea), y = frecuencia_parquea)) +
  geom_bar(stat = "identity", fill = "orange") +
  labs(title = "Frecuencia por Número de Plazas de Aparcamiento", x = "Número de Plazas", y = "Frecuencia") +
  theme_minimal()

#Baños
banios <- c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
frecuencia_banios <- c(45, 497, 2946, 1994, 1460, 891, 315, 107, 45, 15, 9)

# Crear un data frame
df_banios <- data.frame(banios, frecuencia_banios)

# Gráfico de barras
ggplot(df_banios, aes(x = factor(banios), y = frecuencia_banios)) +
  geom_bar(stat = "identity", fill = "purple") +
  labs(title = "Frecuencia por Número de Baños", x = "Número de Baños", y = "Frecuencia") +
  theme_minimal()

#N/A
categorias <- c("piso", "parquea", "zona", "estrato", "areaconst", "preciom", "banios", "habitac", "tipo", "barrio")
frecuencias <- c(2641, 1606, 3, 3, 3, 2, 3, 3, 3, 3)

# Crear un data frame
df <- data.frame(categorias, frecuencias)

# Crear gráfico de barras
ggplot(df, aes(x = categorias, y = frecuencias, fill = categorias)) +
   geom_bar(stat = "identity") +  # Ajusta el ancho de las barras
  labs(title = "Frecuencia de Categorías", x = "Categorías", y = "Frecuencia") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

#Circular para Zona:
summarytools::descr(VF_ZonaCentro$preciom)
summarytools::freq(vivienda_faltantes$zona, cumul = F)
t1 = table(vivienda_faltantes$zona)
pie(t1, vivienda_faltantes$zona)
t2=table(vivienda_faltantes$zona, vivienda_faltantes$estrato)
barplot(t2,last=1)