La ciencia de datos es una herramienta muy poderosa actualmente, con una base de datos podemos llegar a descubrir patrones, tendencias, modas y a su vez, tomar decisiones basadas en ese análisis hecho previamente. La realización de este reporte le va a permitir a la empresa B&C (Bines y Casas) que es una agencia de bienes raíces que opera en la ciudad de Cali, tener información basada en los datos de tipo de vivienda más ofertada, diferentes precios de vivienda y otras características relevantes en el negocio, además este informe incluirá un análisis estadístico que le servirá a la empresa para la toma de decisiones sobre su negocio con el fin de desarrollar nuevas estrategias, mejorar el servicio y poder aumentar su nicho de mercado.
En este contexto, el presente documento se propone mostrar detalladamente el cómo se realizó el informe estadístico incorporando la minerìıa de datos y diferentes metodos para un análisis completo de los datos registrados que sea de interés para la empresa B&C, destacando la aplicación práctica de estas herramientas para identificar patrones y otorgar un valor significativo a los datos en distintos escenarios industriales.
Contamos con la información recopilada por la empresa B&C sobre viviendas en Cali, el dataframe contine 13 columnas que son las siguientes: id. zona del ciudad, piso, estrato, precio metro cuadrado, area construida, numero de parqueaderos, número de baños, número de habitaciones, tipo de vivienda, barrio, longitud, latitud.
head(vivienda_faltantes)
## id zona piso estrato preciom areaconst parquea banios habitac
## 1 8312 Zona Oeste 4 6 1300 318 2 4 2
## 2 8311 Zona Oeste 1 6 480 300 1 4 4
## 3 8307 Zona Oeste NA 5 1200 800 4 7 5
## 4 8296 Zona Sur 2 3 220 150 1 2 4
## 5 8297 Zona Oeste NA 5 330 112 2 4 3
## 6 8298 Zona Sur NA 5 1350 390 8 10 10
## tipo barrio longitud latitud
## 1 Apartamento arboleda -76576 3454
## 2 Casa normandía -76571 3454
## 3 Casa miraflores -76568 3455
## 4 Casa el guabal -76565 3417
## 5 Casa bella suiza alta -76565 3408
## 6 Casa bella suiza alta -76565 3409
En este punto, podemos hacer un análisis descriptivo de los datos hasta el momento, para poder comprender un poco más sobre la distribucion y los patrones de los datos. Por ejemplo:
hist(vivienda_faltantes$precio, main = "Histograma de Precio")
Gráfico de frecuencia por zona
barplot(table(vivienda_faltantes$zona), main = "Frecuencia de Zonas")
table(vivienda_faltantes$zona)
##
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## 124 1922 1204 351 4726
Diagrama de dispersion de precio por área construida
plot(vivienda_faltantes$precio, vivienda_faltantes$areacontruida,
xlab = "Precio", ylab = "Área Construida",
main = "Precio vs. Área Construida")
El objetivo de este informe es realizar un análisis descriptivo en base a los datos recolectados por La empresa B&C, identificando el comportamiento de la venta de las viviendas en Cali.
La metodología usada fue CRISP-DM (CRoss Industry Standard Process for Data Mining: Procedimiento Industrial Estándar para realizar Minería de Datos) en donde se realizan los siguientes pasos:
En cada etapa del proceso se explicará que paso fue realizado pues dado los datos recolectados no fue necesario realizar algunos pasos en nuestro informe como fusión de datos o normalización.
Después de realizar la importación y visualización de los datos mostrado anteriormente, el siguiente paso fue realizar un análisis sobre las variables de la información, es por esto que se realizó una exploración sobre las columnas con datos vacios en el dataframe.
colSums(is.na(vivienda_faltantes))
## 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
Luego, por la naturaleza del problema eliminamos las filas donde las columnas id, zona, estrato, preciom, areaconst, banios, habitac, tipo, barrio, longitud y latitud estuvieran vacios ya que a diferencia de las variables piso o parquea que pueden ir vacios, es importante que estas variables tomen un valor pues en caso contrario no aportarían al análisis y si crea un sesgo en los resultados.
columnas_interes <- c("id", "zona", "estrato", "preciom", "areaconst", "banios", "habitac", "tipo", "barrio", "longitud", "latitud")
datos_filtrados <- vivienda_faltantes[complete.cases(vivienda_faltantes[columnas_interes]), ]
colSums(is.na(datos_filtrados))
## id zona piso estrato preciom areaconst parquea banios
## 0 0 2638 0 0 0 1603 0
## habitac tipo barrio longitud latitud
## 0 0 0 0 0
Con los datos limpios y elimanado los valores nulos, procedemos a hacer un análisis de las columnas de los datos que nos pueda dar más información sobre la media, mediana, moda, valores minimos y máximos.
summary(datos_filtrados)
## id zona piso estrato
## Min. : 1 Length:8327 Min. : 1.000 Min. :3.000
## 1st Qu.:2082 Class :character 1st Qu.: 2.000 1st Qu.:4.000
## Median :4164 Mode :character Median : 3.000 Median :5.000
## Mean :4164 Mean : 3.772 Mean :4.634
## 3rd Qu.:6246 3rd Qu.: 5.000 3rd Qu.:5.000
## Max. :8319 Max. :12.000 Max. :6.000
## NA's :2638
## preciom areaconst parquea banios
## Min. : 58.0 Min. : 30 Min. : 1.000 Min. : 0.000
## 1st Qu.: 220.0 1st Qu.: 80 1st Qu.: 1.000 1st Qu.: 2.000
## Median : 330.0 Median : 123 Median : 2.000 Median : 3.000
## Mean : 434.3 Mean : 175 Mean : 1.836 Mean : 3.112
## 3rd Qu.: 540.0 3rd Qu.: 229 3rd Qu.: 2.000 3rd Qu.: 4.000
## Max. :1999.0 Max. :1745 Max. :10.000 Max. :10.000
## NA's :1603
## habitac tipo barrio longitud
## Min. : 0.000 Length:8327 Length:8327 Min. :-76576.00
## 1st Qu.: 3.000 Class :character Class :character 1st Qu.:-76506.00
## Median : 3.000 Mode :character Mode :character Median : -76.54
## Mean : 3.605 Mean :-21845.13
## 3rd Qu.: 4.000 3rd Qu.: -76.52
## Max. :10.000 Max. : -76.46
##
## latitud
## Min. : 3.333
## 1st Qu.: 3.390
## Median : 3.450
## Mean : 970.370
## 3rd Qu.:3367.000
## Max. :3497.000
##
Con esta información podemos analizar en algunos campos de interés tendencias muy marcadas, como por ejemplo ¿Cuál es el estrato mas común en las viviendas de Cali?
frecuencia_estratos <- table(datos_filtrados$estrato)
barplot(frecuencia_estratos,
main = "Distribución del número de viviendas por estrato",
xlab = "Estrato",
ylab = "Número de viviendas")
¿Por cada sector cuantas viviendas de cada estrato hay?
frecuencia_estrato_sector <- table(datos_filtrados$estrato, datos_filtrados$zona)
barplot(frecuencia_estrato_sector,
beside = TRUE,
legend.text = TRUE,
col = rainbow(nrow(frecuencia_estrato_sector)),
main = "Cantidad de viviendas por estrato y sector",
xlab = "Sector",
ylab = "Cantidad de viviendas")
legend("topright",
legend = rownames(frecuencia_estrato_sector),
fill = rainbow(nrow(frecuencia_estrato_sector)))
¿Cuantas habitaciones, parqueaderos y banios tienen en promedio tiene una vivienda en cada estrato en Cali?
promedios_por_estrato <- aggregate(cbind(habitac, banios, parquea) ~ estrato, data = datos_filtrados, FUN = mean)
barplot(t(as.matrix(promedios_por_estrato[, -1])),
beside = TRUE,
col = c("blue", "green", "red"),
legend.text = c("Habitaciones", "Baños", "Parqueaderos"),
args.legend = list(title = "Características"),
main = "Promedio de Habitaciones, Baños y Parqueaderos por Estrato",
xlab = "Estrato",
ylab = "Promedio",
names.arg = promedios_por_estrato$estrato)
¿Cuál es el promedio del área construida de una vivienda por estrato?
promedio_m2_por_estrato <- aggregate(areaconst ~ estrato, data = datos_filtrados, FUN = mean)
barplot(promedio_m2_por_estrato$areaconst,
names.arg = promedio_m2_por_estrato$estrato,
col = "lightgreen",
main = "Promedio de metros cuadrados por vivienda en cada estrato",
xlab = "Estrato",
ylab = "Promedio de metros cuadrados por vivienda")
¿Cuál es el valor promedio del área construida de una vivienda por estrato?
precio_medio_m2_estrato <- aggregate(preciom / areaconst ~ estrato, data = datos_filtrados, FUN = mean)
barplot(precio_medio_m2_estrato[, 2],
names.arg = precio_medio_m2_estrato[, 1],
col = "skyblue",
main = "Precio medio del metro cuadrado por estrato",
xlab = "Estrato",
ylab = "Precio medio del metro cuadrado en millones(COP)")
¿Cuál es tipo de apartamento más frecuente por estrato?
frecuencia_tipo_apartamento <- table(datos_filtrados$tipo, datos_filtrados$estrato)
tipo_apartamento_mas_frecuente <- apply(frecuencia_tipo_apartamento, 2, function(x) names(which.max(x)))
barplot(frecuencia_tipo_apartamento,
beside = TRUE,
legend.text = TRUE,
col = rainbow(nrow(frecuencia_tipo_apartamento)),
main = "Tipo de apartamento más frecuente por estrato",
xlab = "Estrato",
ylab = "Frecuencia")
legend("topright",
legend = rownames(frecuencia_tipo_apartamento),
fill = rainbow(nrow(frecuencia_tipo_apartamento)))
library(ggplot2)
ggplot(datos_filtrados, aes(x = zona, y = preciom)) +
geom_boxplot() +
labs(title = "Precio de viviendas por zona en Cali")
tipo_ofertas <- table(datos_filtrados$tipo)
barplot(tipo_ofertas, main = "Tipo de viviendas más ofertadas en Cali")
Aquí nos damos cuenta que los datos tienen un sesgo, pues Apartamento, APARTAMENTO o apto es el mismo tipo de vivienda, igual sucede con Casa, CASA o casa. Por lo que para tener datos reales homologamos estos tipos de zonas como valores equivalentes.
datos_filtrados$tipo <- tolower(datos_filtrados$tipo)
datos_filtrados$tipo[datos_filtrados$tipo %in% c("apartamento", "apto")] <- "apartamento"
datos_filtrados$tipo[datos_filtrados$tipo %in% c("casa")] <- "casa"
tipo_ofertas <- table(datos_filtrados$tipo)
barplot(tipo_ofertas, main = "Tipo de viviendas más ofertadas en Cali")
Para un total de 5106 apartamentos y 3221 casas.
conteo_tipos <- table(datos_filtrados$tipo)
print(conteo_tipos)
##
## apartamento casa
## 5106 3221
Los factores más determinantes a la hora de adquirir una vivienda o vendarla son los beneficios con las que esta cuenta, por ejemplo, el zona, estrato, el area construida, el precio del metro cuadrado, el numero de parqueaderos y de habitaciones. Por lo que, analizar estas variables a detalle nos darian más informacion relevante sobre las tendencias y patrones de interés para la empresa B&C.
summary(datos_filtrados$zona)
## Length Class Mode
## 8327 character character
summary(datos_filtrados$estrato)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.000 4.000 5.000 4.634 5.000 6.000
summary(datos_filtrados$areaconst)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 30 80 123 175 229 1745
summary(datos_filtrados$preciom)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 58.0 220.0 330.0 434.3 540.0 1999.0
summary(datos_filtrados$paquea)
## Length Class Mode
## 0 NULL NULL
summary(datos_filtrados$habitac)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 3.000 3.000 3.605 4.000 10.000
Durante todo el análisis nos centramos en responder preguntas de interés para la empresa que giren entorno a las variables más importantes para la venta de un inmueble en la ciudad de Cali para poder centrar los esfuerzos de la compañia en adquirir propiedades que sean más sencillas de vender según los patrones encontrados en la información recopilada. Es por esto que, la zona, estrato, precio metro cuadrado, área construida, número de parqueaderos, número habitaciones y baños, asi como el sector son fundamentales en la toma de decisiones para la compra o venta de un inmueble. Por lo que, la compañia deberia centrarse más en los inmuebles que tengan las características más comunes y rentables para que de esta manera puedan diseñar mejores campañas de marketing, asi como servicios personalizados, definir nicho y sectores de inversión y establecer precios de venta según cada propiedad y servicios ofrecidos.
En conclusion, teniendo en cuenta la distribución por zonas, los servicios ofrecidos por cada inmueble, el precio por metro cuadrado y el estrato. La compañia B&C debería centrarse en las zona sur y norte. En propiedades de estrato 5 y 4, con un área construida de 120 a 160 mts y un precio promedio de 2.7 millones. Dada la densidad en estas zonas dirigir sus esfuerzos a este nicho, las campañas de marketing y los servicios personalizados conociendo de antemano por cada estrato cuales son los servicios más comunes en cada tipo de vivienda.