Análisis del mercado inmobiliario en Cali
La empresa B&C (Bines y Casas) es una agencia de bienes raíces que opera en la ciudad de Cali, Colombia. La empresa fue fundada por Sandra Milena hace 10 años y actualmente cuenta con ocho agentes de bienes raíces.
El mercado de bienes raíces en Cali ha crecido significativamente en los últimos años, impulsado por el crecimiento de la población, la inversión extranjera directa y el desarrollo de nuevos proyectos inmobiliarios. En 2021, las ventas del sector en Cali llegaron a seis mil setecientos millones y en 2022 a seis mil ciel millones. Se espera que este sector continue creciendo durante los próximos años, permitiendo un desarrollo dinámico en la economía regional.
Objetivos
Realizar un análisis descriptivo de los datos, para identificar las tendencias y patrones en los mismos.
Base de datos
Se visualizará los primeros 10 datos en la base de datos y se identificarán los datos sin información de manera general, estos datos no se van a eliminar ya que pueden contener información relevante por lo que se usara el método de imputación sustituyendo los datos faltantes por la media o la mediana, para luego realizar un analisis estadistico general de manera que mediante el comportamiento de las variables podamos las preguntas situadas en los objetivos especificos.
Con el fin de identificar si hay datos faltantes en la base usamos la funcion is.na.
sapply(VF, function(x) sum(is.na(x)))
## 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
```r
summary(VF)
## id zona piso estrato
## Min. : 1 Length:8330 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 :3 NA's :2641 NA's :3
## 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.2 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 :2 NA's :3 NA's :1606 NA's :3
## habitac tipo barrio longitud
## Min. : 0.000 Length:8330 Length:8330 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
## NA's :3 NA's :3
## latitud
## Min. : 3.333
## 1st Qu.: 3.390
## Median : 3.450
## Mean : 970.370
## 3rd Qu.:3367.000
## Max. :3497.000
## NA's :3
str(VF)
## spc_tbl_ [8,330 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ id : num [1:8330] 8312 8311 8307 8296 8297 ...
## $ zona : chr [1:8330] "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
## $ piso : num [1:8330] 4 1 NA 2 NA NA 2 NA NA 2 ...
## $ estrato : num [1:8330] 6 6 5 3 5 5 6 5 5 5 ...
## $ preciom : num [1:8330] 1300 480 1200 220 330 1350 305 480 275 285 ...
## $ areaconst: num [1:8330] 318 300 800 150 112 390 125 280 74 120 ...
## $ parquea : num [1:8330] 2 1 4 1 2 8 2 4 1 2 ...
## $ banios : num [1:8330] 4 4 7 2 4 10 3 4 2 4 ...
## $ habitac : num [1:8330] 2 4 5 4 3 10 3 4 3 3 ...
## $ tipo : chr [1:8330] "Apartamento" "Casa" "Casa" "Casa" ...
## $ barrio : chr [1:8330] "arboleda" "normandía" "miraflores" "el guabal" ...
## $ longitud : num [1:8330] -76576 -76571 -76568 -76565 -76565 ...
## $ latitud : num [1:8330] 3454 3454 3455 3417 3408 ...
## - attr(*, "spec")=
## .. cols(
## .. id = col_double(),
## .. zona = col_character(),
## .. piso = col_double(),
## .. estrato = col_double(),
## .. preciom = col_double(),
## .. areaconst = col_double(),
## .. parquea = col_double(),
## .. banios = col_double(),
## .. habitac = col_double(),
## .. tipo = col_character(),
## .. barrio = col_character(),
## .. longitud = col_double(),
## .. latitud = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
<p style="background:#6dd8d5; color:black; font-weight:bold; padding:15px; border:3px solid #6d97d8; margin-top:40px; margin-bottom:40px; text-align:center; font-size:22px; border-radius:10px;">Primer análisis</p>
Con el fin de poder tener un primer análisis de la data, se realizó una gráfica de violines, como también un histograma de la variable precio, con el fin de poder observar como esta agrupada la información.
```r
ggplot(VF, aes(x=preciom,y=preciom))+
geom_violin(fill='lightblue')+
ggtitle('Grafica de violines sobre la variable de precio')+
theme(plot.title = element_text(face='bold', color = 'black', hjust = .5))+
ylim(0,3000)
## Warning: Removed 2 rows containing non-finite values (`stat_ydensity()`).
Sobre esta primera gráfica, se puede observar que la media del valor de las viviendas, es de aproximadamente de $ $ 500$. Del mismo modo, se presenta un valor atípico de aproximadamente \(\$2.000\). Con la finalidad de corroborar la información anterior, se realizó un histograma de la data, a lo cual se observa que la mayor cantidad de datos se agrupan entre los valores de $ $ 50$ a \(\$ 500\).
ggplot(VF, aes(x=preciom))+
geom_histogram(fill='lightblue')+
geom_vline(aes(xintercept=mean(preciom)), color='red')+
ggtitle('Histograma de la variable de precio')+
theme(plot.title = element_text(face='bold', color = 'black', hjust = .5))+
labs(y='Frecuencia')
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 2 rows containing non-finite values (`stat_bin()`).
## Warning: Removed 8330 rows containing missing values (`geom_vline()`).
table(VF$zona, VF$tipo)
##
## Apartamento APARTAMENTO apto casa Casa CASA
## Zona Centro 24 0 0 0 100 0
## Zona Norte 1172 16 11 4 714 5
## Zona Oeste 1025 10 0 0 168 1
## Zona Oriente 60 1 1 7 281 1
## Zona Sur 2751 34 1 3 1932 5
VF <- VF %>% mutate(tipo = replace(tipo,tipo == 'apto', 'Apartamento'))
VF <- VF %>% mutate(tipo = replace(tipo,tipo == 'APARTAMENTO', 'Apartamento'))
VF <- VF %>% mutate(tipo = replace(tipo,tipo == 'CASA', 'Casa'))
VF <- VF %>% mutate(tipo = replace(tipo,tipo == 'casa', 'Casa'))
datos_piso <- VF
table(VF$zona, VF$tipo)
##
## Apartamento Casa
## Zona Centro 24 100
## Zona Norte 1199 723
## Zona Oeste 1035 169
## Zona Oriente 62 289
## Zona Sur 2786 1940
table(VF$zona)
##
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## 124 1922 1204 351 4726
barplot(prop.table(table(VF$zona)),col=c("blue","pink", "purple", "orange", "red"),
ylim=c(0,0.7),ylab="Frecuencia Relativa")
table(VF$tipo)
##
## Apartamento Casa
## 5106 3221
a = aggregate(by = list(VF$zona,VF$tipo), VF$preciom, FUN=mean)
colnames(a)=c("Zona", "Tipo", "Promedio")
a <- a[with(a, order(-a$`Promedio`)), ]
a
## Zona Tipo Promedio
## 8 Zona Oeste Casa 736.3550
## 3 Zona Oeste Apartamento 669.2676
## 10 Zona Sur Casa 612.0077
## 7 Zona Norte Casa 446.0913
## 6 Zona Centro Casa 339.2400
## 5 Zona Sur Apartamento 297.3550
## 2 Zona Norte Apartamento 285.2577
## 9 Zona Oriente Casa 244.8201
## 1 Zona Centro Apartamento 186.5833
## 4 Zona Oriente Apartamento 152.5968