Introducción

La empresa B&C (Bines y Casas) es una reconocida agencia de bienes raíces con sede en la ciudad de Cali, Colombia. La compañia a experimentado un notable crecimiento y desean tener un entendimeinto de los datos recopilados.

Objetivos

El presente informe tiene como objetivo principal realizar un análisis estadístico de la información recopilada por la empresa B&C sobre el mercado de viviendas en Cali. Para ello, se plantean los siguientes objetivos específicos:

  1. Analizar el precio de las viviendas en diferentes zonas de Cali e identificar posibles tendencias o disparidades en los precios.
  2. Determinar los tipos de viviendas más ofertadas en el mercado inmobiliario de Cali y evaluar su relevancia en términos de demanda.
  3. Identificar las características más relevantes de la oferta de vivienda en Cali, tales como tamaño, número de habitaciones, entre otros, y su impacto en el mercado.

Métodos

Se utilizaron para variables cualitativas tablas y graficos y para las variables cuantitativas se calculan además indicadores de tendencia central posicion y dispersion.

El análisis descriptivo de los datos permitirá identificar tendencias y patrones relevantes en el mercado de bienes raíces de Cali, proporcionando a la empresa B&C una visión integral que respalde la toma de decisiones estratégicas para su negocio.

Resultados

Depuración base de datos

library(paqueteMETODOS)
library(kableExtra)
library(dplyr)
library(mice)
data("vivienda_faltantes")
viviendas = vivienda_faltantes
rm(vivienda_faltantes)

Se utilizó la función summary para tener un vistazo de la data que se va a trabajar y allí se pueden encontrar algunos estadísticos de la información.

resumen <- viviendas[, c("estrato", "preciom", "areaconst", "banios", "habitac")]


resumen_f <- summary (resumen)
#resumen_f <- subset(resumen,select = c(estrato,preciom,areaconst,banios,habitac))
# Crear la tabla formateada con kableExtra
tbl_resumen <- resumen_f %>% 
  kbl() %>%
  kable_paper(full_width = FALSE) %>%
  row_spec(0, bold = TRUE) %>%
  column_spec(2:3, width = "3cm")%>%
  collapse_rows(columns = 1, valign = "middle")

# Mostrar la tabla formateada
tbl_resumen
estrato preciom areaconst banios habitac
Min. :3.000 Min. : 58.0 Min. : 30 Min. : 0.000 Min. : 0.000
1st Qu.:4.000 1st Qu.: 220.0 1st Qu.: 80 1st Qu.: 2.000 1st Qu.: 3.000
Median :5.000 Median : 330.0 Median : 123 Median : 3.000 Median : 3.000
Mean :4.634 Mean : 434.2 Mean : 175 Mean : 3.112 Mean : 3.605
3rd Qu.:5.000 3rd Qu.: 540.0 3rd Qu.: 229 3rd Qu.: 4.000 3rd Qu.: 4.000
Max. :6.000 Max. :1999.0 Max. :1745 Max. :10.000 Max. :10.000
NA’s :3 NA’s :2 NA’s :3 NA’s :3 NA’s :3

Limpieza

Realizando la revisión de los datos se evidencia que el campo “tipo” necesita normalizar sus registros, por consiguiente se procede a realizar los ajustes.

table(viviendas$tipo)
## 
## Apartamento APARTAMENTO        apto        casa        Casa        CASA 
##        5032          61          13          14        3195          12
# Cambiar mayúsculas por minúsculas en la columna 'tipo'
viviendas$tipo <- tolower(viviendas$tipo) 

# Cambiar 'apto' por 'apartamento' en la columna 'tipo'
viviendas <- viviendas %>%
  mutate(tipo = ifelse(tipo == "apto","apartamento",tipo))

# Contar la frecuencia de cada tipo de vivienda y convertirlo en un data frame
tipo_df <- as.data.frame(table(viviendas$tipo))
tipo_df

Así mismo al campo “barrio” se le realiza una normalización

# Cambiar mayúsculas por minúsculas en la columna 'barrio'
viviendas$barrio <- tolower(viviendas$barrio) 

# Quitar tildes
viviendas$barrio <- iconv(viviendas$barrio, "UTF-8" , "ASCII//TRANSLIT")

#Normalización de Barrios
viviendas <- viviendas %>%
  mutate(barrio = case_when(
    barrio == "agua blanca" ~ "aguablanca",
    barrio == "alameda del rio" ~ "alameda",
    barrio == "alf?Crez real" ~ "alferez real",
    barrio == "agua blanca" ~ "aguablanca",
    barrio == "alfonso lopez i" ~ "alfonso lopez",
    barrio == "base a?Crea" ~ "base aerea",
    barrio == "bella suiza alta" ~ "bella suiza",
    barrio == "calibella" ~ "cali bella",
    barrio == "cali canto" ~ "calicanto",
    barrio == "calicanto" ~ "calicanto",
    barrio == "canaverales los semanes" ~ "canaverales",
    barrio == "caney especial" ~ "caney",
    barrio == "el caney" ~ "caney",
    barrio == "chiminangos 1 etapa" ~ "chiminangos",
    barrio == "chiminangos 2 etapa" ~ "chiminangos",
    barrio == "ciudad cordoba reservado" ~ "ciudad cordoba",
    barrio == "ciudad jardin pance" ~ "ciudad jardin",
    barrio == "ciudad mel?Cndez" ~ "ciudad melendez",
    barrio == "paso ancho" ~ "pasoancho",
    barrio == "el ingenio 3" ~ "el ingenio iii",
    barrio == "el tr?Cbol" ~ "el trebol",
    barrio == "alborada"~"la alborada",
    barrio == "arboleda"~"arboledas",
    barrio == "arboleda campestre candelaria"~"arboledas",
    barrio == "barrio 7de agosto"~"siete de agosto",
    barrio == "barrio el recuerdo"~"el recuerdo",
    barrio == "barrio tranquilo y"~"barrio tranquilo",
    barrio == "base a?Crea"~"base aerea",
    barrio == "brisas de los"~"brisas de los alamos",
    barrio == "calicanto viii"~"calicanto",
    barrio == "canaverales los samanes"~"canaverales",
    barrio == "ciudad capri"~"capri",
    barrio == "ciudad mel?Cndez"~"ciudad melendez",
    barrio == "el ingenio i"~"el ingenio",
    barrio == "el ingenio ii"~"el ingenio",
    barrio == "el ingenio iii"~"el ingenio",
    barrio == "el tr?Cbol"~"el trebol",
    barrio == "guadalupe alto"~"guadalupe",
    barrio == "ingenio"~"el ingenio",
    barrio == "ingenio i"~"el ingenio",
    barrio == "ingenio ii"~"el ingenio",
    barrio == "juanamb??"~"juanambu",
    barrio == "la portada al"~"la portada",
    barrio == "la rivera i"~"la rivera",
    barrio == "la rivera ii"~"la rivera",
    barrio == "la riverita"~"la rivera",
    barrio == "la riviera"~"la rivera",
    barrio == "la villa del"~"la villa",
    barrio == "laflora"~"la flora",
    barrio == "las am?cricas"~"las americas",
    barrio == "las quintas de"~"las quintas",
    barrio == "los parques barranquilla"~"barranquilla",
    barrio == "mel?Cndez"~"melendez",
    barrio == "normandia west point"~"normandia",
    barrio == "pampalinda"~"pampa linda",
    barrio == "paseo de los"~"paseo de los almendros",
    barrio == "rep??blica de israel"~"republica de israel",
    barrio == "urbanizacion lili"~"valle de lili",
    barrio == "urbanizacion rio lili"~"valle de lili",
    barrio == "valle del lili"~"valle de lili",
    
    TRUE ~ barrio  # Mantener el mismo valor si no se cumple ninguna condición anterior
  ))

# Contar la frecuencia de cada barrio de vivienda y convertirlo en un data frame
barrio_df <- as.data.frame(table(viviendas$barrio))
barrio_df

Datos Faltantes

Es importante entender que las bases de datos pueden contener datos faltantes que pueden afectar el análisis que se quiera desarrollar, por consiguiente se debe analizar qué campos tienen estas incidencias.

library(naniar)
gg_miss_var(viviendas) # grafico de datos faltantes

viviendas <- viviendas[!is.na(viviendas$id), ]

En la base de datos de la compañia B&C se encontró que las columnas “parquea” y “piso” poseen esta incidencia; adicionalmente, se encontraron 3 filas con nulos para todas las columnas, se procedió a omitir estos registros y analizar las demas columnas con datos vacios.

Se hizo un análisis con los campos faltantes para ver si estos tenían alguna relación con alguna otra variable. Para la variable de parqueadero se encontró lo siguiente:

Datos Faltantes Parqueadero

No existe una relación a simple vista entre el tipo y la falta de datos de los parqueaderos por la variable de cantidad, ya que las cantidades son muy similares entre apartamentos y casas respectivamente; Sin embargo al analizar el precio promedio de las viviendas con los datos vacíos versus aquellos que sí tienen parqueadero, es notable que aquellas viviendas que tienen el campo de parqueadero vacío son mucho más baratas, esto puede ser un indicativo de que estas viviendas no cuentan con parqueadero.

A continuación se deja relacionado el nombre de las variables con su descripción:

c_viv_parq_vacio = cantidad de viviendas con parqueaderos vacios

p_prom_viv_parq_vacio = precio promedio viviendas con parqueaderos vacios

c_viv_parq = cantidad de viviendas con parqueaderos

p_prom_viv_parq = precio promedio viviendas con parqueaderos

library(ggplot2)
# parqueaderos vacios por tipo de vivienda 

parqueadero_tipo <- viviendas %>%
  group_by(tipo) %>%
  summarise(
    c_viv_parq_vacio = sum(is.na(parquea)),
    c_viv_parq = sum(!is.na(parquea)),
    c_ = sprintf("%.2f%%", (c_viv_parq_vacio / c_viv_parq) * 100),
    p_prom_viv_parq_vacio = mean(preciom[is.na(parquea)], na.rm = TRUE),
    p_prom_viv_parq = mean(preciom[!is.na(parquea)], na.rm = TRUE),
    p_ = sprintf("%.2f%%", (p_prom_viv_parq_vacio / p_prom_viv_parq) * 100),
  )


# Crear la tabla formateada con kableExtra
tbl_parqueadero_tipo <- parqueadero_tipo %>%
  kbl() %>%
  kable_paper(full_width = FALSE) %>%
  row_spec(0, bold = TRUE) %>%
  column_spec(2:3, width = "1cm")%>%
  collapse_rows(columns = 1, valign = "middle")

# Mostrar la tabla formateada
tbl_parqueadero_tipo
tipo c_viv_parq_vacio c_viv_parq c_ p_prom_viv_parq_vacio p_prom_viv_parq p_
apartamento 869 4237 20.51% 199.0506 402.1975 49.49%
casa 734 2487 29.51% 391.4918 583.6691 67.07%
# parqueaderos vacios por zona
parqueadero_zona <- viviendas %>%
  group_by(zona) %>%
  summarise(
    c_viv_parq_vacio = sum(is.na(parquea)),
    c_viv_parq = sum(!is.na(parquea)),
    c_ = sprintf("%.2f%%", (c_viv_parq_vacio / c_viv_parq) * 100),
    p_prom_viv_parq_vacio = mean(preciom[is.na(parquea)], na.rm = TRUE),
    p_prom_viv_parq = mean(preciom[!is.na(parquea)], na.rm = TRUE),
    p_ = sprintf("%.2f%%", (p_prom_viv_parq_vacio / p_prom_viv_parq) * 100),
  )
# Crear la tabla formateada con kableExtra
tbl_parqueadero_zona <- parqueadero_zona %>%
  kbl() %>%
  kable_paper(full_width = FALSE) %>%
  row_spec(0, bold = TRUE) %>%
  column_spec(2:3, width = "1cm")%>%
  collapse_rows(columns = 1, valign = "middle")

# Mostrar la tabla formateada
tbl_parqueadero_zona
zona c_viv_parq_vacio c_viv_parq c_ p_prom_viv_parq_vacio p_prom_viv_parq p_
Zona Centro 60 64 93.75% 283.3500 334.3906 84.74%
Zona Norte 633 1289 49.11% 294.8073 370.7797 79.51%
Zona Oeste 101 1103 9.16% 450.4950 699.5793 64.40%
Zona Oriente 188 163 115.34% 198.7500 262.8773 75.61%
Zona Sur 621 4105 15.13% 279.9533 448.6906 62.39%

Datos Faltantes Piso

# Pisos vacios por tipo de vivienda
piso_tipo <- viviendas %>%
  group_by(tipo) %>%
  summarise(
    c_viv_parq_vacio = sum(is.na(piso)),
    c_viv_parq = sum(!is.na(piso)),
    c_ = sprintf("%.2f%%", (c_viv_parq_vacio / c_viv_parq) * 100),
    p_prom_viv_parq_vacio = mean(preciom[is.na(piso)], na.rm = TRUE),
    p_prom_viv_parq = mean(preciom[!is.na(piso)], na.rm = TRUE),
    p_ = sprintf("%.2f%%", (p_prom_viv_parq_vacio / p_prom_viv_parq) * 100),
    c_pisos_prom = mean(piso[!is_na(piso)],na.rm = TRUE)
  )
# Crear la tabla formateada con kableExtra
tbl_piso_tipo <- piso_tipo %>%
  kbl() %>%
  kable_paper(full_width = FALSE) %>%
  row_spec(0, bold = TRUE) %>%
  column_spec(2:3, width = "1cm")%>%
  collapse_rows(columns = 1, valign = "middle")

# Mostrar la tabla formateada
tbl_piso_tipo
tipo c_viv_parq_vacio c_viv_parq c_ p_prom_viv_parq_vacio p_prom_viv_parq p_ c_pisos_prom
apartamento 1383 3723 37.15% 392.7173 358.3019 109.61% 4.634703
casa 1255 1966 63.84% 526.4629 548.4379 95.99% 2.139369
# Pisos vacios por zona
piso_zona <- viviendas %>%
  group_by(zona) %>%
  summarise(
    c_viv_parq_vacio = sum(is.na(piso)),
    c_viv_parq = sum(!is.na(piso)),
    c_ = sprintf("%.2f%%", (c_viv_parq_vacio / c_viv_parq) * 100),
    p_prom_viv_parq_vacio = mean(preciom[is.na(piso)], na.rm = TRUE),
    p_prom_viv_parq = mean(preciom[!is.na(piso)], na.rm = TRUE),
    p_ = sprintf("%.2f%%", (p_prom_viv_parq_vacio / p_prom_viv_parq) * 100),
    c_pisos_prom = mean(piso[!is_na(piso)],na.rm = TRUE)
  )
# Crear la tabla formateada con kableExtra
tbl_piso_zona <- piso_zona %>%
  kbl() %>%
  kable_paper(full_width = FALSE) %>%
  row_spec(0, bold = TRUE) %>%
  column_spec(2:3, width = "1cm")%>%
  collapse_rows(columns = 1, valign = "middle")

# Mostrar la tabla formateada
tbl_piso_zona
zona c_viv_parq_vacio c_viv_parq c_ p_prom_viv_parq_vacio p_prom_viv_parq p_ c_pisos_prom
Zona Centro 55 69 79.71% 366.5091 264.4058 138.62% 2.260870
Zona Norte 782 1140 68.60% 361.8683 334.7079 108.11% 3.985965
Zona Oeste 395 809 48.83% 699.0481 668.7417 104.53% 4.699629
Zona Oriente 143 208 68.75% 235.9161 223.4519 105.58% 2.134615
Zona Sur 1263 3463 36.47% 467.8068 411.4600 113.69% 3.613919

Análisis Estadístico

Tablas de frecuencia

Las tablas de frecuencia revelan que la región con la mayor cifra de ventas es la zona sur, alcanzando un total de 2015727 millones de pesos colombianos (COP), lo que representa el 55.74% del volumen total de ventas. De manera similar, esta región ostenta el área más extensa en metros cuadrados, sumando un total de 819073, equivalente al 56.21% del área total vendida por la empresa B&C.

Por otro lado, se observa que la zona con menor desempeño en términos de ventas es la zona centro, con apenas un 1% del total de ventas, reflejando una proporción similar en términos de área vendida, también del 1%.

A continuación se deja relacionado el nombre de las variables con su descripción:

valor_venta = Suma del precio total de la vivienda

va_area = Suma del área total construida

va_preciom2 = Precio predio pomor unidad de área

fr_valor_venta = Frecuencia relativa del precio por zona

fr_area = Frecuencia relativa del área por zona

fr_preciom2 = Frecuencia relativa del precio por unidad de área por zona

Zona

viviendas_f <- subset(viviendas,select = c(estrato,preciom,areaconst,banios,habitac,tipo,zona)) # Se filtra la tabla de viviendas para solo usar las colunmas con datos completos

zonas_cali <- viviendas_f %>%
  group_by(zona) %>%
  summarise(
    Valor_venta = sum(preciom, na.rm = TRUE), # Suma del precio total
    #c_viviendas = n()# Cantidad total de viviendas
    va_area = sum(areaconst),  # Suma del área total construida
    va_preciom2 = sum(preciom) / sum(areaconst)  # Precio predio pomor unidad de área
  ) %>%
  mutate(
    fr_valor_venta = Valor_venta / sum(Valor_venta), # Frecuencia relativa del precio por zona
    #fr_c_viviendas = c_viviendas / sum(c_viviendas) # Frecuencia relativa de la cantidad de viviendas por zona
     fr_area = va_area / sum(va_area), # Frecuencia relativa del área por zona
    fr_preciom2 = va_preciom2 / sum(va_preciom2)   # Frecuencia relativa del precio por unidad de área por zona
  ) %>%
  arrange(desc(Valor_venta))  # Ordenar por Valor_venta de mayor a menor

# Crear la tabla formateada con kableExtra
tbl_zona <- zonas_cali %>%
  kbl() %>%
  kable_paper(full_width = FALSE) %>%
  row_spec(0, bold = TRUE) %>%
  column_spec(2:3, width = "1cm")%>%
  collapse_rows(columns = 1, valign = "middle")

# Mostrar la tabla formateada
tbl_zona
zona Valor_venta va_area va_preciom2 fr_valor_venta fr_area fr_preciom2
Zona Sur 2015727 819073.53 2.460983 0.5574418 0.5621174 0.2269581
Zona Oeste 817137 236609.23 3.453526 0.2259762 0.1623812 0.3184929
Zona Norte 664549 309869.66 2.144605 0.1837786 0.2126587 0.1977809
Zona Oriente 80215 67508.07 1.188214 0.0221832 0.0463297 0.1095801
Zona Centro 38403 24061.26 1.596010 0.0106202 0.0165129 0.1471880

Tipo

La tabla de frecuencias correspondiente al tipo de vivienda revela que los apartamentos son los que registran las ventas más altas en pesos colombianos (COP), alcanzando la cifra de 1877087 millones de pesos, lo que representa un 51.19% del total de ventas. Además, el área total vendida de apartamentos asciende a 576,683 metros cuadrados, equivalente al 39.57% del total.

Por otro lado, las casas presentan un valor de ventas ligeramente inferior, alcanzando los 1738941 millones de pesos, con una frecuencia del 48%. Sin embargo, sorprendentemente, el área total vendida de casas representa el 60.42% del total, lo que sugiere que, a pesar de su valor de venta menor, las casas son, en promedio, de mayor tamaño, posiblemente debido al número de pisos que poseen.

tipo_viv_cali <- viviendas_f %>%
  group_by(tipo) %>%
  summarise(
    Valor_venta = sum(preciom, na.rm = TRUE), # Suma del precio total
    #c_viviendas = n()# Cantidad total de viviendas
    va_area = sum(areaconst),  # Suma del área total construida
    va_preciom2 = sum(preciom) / sum(areaconst)  # Precio promedio por unidad de área
  ) %>%
  mutate(
    fr_valor_venta = Valor_venta / sum(Valor_venta), # Frecuencia relativa del precio por zona
    #fr_c_viviendas = c_viviendas / sum(c_viviendas) # Frecuencia relativa de la cantidad de viviendas por zona
     fr_area = va_area / sum(va_area), # Frecuencia relativa del área por zona
    fr_preciom2 = va_preciom2 / sum(va_preciom2)   # Frecuencia relativa del precio por unidad de área por zona
  ) %>%
  arrange(desc(Valor_venta))  # Ordenar por Valor_venta de mayor a menor

# Crear la tabla formateada con kableExtra
tbl_tipo <- tipo_viv_cali %>%
  kbl() %>%
  kable_paper(full_width = FALSE) %>%
  row_spec(0, bold = TRUE) %>%
  column_spec(2:3, width = "1cm")%>%
  collapse_rows(columns = 1, valign = "middle")

# Mostrar la tabla formateada
tbl_tipo
tipo Valor_venta va_area va_preciom2 fr_valor_venta fr_area fr_preciom2
apartamento 1877087 576683.9 3.254965 0.5191019 0.3957692 0.6223583
casa 1738941 880437.9 1.975085 0.4808981 0.6042308 0.3776417

Indicadores de Posición

Se evidencia una distribución de ventas donde la Zona Norte, la Zona Sur y la zona Oeste concentran principalmente la venta de apartamentos, mientras que en la Zona Oriente prevalece la comercialización de casas, sin embargo la zona sur tiene gran numero de venta de casas de alto precio. Además, se puede observar que la zona Centro, la venta predominante es de casas, aunque en menor cantidad en comparación con las zonas Norte, Sur y Oriente.

suppressWarnings({
  # Definir la paleta de colores
  paleta6 <- c("#287E8F", "#F6B53D", "#F6E271", "#F6B916", "#F69312", "#BC6C25")

  # Seleccionar columnas para la gráfica
  seleccion_viviendas <- viviendas[, c("preciom", "zona", "tipo")]

  # Crear el gráfico
  p1 <- ggplot(seleccion_viviendas, aes(y = preciom, x = zona, color = tipo)) +
    geom_jitter(size = 1, alpha = 0.9) +
    scale_color_manual(values = paleta6) +  # Asignar colores personalizados
    labs(title = "Ventas por Zona y Tipo de Vivienda",
         y = "Precio Venta - COP",
         x = "Zonas de Cali") +
    ylim(50, 2000)

  # Mostrar el gráfico
  print(p1)
})

Indicadores de Centro

Casas: Las casas tienen un promedio de estrato de aproximadamente 4-5, con un mínimo de 3 y un máximo de 6. En cuanto al precio, el rango va desde 77 hasta 1999 millones de pesos (COP), con un precio promedio de alrededor de 540 milones de pesos (COP). La superficie construida varía ampliamente, con un mínimo de 30 y un máximo de 1745 mts2, con un promedio de aproximadamente 273 mts2.

Apartamentos: Los apartamentos tienen un promedio de estrato ligeramente mayor, alrededor de 4-7, con un mínimo de 3 y un máximo de 6. En términos de precio, tienen un rango similar al de las casas, con precios que van desde 58 hasta 1950 millones de pesos (COP), y un precio promedio de aproximadamente 368 millones de pesos (COP). La superficie construida promedio es significativamente menor que la de las casas, con un valor medio de aproximadamente 113Mts2 y un rango de 35 a 932mts2.

Comparación: Comparando las dos categorías, vemos que en promedio los apartamentos tienden a tener un estrato ligeramente más alto que las casas. Además, aunque los precios mínimos y máximos son comparables entre las dos categorías, el precio promedio de los apartamentos es ligeramente más bajo que el de las casas.

Resumen de las características de las viviendas tipo ‘casa’

casas <- subset(viviendas, tipo == "casa")
# Obtener un resumen de las viviendas del tipo 'casa'
summary(subset(casas,select = c(estrato,preciom,areaconst)))
##     estrato         preciom         areaconst     
##  Min.   :3.000   Min.   :  77.0   Min.   :  30.0  
##  1st Qu.:3.000   1st Qu.: 300.0   1st Qu.: 154.0  
##  Median :5.000   Median : 430.0   Median : 240.0  
##  Mean   :4.485   Mean   : 539.9   Mean   : 273.3  
##  3rd Qu.:5.000   3rd Qu.: 670.0   3rd Qu.: 350.0  
##  Max.   :6.000   Max.   :1999.0   Max.   :1745.0

Resumen de las características de las viviendas tipo ‘apartamento’

apartamentos <- subset(viviendas, tipo == "apartamento")
# Obtener un resumen de las viviendas del tipo 'apartamento'
summary(subset(apartamentos,select = c(estrato,preciom,areaconst)))
##     estrato         preciom         areaconst    
##  Min.   :3.000   Min.   :  58.0   Min.   : 35.0  
##  1st Qu.:4.000   1st Qu.: 175.0   1st Qu.: 68.0  
##  Median :5.000   Median : 280.0   Median : 90.0  
##  Mean   :4.729   Mean   : 367.6   Mean   :112.9  
##  3rd Qu.:6.000   3rd Qu.: 430.0   3rd Qu.:130.0  
##  Max.   :6.000   Max.   :1950.0   Max.   :932.0

Indicadores de Dispersión

Rango: La diferencia entre el valor máximo y el valor mínimo de las ventas de casas es de 1922 millones de pesos (COP), lo que sugiere una variabilidad significativa en los precios de venta.

Varianza: La varianza, que mide qué tan dispersos están los valores de venta alrededor de la media, es de aproximadamente 128284.54, indicando una dispersión considerable en los precios.

Desviación Estándar: La desviación estándar, que es una medida de dispersión en la misma escala que los datos originales, es de alrededor de 358.17, lo que significa que los precios de venta tienden a desviarse en promedio alrededor de 358.17 millones de pesos (COP).

Coeficiente de Variación: El coeficiente de variación es del 66.34%, lo que indica una alta variabilidad relativa en los precios de venta en comparación con la media.

Resumen indicadores de dispersión de las viviendas tipo ‘casa’

# Calculamos el rango
rango_precios <- max(casas$preciom)-min(casas$preciom)

# Calculamos la varianza
varianza_precios <- var(casas$preciom)

# Calculamos la desviación estándar
desviacion_estandar_precios <- sd(casas$preciom)

# Calculamos el coeficiente de variación
coeficiente_variacion_precios <- (desviacion_estandar_precios / mean(casas$preciom)) * 100

# Creamos un data frame con los resultados
resultados_casas <- data.frame(
  Estadístico = c("Rango", "Varianza", "Desviación Estándar", "Coeficiente de Variación"),
  Valor = c(rango_precios, varianza_precios, desviacion_estandar_precios, coeficiente_variacion_precios)
)

# Imprimimos los resultados
print(resultados_casas)
##                Estadístico        Valor
## 1                    Rango   1922.00000
## 2                 Varianza 128284.54172
## 3      Desviación Estándar    358.16831
## 4 Coeficiente de Variación     66.34272

Rango: El rango de precios de venta para los apartamentos es de 1892 Millones de pesos, lo que indica una variabilidad considerable en los precios entre el valor máximo y el valor mínimo.

Varianza: La varianza, que indica qué tan dispersos están los precios de venta con respecto a la media, es de aproximadamente 84176.24. Esto sugiere que los precios de venta de los apartamentos están bastante dispersos en el conjunto de datos.

Desviación Estándar: La desviación estándar, que es una medida de dispersión en la misma escala que los datos originales, es de aproximadamente 290.13. Esto significa que los precios de venta de los apartamentos tienden a desviarse en promedio alrededor de 290.13 millones de pesos colombianos (COP).

Coeficiente de Variación: El coeficiente de variación es del 78.92%, lo que indica una alta variabilidad relativa en los precios de venta en comparación con la media.

Resumen indicadores de dispersión de las viviendas tipo ‘apartamento’

# Calculamos el rango
rango_precios <- max(apartamentos$preciom)-min(apartamentos$preciom)

# Calculamos la varianza
varianza_precios <- var(apartamentos$preciom)

# Calculamos la desviación estándar
desviacion_estandar_precios <- sd(apartamentos$preciom)

# Calculamos el coeficiente de variación
coeficiente_variacion_precios <- (desviacion_estandar_precios / mean(apartamentos$preciom)) * 100

# Creamos un data frame con los resultados
resultados_apartamentos <- data.frame(
  Estadístico = c("Rango", "Varianza", "Desviación Estándar", "Coeficiente de Variación"),
  Valor = c(rango_precios, varianza_precios, desviacion_estandar_precios, coeficiente_variacion_precios)
)

# Imprimimos los resultados
print(resultados_apartamentos)
##                Estadístico       Valor
## 1                    Rango  1892.00000
## 2                 Varianza 84176.24378
## 3      Desviación Estándar   290.13143
## 4 Coeficiente de Variación    78.92079

En resumen, los estadísticos proporcionados para las ventas de apartamentos y casas muestran una variabilidad considerable en los precios, con una dispersión significativa alrededor de la media. Esto sugiere que los precios de venta de los apartamentos y casas pueden variar considerablemente.

Indicadores de Forma

Análisis por tipo de vivienda

Asimetría:

Para todas las viviendas, casas y apartamentos, la asimetría es positiva, lo que indica una distribución sesgada hacia la derecha en los precios. La magnitud de la asimetría varía entre los tipos de viviendas, siendo más pronunciada en los apartamentos (2.1572), seguida por todas las viviendas en general (1.8472) y las casas (1.5653).

Curtosis:

Todos los tipos de viviendas tienen una curtosis positiva, lo que sugiere distribuciones más “puntiagudas” que la distribución normal. La curtosis es más alta para los apartamentos (5.4013), seguida por todas las viviendas en general (3.6573) y las casas (2.2826), lo que indica colas más pesadas en la distribución de precios de los apartamentos.

# Calcular la asimetría para viviendas
asimetria_viviendas <- skewness(viviendas$preciom)

# Calcular la curtosis para viviendas
curtosis_vivendas <- kurtosis(viviendas$preciom)

# Calcular la asimetría para casas
asimetria_casas <- skewness(casas$preciom)

# Calcular la curtosis para casas
curtosis_casas <- kurtosis(casas$preciom)

# Calcular la asimetría para apartamentos
asimetria_apartamentos <- skewness(apartamentos$preciom)

# Calcular la curtosis para apartamentos
curtosis_apartamentos <- kurtosis(apartamentos$preciom)

# Creamos un data frame con los resultados
resultados_indicadores_forma_tipo <- data.frame(
  Estadístico = c("Asimetría", "Curtosis"),
  Cálculo_Viviendas = c(asimetria_viviendas, curtosis_vivendas),
  Cálculo_Casas = c(asimetria_casas, curtosis_casas),
  Cálculo_Apartamentos = c(asimetria_apartamentos, curtosis_apartamentos)
)


# Crear la tabla formateada con kableExtra
tbl_indicadores_forma_tipo <- resultados_indicadores_forma_tipo %>%
  kbl() %>%
  kable_paper(full_width = FALSE) %>%
  row_spec(0, bold = TRUE) %>%
  column_spec(2:3, width = "1cm")%>%
  collapse_rows(columns = 1, valign = "middle")

# Mostrar la tabla formateada
tbl_indicadores_forma_tipo
Estadístico Cálculo_Viviendas Cálculo_Casas Cálculo_Apartamentos
Asimetría 1.847252 1.565305 2.157207
Curtosis 3.657292 2.282634 5.401268

Representación gráfica del análisis por tipo de vivienda

# Histograma de los datos
ggplot(viviendas, aes(x = preciom)) +
  geom_histogram(binwidth = 1, fill = "lightblue", color = "black") +
  labs(title = "Histograma de Precios por Viviendas")

# Añadir una columna de tipo a cada dataframe
viviendas$tipo <- "Viviendas"
casas$tipo <- "Casas"
apartamentos$tipo <- "Apartamentos"

# Combinar los dataframes en uno solo
todos_los_datos <- rbind(viviendas, casas, apartamentos)

# Graficar densidad de los datos combinados
ggplot(todos_los_datos, aes(x = preciom, fill = tipo)) +
  geom_density(alpha = 0.5) +
  labs(title = "Gráfico de Densidad de Precios por Tipo de Vivienda", x = "Precio", y = "Densidad") +
  scale_fill_manual(values = c("Viviendas" = "lightblue", "Casas" = "orange", "Apartamentos" = "lightgreen"))

Análisis por Zona

Asimetría:

Para todas las viviendas, casas y apartamentos, la asimetría es positiva, lo que indica una distribución sesgada hacia la derecha en los precios. La magnitud de la asimetría varía entre los tipos de viviendas, siendo más pronunciada en los apartamentos (2.1572), seguida por todas las viviendas en general (1.8472) y las casas (1.5653).

Curtosis:

Todos los tipos de viviendas tienen una curtosis positiva, lo que sugiere distribuciones más “puntiagudas” que la distribución normal. La curtosis es más alta para los apartamentos (5.4013), seguida por todas las viviendas en general (3.6573) y las casas (2.2826), lo que indica colas más pesadas en la distribución de precios de los apartamentos.

# Calcular la asimetría para viviendas por zona
asimetria_por_zona <- function(nombre_zona) {
  viviendas_zona <- subset(viviendas, zona == nombre_zona)
  asimetria <- skewness(viviendas_zona$preciom)
  return(asimetria)
}

# Calcular la asimetría para la zona "centro"
asimetria_zona_centro <- asimetria_por_zona("Zona Centro")
# Calcular la asimetría para la zona "norte"
asimetria_zona_norte <- asimetria_por_zona("Zona Norte")
# Calcular la asimetría para la zona "oeste"
asimetria_zona_oeste <- asimetria_por_zona("Zona Oeste")
# Calcular la asimetría para la zona "oriente"
asimetria_zona_oriente <- asimetria_por_zona("Zona Oriente")
# Calcular la asimetría para la zona "sur"
asimetria_zona_sur <- asimetria_por_zona("Zona Sur")

# Calcular la curtosis para viviendas por zona
curtosis_por_zona <- function(zona) {
  viviendas_zona <- subset(viviendas, zona == zona)
  curtosis <- skewness(viviendas_zona$preciom)
  return(curtosis)
}

# Calcular la curtosis para la zona "centro"
curtosis_zona_centro <- curtosis_por_zona("Zona Centro")
# Calcular la curtosis para la zona "norte"
curtosis_zona_norte <- curtosis_por_zona("Zona Norte")
# Calcular la curtosis para la zona "oeste"
curtosis_zona_oeste <- curtosis_por_zona("Zona Oeste")
# Calcular la curtosis para la zona "oriente"
curtosis_zona_oriente <- curtosis_por_zona("Zona Oriente")
# Calcular la curtosis para la zona "sur"
curtosis_zona_sur <- curtosis_por_zona("Zona Sur")

# Creamos un data frame con los resultados
resultados_indicadores_forma_zona <- data.frame(
  Estadístico = c("Asimetría", "Curtosis"),
  Cálculo_Zona_Centro = c(asimetria_zona_centro, curtosis_zona_centro),
  Cálculo_Zona_Norte = c(asimetria_zona_norte, curtosis_zona_norte),
  Cálculo_Zona_Oeste = c(asimetria_zona_oeste, curtosis_zona_oeste),
  Cálculo_Zona_Oriente = c(asimetria_zona_oriente, curtosis_zona_oriente),
  Cálculo_Zona_Sur = c(asimetria_zona_sur, curtosis_zona_sur)
)


# Crear la tabla formateada con kableExtra
tbl_indicadores_forma_zona <- resultados_indicadores_forma_zona %>%
  kbl() %>%
  kable_paper(full_width = FALSE) %>%
  row_spec(0, bold = TRUE) %>%
  column_spec(2:3, width = "1cm")%>%
  collapse_rows(columns = 1, valign = "middle")

# Mostrar la tabla formateada
tbl_indicadores_forma_zona
Estadístico Cálculo_Zona_Centro Cálculo_Zona_Norte Cálculo_Zona_Oeste Cálculo_Zona_Oriente Cálculo_Zona_Sur
Asimetría 1.937456 1.966554 0.9831138 2.872717 1.996914
Curtosis 1.847252 1.847252 1.8472524 1.847252 1.847252

Representación gráfica del análisis por zona

# Combinar los dataframes en uno solo
todos_los_datos <- rbind(viviendas, casas, apartamentos)

ggplot(viviendas, aes(x = preciom, fill = zona)) +
  geom_density(alpha = 0.5) +
  labs(title = "Gráfico de Densidad de Precios por Zona", x = "Precio", y = "Densidad") +
  scale_fill_manual(values = c("Zona Centro" = "#1F78B4",    # Azul
                                "Zona Norte" = "#33A02C",    # Verde
                                "Zona Oeste" = "#FF7F00",    # Naranja
                                "Zona Oriente" = "#6A3D9A",  # Morado
                                "Zona Sur" = "#FB9A99"))     # Rosa

Discusión

Si nos basamos en el análisis realizado, podemos sugerir algunas recomendaciones para la empresa B&C.

  1. Segmentacion de Mercado por Zona

Al ver que los precios de las viviendas tienen tanta disparidad entre las diferentes zonas de cali, la empresa podría considerar segmentar su mercado objetivo en función de la ubicación geográfica, para poder abordar las zonas que mayor representación en ventas tiene para la compañía.

  1. Enfoque en Apartamentos

Dado que los datos muestran que los apartamentos son el tipo de vivienda mas ofertado para la empresa B&C la mejor opción seria enfocar los esfuerzos de marketing y ventas en esta categoría de viviendas.

  1. Atención al Usuario

Sabemos que las caracteristicas de las viviendas son un punto influyente para la venta de las mismas, por consiguiente la empresa B&C podría considerar ofrecer servicios de consultoría personalizada para ayudar a los potenciales clientes a encontrar la vivienda que mejor se adapte a sus necesidades y preferencias específicas.

  1. Gestión de Datos Faltantes

Es importante abordar adecuadamente los datos faltantes en la base de datos, quiza la empresa podría implementar un aplicativo o medio de recopilación de datos más riguroso para reducir la incidencia de datos faltantes en el futuro.

Conclusión

Con base en el análisis estadístico realizado, podemos concluir lo siguiente en respuesta a los objetivos planteados:

  1. Análisis de Precios por Zona:

Se observa una variabilidad significativa en los precios de las viviendas en diferentes zonas de Cali. Las zonas Norte y Sur tienden a tener precios más altos, mientras que las zonas Centro y Oriente muestran precios más bajos en promedio. Esto sugiere la existencia de disparidades en los precios según la ubicación geográfica, lo cual puede ser útil para la segmentación del mercado por parte de B&C.

  1. Tipos de Viviendas Más Ofertadas:

Los datos muestran que los apartamentos son el tipo de vivienda más ofertado en el mercado inmobiliario de Cali, seguidos por las casas. Esto sugiere una demanda considerable de apartamentos en la ciudad, lo cual podría influir en las estrategias de marketing y ventas de B&C.

  1. Características Relevantes de la Oferta de Vivienda:

En cuanto a las características de las viviendas, se encontró que las casas tienden a ser más grandes en términos de área construida en comparación con los apartamentos. Además, se identificó que las viviendas con datos faltantes de parqueadero tienden a ser más económicas, lo que podría indicar una preferencia por viviendas sin parqueadero en ciertos segmentos del mercado. En resumen, el análisis estadístico proporciona información valiosa para B&C sobre el mercado de viviendas en Cali. Esta información puede ser utilizada para diseñar estrategias de precios, identificar oportunidades de mercado y adaptar la oferta de vivienda de acuerdo con las preferencias y características del mercado objetivo.