Contexto del problema: Una empresa inmobiliaria líder en una gran ciudad está buscando comprender en profundidad el mercado de viviendas urbanas para tomar decisiones estratégicas más informadas. La empresa posee una base de datos extensa que contiene información detallada sobre diversas propiedades residenciales disponibles en el mercado. Se requiere realizar un análisis holístico de estos datos para identificar patrones, relaciones y segmentaciones relevantes que permitan mejorar la toma de decisiones en cuanto a la compra, venta y valoración de propiedades.
Objetivo del Informe: Realizar un análisis integral y multidimensional de la base de datos de propiedades residenciales para comprender mejor el mercado inmobiliario urbano.
A continuación se presentan datos tomados de OLX mediante procedimiento webscraping y contenidos en paqueteMOD.
install.packages("factoextra")
## package 'factoextra' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\valen\AppData\Local\Temp\RtmpIN2j9R\downloaded_packages
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.3.3
## Warning: package 'ggplot2' was built under R version 4.3.3
install.packages("FactoMineR")
## package 'FactoMineR' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'FactoMineR'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\valen\AppData\Local\R\win-library\4.3\00LOCK\FactoMineR\libs\x64\FactoMineR.dll
## a
## C:\Users\valen\AppData\Local\R\win-library\4.3\FactoMineR\libs\x64\FactoMineR.dll:
## Permission denied
## Warning: restored 'FactoMineR'
##
## The downloaded binary packages are in
## C:\Users\valen\AppData\Local\Temp\RtmpIN2j9R\downloaded_packages
library(FactoMineR)
## Warning: package 'FactoMineR' was built under R version 4.3.3
## Cargar los datos
library(paqueteMODELOS)
## Warning: package 'knitr' was built under R version 4.3.3
data("vivienda")
# Ver la estructura de los datos
str(vivienda)
## spc_tbl_ [8,322 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ id : num [1:8322] 1147 1169 1350 5992 1212 ...
## $ zona : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
## $ piso : chr [1:8322] NA NA NA "02" ...
## $ estrato : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
## $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
## $ banios : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
## $ tipo : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
## $ barrio : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
## $ longitud : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...
## - attr(*, "spec")=List of 3
## ..$ cols :List of 13
## .. ..$ id : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ zona : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ piso : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ estrato : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ preciom : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ areaconst : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ parqueaderos: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ banios : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ habitaciones: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ tipo : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ barrio : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ longitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ latitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
## ..$ delim : chr ";"
## ..- attr(*, "class")= chr "col_spec"
## - attr(*, "problems")=<externalptr>
# Manejo de valores faltantes
vivienda <- vivienda[complete.cases(vivienda), ]
# Verificación de valores duplicados
vivienda <- vivienda[!duplicated(vivienda), ]
# Inspección de valores atípicos en las variables numéricas
summary(vivienda$preciom)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 58.0 244.5 350.0 457.2 560.0 1999.0
boxplot(vivienda$preciom, main="Distribución de precios", horizontal=TRUE)
# Limpieza de variables categóricas (si es necesario)
vivienda$zona <- as.factor(vivienda$zona)
vivienda$tipo <- as.factor(vivienda$tipo)
# PCA: Análisis de Componentes Principales
vivienda_num <- vivienda[, c("estrato", "preciom", "areaconst", "parqueaderos", "banios", "habitaciones")]
vivienda_scaled <- scale(vivienda_num)
pca <- prcomp(vivienda_scaled, center = TRUE, scale. = TRUE)
# Visualización del PCA
summary(pca)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 1.8866 1.0884 0.69530 0.58528 0.49647 0.42886
## Proportion of Variance 0.5932 0.1974 0.08057 0.05709 0.04108 0.03065
## Cumulative Proportion 0.5932 0.7906 0.87117 0.92827 0.96935 1.00000
biplot(pca, scale = 0)
# Clustering: k-means
set.seed(123)
wss <- (nrow(vivienda_scaled)-1)*sum(apply(vivienda_scaled,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(vivienda_scaled, centers=i)$withinss)
## Warning: did not converge in 10 iterations
plot(1:15, wss, type="b", xlab="Número de clusters", ylab="Suma de cuadrados dentro de los clusters")
# Aplicar k-means con el número óptimo de clusters
kmeans_result <- kmeans(vivienda_scaled, centers=4, nstart=25)
fviz_cluster(kmeans_result, data = vivienda_scaled)
# Análisis de Correspondencia
library(factoextra)
mca_result <- MCA(vivienda[, c("tipo", "zona", "barrio")], graph = FALSE)
fviz_mca_var(mca_result, choice = "mca.cor", repel = TRUE)
# Visualización de resultados
library(ggplot2)
ggplot(vivienda, aes(x = zona, y = preciom, fill = tipo)) +
geom_bar(stat = "identity", position = "dodge") +
theme_minimal() +
labs(title = "Distribución de Precios por Zona y Tipo de Propiedad", x = "Zona", y = "Precio (millones)")
A continuación, se describe y se comparan los precios de las propiedades en las zonas Centro, Norte, Oeste, Oriente y Sur.
1. Comparación General entre Zonas
Zona Centro: Los precios son moderadamente bajos en comparación con otras zonas. Los apartamentos tienen un precio de 300 millones, mientras que las casas están valoradas en 700 millones.
Zona Norte: Se observa una ligera diferencia entre los precios de apartamentos y casas, con precios de 1550 millones y 1560 millones, respectivamente. Los precios en esta zona son considerablemente más altos que en la Zona Centro.
Zona Oeste: Los precios en esta zona son los más altos entre todas las zonas analizadas. Los apartamentos tienen un precio de 1800 millones y las casas alcanzan los 2000 millones.
Zona Oriente: Esta zona muestra precios similares a los de la Zona Centro, con apartamentos a 290 millones y casas a 700 millones.
Zona Sur: Al igual que en la Zona Oeste, los precios en esta zona son altos, aunque ligeramente más bajos que en la Zona Oeste. Los apartamentos están valorados en 1750 millones y las casas en 1800 millones.
2. Comparación entre Tipos de Propiedad
Apartamentos: Los precios de los apartamentos varían significativamente entre las zonas. Las zonas Oeste y Sur tienen los precios más altos, con 1800 millones y 1750 millones, respectivamente. Las zonas Centro y Oriente presentan los precios más bajos, con 300 millones y 290 millones, respectivamente.
Casas: Los precios de las casas también muestran una variabilidad significativa. La Zona Oeste tiene el precio más alto con 2000 millones, seguida por la Zona Sur con 1800 millones. Las zonas Centro y Oriente comparten un precio similar de 700 millones.
3.Análisis por Zonas
Zona Centro y Zona Oriente: Estas zonas presentan un patrón de precios similar, con valores considerablemente más bajos tanto para apartamentos como para casas. Esto podría indicar que son zonas menos desarrolladas o con menor demanda en comparación con las otras zonas.
Zona Norte: Aunque los precios son elevados, hay poca diferencia entre el precio de los apartamentos y las casas, lo que podría sugerir una oferta más equilibrada entre los dos tipos de propiedades.
Zona Oeste y Zona Sur: Estas zonas tienen los precios más altos para ambos tipos de propiedades, indicando que son áreas muy demandadas o con un alto nivel de desarrollo. La diferencia de precio entre apartamentos y casas es más notable en la Zona Oeste.
Para inversiones inmobiliarias, se recomienda enfocarse en la Zona Oeste y Sur para proyectos de lujo debido a los altos precios, en la Zona Norte por su estabilidad de mercado, y en las Zonas Centro y Oriente para desarrollos de bajo costo con potencial de crecimiento a largo plazo. Los inversores conservadores pueden optar por la Zona Norte, mientras que aquellos buscando mayores retornos deberían considerar las Zonas Oeste y Sur, y los interesados en revitalización urbana pueden encontrar oportunidades en las Zonas Centro y Oriente.