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

Objetivo general

Realizar un análisis descriptivo de los datos, para identificar las tendencias y patrones en los mismos.

Objetivo específicos

  • Explorar el Precio de las viviendas en diferentes zonas de Cali.
  • Indagar sobre los tipos de vivienda más vendidas en Cali.
  • Caracterízar las viviendas más buscadas en la ciudad de Cali.
  • Revisar la evolución del mercado de bienes raíces en Cali.

Base de datos

Metodología

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