La ciudad de Cali es uno de los principales centros económicos de Colombia, constituyéndose a su vez como la tercera ciudad más poblada del país, con aproximadamente 2.5 millones de habitantes, de los cuales se estima que el 70% vive en zonas urbanas. Estas características poblacionales hacen que Cali cuente con una sólida industria inmobiliaria, encontrando una gran variedad de opciones a nivel residencial, industrial y comercial.
Este informe está focalizado netamente en la oferta residencial, a fin de analizar de manera descriptiva, el comportamiento del precio de acuerdo a una serie de variables inherentes a las características de diseño interior de los mismos, entendiendo que existen diferencias significativas según tipo de propiedad (Casa/Apartamento), el área construida y la ubicación (zona); es importante denotar que a nivel de esta última variable, la ciudad de Cali está dividida en 22 comunas y 15 corregimientos, que a su vez se sub-dividen en 249 barrios. Mapa de comunas de Cali. Sin embargo, aunque la base de datos objeto de este informe cuenta con datos del Barrio, al no encontrarse estandarizada esta variable, no se considera de valor en el análisis, reemplazándola por la variable Zona.
A nivel general se analizan:
-Precio de venta: Precio promedio por metro cuadrado, por Zona y por tipo de vivienda.
-Zona: Cantidad de predios ofertados (frecuencia) por zona y desglosando también por tipo de vivienda.
-Área Construida: Promedios por tipo de vivienda y por Zona.
-Número de habitaciones, baños y parqueaderos: identificando mínimos, máximos y promedios.
Los resultados plasmados en este documento pueden ser útiles para determinar nichos de mercado y establecer estrategias comerciales customizadas que permitan apuntar a ese target, aumentando los rendimientos de los recursos invertidos. No cabe duda que el sector inmobiliario juega un papel fundamental en la economía de una región, y contribuye significativamente al crecimiento económico y al desarrollo urbano, por tanto es fundamental contar con herramientas adecuadas para su análisis e interpretación.
Proveer a los directivos de la empresa B&C, un análisis descriptivo del sector inmobiliario de Cali a partir de una muestra de oferta del sector residencial, consolidada en la base de datos vivienda_faltantes, que permita la toma decisiones estratégicas del negocio, enfocadas a la definición del nicho de mercado, desarrollos de servicios y de estrategias de marketing canalizadas hacia su mercado objetivo.
Teniendo claro el objetivo a lograr con este análisis, se procede con el reconocimiento y limpieza de la base de datos, identificando las variables de interés, para su procesamiento y análisis exploratorio, a fin de generar conclusiones y recomendaciones para la empresa B&C que permitan la toma de decisiones informadas respecto al mercado inmobiliario de Cali.
La base de datos inicial cuenta con 8330 registros de ofertas de inmuebles residenciales de la ciudad de Cali, distribuidos en las diferentes zonas de la ciudad. Se tienen 13 variables (columnas) entre las cuales se encuentran el precio, área construida (en metros), la zona donde se encuentra ubicado el predio, el tipo de vivienda y otras características de distribución al interior del inmueble.
A continuación se describen cada una de las variables contenidas en la base:
id - Identificador único de la vivienda
zona - Zona de la ciudad (Centro/Sur/Oeste/Este/Norte)
piso - Piso en que está ubicada la vivienda (entre 1 y 12 pisos)
estrato - Estrato socioeconómico del sector de la vivienda (3 al 6. No se presentan registros de 1 y 2)
preciom - Precio en millones de pesos (entre 58 y 1999 millones)
areaconst - Área construida en metros cuadrados (entre 30 y 1745 m cuadrados)
parqueaderos - Número de parqueaderos que tiene la vivienda(entre 0 y 10)
banios - Número de baños que tiene la vivienda (entre 0 y 10)
habitaciones - Número de habitaciones que tiene la vivienda (entre 0 y 10)
tipo - Tipo de vivienda (casa/apartamento)
barrio - Barrio donde está ubicada la vivienda (436 registros únicos)
longitud - Coordenada de longitud donde está ubicada la vivienda
latitud - Coordenada de latitud donde está ubicada la vivienda
En la revisión y reconocimiento preliminar de la base de datos, se identificó que algunas de esas variables no se encontraban estadarizadas durante la captura de la data, por lo que se hace necesario realizar la limpieza y depuración de los registros.
Muestra de la BD
Durante la etapa de organización y limpieza de la data, se identificaron una serie de issues originados principalmente por la ausencia de estandarización en la captura de los datos, de tal forma que se obtuvieros registros con espacios vacíos, textos unidos, con y sin tilde, con y sin artículos (el/la/los/las), con combinaciones de mayúsculas y minúsculas, entre otras. Una de las variables más afectadas por esta situación fue el Barrio, por tanto, aunque se aplicaron varias prácticas de limpieza, y se logró acotar el listado de barrios de 436 a 366 registros, se consideró que no existe suficiente certeza para continuar depurando la data y tomar como referencia esta variable, por tanto se opta por reemplazarla por la Zona.
Ejemplos de errores en barrios que se corrigieron durante la limpieza:
“agua blanca” vs “aguablanca”
“barrio 7de agosto” vs “7 de agosto”
“el tr?cbol” vs “el trebol”
“cristales” vs “los cristales”
Otra variable que se vio afectada por la ausencia de estandarización, fue el tipo de vivienda, siendo necesario mutarla para simpificar a 2 únicos tipos “casa” y “apartamento”. La mutación se realizó convirtiendo a minúsculas sostenida todos los caracteres de los registros de esa variable.
Otro hallazgo encontrado fue la ausencia de múltiples datos (NA), principalmente en las variables de parqueadero y piso. Al consultar los datos faltantes de la tabla, generó este resultado:
## id zona piso estrato preciom areaconst parquea banios
## 3 3 2641 3 2 3 1606 3
## habitac tipo barrio longitud latitud
## 3 3 3 3 3
Esto permitió identificar que para la mayoría de variables existían 3 datos ausentes por lo cual se infiere que podrían provenir de los mismos 3 registros; se procedió a consultarlos directamente y se confirmó el supuesto decidiendo eliminarlos debido que son datos inválidos sin ningún aporte al análisis.
Para la variable parqueadero, se determina imputar valor 0 a los registros faltantes, partiendo del supuesto de que la ausencia del dato es porque al no tener parqueadero, el registro se cargó vacío y quedó erradamente con “NA”.
#LIMPIEZA DE LA DATA
library(DescTools)
library(paqueteMETODOS)
library(devtools)
library(dplyr)
library(kableExtra)
library(ggplot2)
library(plotly)
library(VIM)
library(DT)
library(plotly)
library(summarytools)
library(pandoc)
BD_FRAME = vivienda_faltantes
BD_FRAME$tipo = tolower(BD_FRAME$tipo)
BD_FRAME = BD_FRAME %>%
mutate(tipo = ifelse(tipo == "apto", "apartamento", tipo))
BD_FRAME$barrio = tolower(BD_FRAME$barrio)
BD_FRAME$barrio = iconv(BD_FRAME$barrio, to = "ASCII//TRANSLIT")
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "agua blanca", "aguablanca", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "alférez real", "alferez real", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "alfonso lopez i", "alfonso lopez", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "arboledas", "arboleda", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "barrio 7de agosto", "7 de agosto", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "barrio el recuerdo", "el recuerdo", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "barrio eucaristico", "eucaristico", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "barrio obrero", "obrero", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "barrio tranquilo y", "tranquilo", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "calibella", "cali bella", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "cali canto", "calicanto", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "ciudad mel?cndez", "ciudad melendez", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "base a?crea", "base aerea", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "ciudadela paso ancho", "ciudadela pasoancho", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "el tr?cbol", "el trebol", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "juanamb??", "juanambu", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "la riviera", "la rivera", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "las am?cricas", "las americas", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "mel?cndez", "melendez", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "rep??blica de israel", "republica de israel", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "laflora", "la flora", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "flora", "la flora", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "el ingenio 3", "el ingenio iii", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "ingenio i", "el ingenio i", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "ingenio ii", "el ingenio ii", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "ingenio", "el ingenio", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "los alamos", "alamos", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "alborada", "la alborada", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "alcazares", "los alcazares", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "alf?Crez real", "alferez real", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "base a?Crea", "base aerea", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "ciudad mel?Cndez", "ciudad melendez", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "ciudadela paso ancho", "ciudadela pasoancho", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "mel?Cndez", "melendez", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "cristales", "los cristales", BD_FRAME$barrio)
BD_FRAME$barrio <- ifelse(BD_FRAME$barrio == "normandia west point", "normandia", BD_FRAME$barrio)
DF_SINNA = BD_FRAME[-c(8320,8321,8322), ]
BD_FRAME = DF_SINNA
BD_FRAME$parquea[is.na(BD_FRAME$parquea)]<-0
barrio = table(BD_FRAME$barrio) %>% data.frame()
tipo = table(BD_FRAME$tipo) %>% data.frame()
zona = table(BD_FRAME$zona) %>% data.frame()
piso = table(BD_FRAME$piso) %>% data.frame()
estrato = table(BD_FRAME$estrato) %>% data.frame()
NumHabitac = table(BD_FRAME$habitac) %>% data.frame()
area = table(BD_FRAME$areaconst) %>% data.frame()
NumParquea = table(BD_FRAME$parquea) %>% data.frame()
NumBanios = table(BD_FRAME$banios) %>% data.frame()
precios = table(BD_FRAME$preciom) %>% data.frame()Por otra parte, para la variable piso se determina no imputar datos pues se observó que tanto para casas como apartamentos, hay registros con piso NA; Para las casas podría asumirse que son de un solo nivel y por ende no se diligenció la variable dando a entender que estarían en piso 0, pero para los apartamentos no necesariamente aplicaría la misma lógica, por lo cual a fin de no inyectar errores a la base, se mantiene en su estado original.
BD_PISOTIPO = select (BD_FRAME, piso, tipo)
BD_PISOTIPO$piso[is.na(BD_PISOTIPO$piso)] <- 0
PT = filter(BD_PISOTIPO, piso == 0)
PTFRAME = table(PT$tipo) %>% data.frame()
print(PTFRAME)## Var1 Freq
## 1 apartamento 1383
## 2 casa 1255
Una vez realizadas las modificaciones anteriores, la base queda con los siguientes datos ausentes:
## id zona piso estrato preciom areaconst parquea banios
## 0 0 2638 0 0 0 0 0
## habitac tipo barrio longitud latitud
## 0 0 0 0 0
Finalmente, debido que este informe no tiene pos objeto profudizar en un análisis via georeferenciación, se determina no limpiar las variables de coordenadas (latitud y longitud), las cuales tampoco presentan información veráz de las coordenadas reales, debido en parte al formato de miles utilizado para capturar la información.
Para efectos prácticas de los análisis de precio, se define mutar la variable Zona, realizando una concatenación entre la Zona y el Tipo de Vivienda, de tal forma que esa variable conjunta pueda cruzarse con otras variables.
La lectura de la nueva variable Zona_tipo, es la siguiente:
ZZZ_T
donde, ZZZ son los 3 primeros dígitos de la Zona, y T el tipo de vivienda (A - Apartamento y C - Casa)
Ejemplo:
Oes_C –> corresponde a Zona Oeste, Tipo Casa
Sur_A –> corresponde a Zona Sur, Tipo Apartamento
Nota: antes de mutar la variable Zona se genera una copia/backup de la base, que contiene todos los ajustes de limpieza realizados a la base, pues en algunas gráficas se hará uso de la variable en su estado original.
######Mutación de ZONA por Zona Tipo######
TipoApto = subset(BD_FRAME, BD_FRAME$tipo == "apartamento")
TipoCasa = subset(BD_FRAME, BD_FRAME$tipo == "casa")
TipoCasa <- TipoCasa %>%
mutate(zona = ifelse(zona == "Zona Sur", "Sur_C", zona))
TipoCasa <- TipoCasa %>%
mutate(zona = ifelse(zona == "Zona Centro", "Cen_C", zona))
TipoCasa <- TipoCasa %>%
mutate(zona = ifelse(zona == "Zona Norte", "Nor_C", zona))
TipoCasa <- TipoCasa %>%
mutate(zona = ifelse(zona == "Zona Oeste", "Oes_C", zona))
TipoCasa <- TipoCasa %>%
mutate(zona = ifelse(zona == "Zona Oriente", "Ori_C", zona))
TipoApto <- TipoApto %>%
mutate(zona = ifelse(zona == "Zona Sur", "Sur_A", zona))
TipoApto <- TipoApto %>%
mutate(zona = ifelse(zona == "Zona Centro", "Cen_A", zona))
TipoApto <- TipoApto %>%
mutate(zona = ifelse(zona == "Zona Norte", "Nor_A", zona))
TipoApto <- TipoApto %>%
mutate(zona = ifelse(zona == "Zona Oeste", "Oes_A", zona))
TipoApto <- TipoApto %>%
mutate(zona = ifelse(zona == "Zona Oriente", "Ori_A", zona))
BD_FRAME=rbind(TipoApto,TipoCasa)
BD_FRAMEMENOS = select (BD_FRAME, 2:10)## Descriptive Statistics
## BD_FRAMEMENOS
## N: 8327
##
## areaconst banios estrato habitac parquea piso preciom
## ----------------- ----------- --------- --------- --------- --------- --------- ---------
## Mean 174.99 3.11 4.63 3.61 1.48 3.77 434.25
## Std.Dev 142.95 1.43 1.03 1.46 1.24 2.62 329.03
## Min 30.00 0.00 3.00 0.00 0.00 1.00 58.00
## Q1 80.00 2.00 4.00 3.00 1.00 2.00 220.00
## Median 123.00 3.00 5.00 3.00 1.00 3.00 330.00
## Q3 229.00 4.00 5.00 4.00 2.00 5.00 540.00
## Max 1745.00 10.00 6.00 10.00 10.00 12.00 1999.00
## MAD 84.51 1.48 1.48 1.48 1.48 1.48 209.05
## IQR 149.00 2.00 1.00 1.00 1.00 3.00 320.00
## CV 0.82 0.46 0.22 0.40 0.84 0.69 0.76
## Skewness 2.69 0.92 -0.18 1.64 1.65 1.28 1.85
## SE.Skewness 0.03 0.03 0.03 0.03 0.03 0.03 0.03
## Kurtosis 12.90 1.12 -1.11 3.99 5.41 1.05 3.66
## N.Valid 8327.00 8327.00 8327.00 8327.00 8327.00 5689.00 8327.00
## Pct.Valid 100.00 100.00 100.00 100.00 100.00 68.32 100.00
Las frecuencias por variable más recurrentes son:
Tipo = Apartamentos
Piso = Segundo
Baños = 2
Habitaciones = 3
Parqueadero = 1
Estrato = 5
Área promedio construida = 175 metros cuadrados
hist(BD_FRAME$preciom, main="Histograma de Precios", xlab="Precio (Millones)", ylab="Frecuencia",
axes=TRUE, plot=TRUE, labels=TRUE, col="blue", border="white", breaks=8, ylim = c(0,3500),
xlim=c(0,max(BD_FRAME$preciom)))+ theme_minimal()## NULL
La siguiente tabla presenta el precio promedio, el metraje construido promedio y los valores promedio del metro cuadrado construido, para cada zona_tipo.
PXZ= BD_FRAME %>%
group_by(zona) %>%
summarise(precio_promedio = mean(preciom))
AXZ= BD_FRAME %>%
group_by(zona) %>%
summarise(area_promedio = mean(areaconst))
PXM = BD_FRAME %>%
group_by(zona) %>%
summarise(pxm_promedio = mean(preciom)/mean(areaconst))
zonatipofrec = table(BD_FRAME$zona) %>% data.frame()
zonatipofrec <- zonatipofrec %>%
rename(zona = Var1)
AYPXZ = merge(PXZ, AXZ, by = "zona", all = TRUE)
AYPXZ_PXM = merge(AYPXZ, PXM, by = "zona", all = TRUE)
AYPXZ_PXMFREQ = merge(AYPXZ_PXM, zonatipofrec, by = "zona", all = TRUE)
AYPXZ_PXMFREQ_ordenado <- AYPXZ_PXMFREQ[order(-AYPXZ_PXMFREQ$pxm_promedio), ]
print(AYPXZ_PXMFREQ_ordenado)## zona precio_promedio area_promedio pxm_promedio Freq
## 5 Oes_A 669.2676 172.56413 3.878371 1035
## 9 Sur_A 297.3550 97.48839 3.050158 2786
## 3 Nor_A 285.2577 98.70945 2.889872 1199
## 10 Sur_C 612.0077 282.20148 2.168691 1940
## 6 Oes_C 736.3550 343.22698 2.145388 169
## 1 Cen_A 186.5833 95.07333 1.962520 24
## 4 Nor_C 446.0913 264.89216 1.684049 723
## 7 Ori_A 152.5968 94.24097 1.619219 62
## 2 Cen_C 339.2400 217.79500 1.557612 100
## 8 Ori_C 244.8201 213.37415 1.147375 289
ggplot(AYPXZ_PXMFREQ_ordenado, aes(x = zona, y = pxm_promedio))+
geom_bar(stat = "identity", width = 0.7, fill = "blue")+
labs(title = "Precio Cuadrado Promedio", x = "Zona Tipo", y = "Precio por Metro cuadrado") +
theme_minimal() +
theme(legend.position = "none") Dada la relación Zona, Precio Promedio por metro cuadrado y Tipo de Vivienda, se infiere que las viviendas más costosas son en promedio los apartamentos de la zona oeste, seguidos por los de la zona Sur. Para este resultado se consideró además la cantidad de viviendas por cada zona tipo (variable Freq de la tabla)
zonafrec = transform(zona,
Rel = (round(prop.table(zona$Freq),3))*100)
zonafrecmej <- data.frame(
Categoria = factor(zonafrec$Var1, levels = zonafrec$Var1), Frecuencia = zonafrec$Freq, Frec_Relat = zonafrec$Rel) ####tabla ver como la publico
ggplot(zonafrecmej, aes(x = Categoria, y = Frecuencia, fill = Categoria)) +
geom_bar(stat = "identity", width = 0.7) +
scale_fill_manual(values = c("#f95738", "#ee964b", "#f4d35e", "#faf0ca", "#0d3b66")) +
labs(title = "Distribución por Zonas",
x = "Categoría",
y = "Frecuencia") +
theme_minimal() +
theme(legend.position = "none") en la tabla se evidencia que a nivel de zona, el pareto de los inmuebles está comprendido en las zonas sur y norte, con una participación del 56.8% y 23.1%, respectivamente.
p =ggplot(BACKUPFRAME, aes(x = zona, fill = tipo)) +
geom_bar(position = "stack", width = 0.7) +
labs(title = "Distribución por Zona",
x = "Zona de Cali",
y = "Tipo de Vivienda") +
scale_fill_manual(values = c("#0d3b66", "#f4d35e")) +
theme_minimal() +
theme(legend.position = "top", legend.title = element_blank())
print(p)Área promedio por tipo de Vivienda
AXT= BD_FRAME %>%
group_by(tipo) %>%
summarise(area_promedio_tipo = mean(areaconst))
AXTO = AXT[order(-AXT$area_promedio_tipo), ]
print(AXTO)## # A tibble: 2 × 2
## tipo area_promedio_tipo
## <chr> <dbl>
## 1 casa 273.
## 2 apartamento 113.
Área promedio por zona
AXZ= BD_FRAME %>%
group_by(zona) %>%
summarise(area_promedio_zona = mean(areaconst))
AXZO= AXZ[order(-AXZ$area_promedio_zona), ]
print(AXZO)## # A tibble: 10 × 2
## zona area_promedio_zona
## <chr> <dbl>
## 1 Oes_C 343.
## 2 Sur_C 282.
## 3 Nor_C 265.
## 4 Cen_C 218.
## 5 Ori_C 213.
## 6 Oes_A 173.
## 7 Nor_A 98.7
## 8 Sur_A 97.5
## 9 Cen_A 95.1
## 10 Ori_A 94.2
sin embargo debido que esta variable está directamente relacionada con el área construida, al calcular la variable precio por metro cuadrado promedio el orden de la tabla cambia un poco, evidenciando que la zona más costosa sigue siendo la Oeste cuando se trata de apartamentos (3.88 millones/metro), pero le siguiría ahora la zona Sur también en la oferta de Aprtamentos (3.05 millones el metro). Ver tabla y gráfica del precio promedio por metro cuadrado, por Zona.
La zona con mayor oferta de vivienda es la zona SUR, seguida de la zona NORTE, entre las cuales se conjuga el pareto (80%) de la muestra analizada.
En las zonas NORTE, SUR y OESTE de Cali es mayor la frecuencia del tipo de vivienda Apartamento, que el de las Casas, mientras que en Centro y Oriente el resultario es contrario.
Las casa tienen un tamaño promedio de 273 metros cuadrados construidos, mientras que los apartamentos 113 metros cuadrados, es decir menos de la mitad que las primeras.
Al analizar el tamaño promedio por zona y tipo, se identifica que todas las casas, indistinto de la zona, tienen un área construida promedio superior a los 200 metros cuadrados
El área promedio de los apartamentos de la zona Oeste, es considerablemente mayor que la de los apartamentos de las demás Zonas de la ciudad de Cali (cerca del doble del metraje).
Dados los resultados anteriores, los cuales constituyen un análisis preliminar muy a alto nivel de una muestra del sector inmobiliario de Cali, se recomienda a la compañía enfocar su nicho en los apartamentos de las zonas Oeste, Sur y Norte, y en las casas de la Zona Sur. Lo antaerior en razón a que contenien un volumen de oferta significativamente mayor que en las demás categorías (estas 4 representan el 84% del total de registros de la base), y a que el precio por metro es considerablemente mayor también.
Oes_A 669.2676 172.56413 3.878371 1035 Sur_A 297.3550 97.48839 3.050158 2786 Nor_A 285.2577 98.70945 2.889872 1199 Sur_C 612.0077 282.20148 2.168691 1940
Adicionalmente, para fines prácticos se recomienda a la compañía estandarizar las variables para la captura de información, a fin de agilizar el proceso de limpieza y procesamiento de los datos, y aumentar la efectividad del resultado.
pisofrec = table(BD_FRAME$piso) %>% data.frame()
pisofreco = pisofrec[order(-pisofrec$Freq), ]
print(pisofreco)## Var1 Freq
## 2 2 1450
## 3 3 1097
## 1 1 861
## 4 4 607
## 5 5 568
## 6 6 245
## 8 8 211
## 7 7 207
## 9 9 146
## 10 10 130
## 11 11 84
## 12 12 83
estratofrec = table(BD_FRAME$estrato) %>% data.frame()
estratofreco = estratofrec[order(-estratofrec$Freq), ]
print(estratofreco)## Var1 Freq
## 3 5 2751
## 2 4 2131
## 4 6 1992
## 1 3 1453
parqueafrec = table(BD_FRAME$parquea) %>% data.frame()
parqueafreco = parqueafrec[order(-parqueafrec$Freq), ]
print(parqueafreco)## Var1 Freq
## 2 1 3156
## 3 2 2478
## 1 0 1603
## 4 3 521
## 5 4 386
## 6 5 68
## 7 6 68
## 8 7 18
## 9 8 17
## 11 10 8
## 10 9 4
baniosfrec = table(BD_FRAME$banios) %>% data.frame()
baniosfreco = baniosfrec[order(-baniosfrec$Freq), ]
print(baniosfreco)## Var1 Freq
## 3 2 2946
## 4 3 1994
## 5 4 1460
## 6 5 891
## 2 1 497
## 7 6 315
## 8 7 107
## 9 8 48
## 1 0 45
## 10 9 15
## 11 10 9
habitacfrec = table(BD_FRAME$habitac) %>% data.frame()
habitacfreco = habitacfrec[order(-habitacfrec$Freq), ]
print(habitacfreco)## Var1 Freq
## 4 3 4101
## 5 4 1731
## 3 2 927
## 6 5 680
## 7 6 318
## 8 7 173
## 9 8 138
## 10 9 83
## 1 0 66
## 2 1 59
## 11 10 51