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.
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:
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.
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 |
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.
##
## 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_dfAsí 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_dfEs 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.
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:
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% |
# 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 |
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
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 |
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 |
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)
})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
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.
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 |
# 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"))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 |
# 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")) # RosaSi nos basamos en el análisis realizado, podemos sugerir algunas recomendaciones para la empresa B&C.
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.
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.
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.
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.
Con base en el análisis estadístico realizado, podemos concluir lo siguiente en respuesta a los objetivos planteados:
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.
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.
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.