Introducción

El análisis de los datos desempeña un papel fundamental en la comprensión de las tendencias y dinámicas que influyen en varios sectores de la economía. Para el mercado inmobiliario se puede recopilar y analizar información asociada a la oferta y la demanda de las propiedades, los precios de compra y alquiler, así como factores económicos, sociales y urbanísticos, que le permiten a los profesionales del sector, inversionistas y formuladores de políticas tomar decisiones informadas y estratégicas. El mercado inmobiliario en Cali ha crecido debido a factores como el crecimiento de la población, inversión extranjera y desarrollo de proyectos inmobiliarios. El siguiente informe proporciona una visión integral y basada en el análisis de los datos del mercado inmobiliario en Cali. Para realizar el análisis descriptivo se utilizó la información suministrada ‘vivienda_faltantes’ y se complentó con información suministrada por la Alcaldía de Santiago de Cali.

Objetivos

General

Brindar a la empresa B&C información valiosa asociada al mercado inmobiliario en Cali y apoyar la toma de deciisiones con el fin de crear un mercado más transperente, eficiente y adaptable a las necesidades cambiantes de los consumidores y la economía.

Específicos

Proporcionar información sobre aspectos que le ayuden a la empresa B&C a:

  • Mejorar la fijación de precios.

  • Definir nicho de mercado.

  • Desarrollar estrategias de marketing.

  • Ofrecer servicios personalizados a sus clientes.

Métodos

Preparación de datos

Cargar Librerías

Cargamos algunas de las librerías que utilizaremos durante toda la preparación y análisis de los datos y configuramos los decimales para las tablas.

library(paqueteMET)
library(tidyverse)
library(dplyr)
library(lubridate)
library(stringi)
library(scales)
library(summarytools)
library(flextable)
library(plotly)
library(ggplot2)
library(leaflet)

options(scipen = 100, digits = 6)

Crear Funciones

Se crean funciones que nos ayudarán a limpiar la información. La primera función tiene como finalidad dejar los campos tipos caracter en mayúscula y eliminar los espacios. La segunda función tiene como finalidad contar la longitud de un número antes del punto decimal.

LimpiarNombres <- function(s){
  x<-trimws(str_to_upper(gsub("([\\s])\\1+","\\1",s, perl=T)))
  return(x)
}
contar_int <- function(x){
  if(length(x)==0){
    numeric()
  }else{
    floor(x) %>%
      abs() %>%
      nchar()
    }
  } 

Cargar datos

data(vivienda_faltantes)

Inspección de datos

Se utiliza la función ‘glimpse’ que nos proporcioará una vista general de los datos. El número de registros, el número de campos y la clase a la que pertenecen esos campos.

glimpse(vivienda_faltantes)
## Rows: 8,330
## Columns: 13
## $ id        <dbl> 8312, 8311, 8307, 8296, 8297, 8298, 8299, 8300, 8286, 8287, …
## $ zona      <chr> "Zona Oeste", "Zona Oeste", "Zona Oeste", "Zona Sur", "Zona …
## $ piso      <dbl> 4, 1, NA, 2, NA, NA, 2, NA, NA, 2, 1, NA, 6, NA, 2, 8, NA, 6…
## $ estrato   <dbl> 6, 6, 5, 3, 5, 5, 6, 5, 5, 5, 5, 3, 6, 3, 5, 6, 5, 6, 6, 6, …
## $ preciom   <dbl> 1300, 480, 1200, 220, 330, 1350, 305, 480, 275, 285, 310, 17…
## $ areaconst <dbl> 318, 300, 800, 150, 112, 390, 125, 280, 74, 120, 166, 155, 1…
## $ parquea   <dbl> 2, 1, 4, 1, 2, 8, 2, 4, 1, 2, 2, NA, 2, NA, 1, 2, 2, 2, 4, 1…
## $ banios    <dbl> 4, 4, 7, 2, 4, 10, 3, 4, 2, 4, 4, 4, 3, 2, 2, 3, 3, 5, 7, 1,…
## $ habitac   <dbl> 2, 4, 5, 4, 3, 10, 3, 4, 3, 3, 3, 6, 3, 3, 2, 4, 3, 4, 3, 2,…
## $ tipo      <chr> "Apartamento", "Casa", "Casa", "Casa", "Casa", "Casa", "Apar…
## $ barrio    <chr> "arboleda", "normandía", "miraflores", "el guabal", "bella s…
## $ longitud  <dbl> -76576, -76571, -76568, -76565, -76565, -76565, -76565, -765…
## $ latitud   <dbl> 3454.00000, 3454.00000, 3455.00000, 3417.00000, 3408.00000, …

Al ver los datos podemos concluir que tenemos un total de 8330 registros con 13 campos, 10 de estos son númericos y los restantes son tipo caracter.

  • Id: este dato es la identificación del registro por lo que tendremos en cuenta para saber si hay datos duplicados.

  • zona: Variable cualitativa nominal.

  • piso: Variable cuantitativa discreta.

  • estrato: Variable cualitativa ordinal.

  • preciom (Precio): Variable cuantitativa continua.

  • areaconst (Área construida): Variable cuantitativa continua.

  • parquea (Número de parqueaderos): Variable cuantitativa discreta.

  • banios (Número de Baños): Variable cuantitativa discreta.

  • habitac (Número de Habitaciones): Variable cuantitativa discreta.

  • tipo (Tipo de vivienda): Variable cualitativa nominal.

  • barrio: Variable cualitativa nominal.

  • longitud: Variable cuantitativa continua.

  • latitud: Variable cuantitativa continua.

Estandarizar las variables tipo caracter

Creamos un objeto llamado vivienda_faltantes y aplicamos la función que nos ayuda a estandarizar y limpiar la información de tipo caracter.

vivienda_faltantes <- vivienda_faltantes %>%
  mutate_if(is.character, LimpiarNombres)

Identificar registros duplicados y vacíos

identificacionId<- vivienda_faltantes %>%
  group_by(id) %>% 
  summarise(contar=n()) %>% 
  filter(contar>1)

print(identificacionId)
## # A tibble: 9 × 2
##      id contar
##   <dbl>  <int>
## 1  8309      2
## 2  8310      2
## 3  8313      2
## 4  8314      2
## 5  8315      2
## 6  8316      2
## 7  8317      2
## 8  8318      2
## 9    NA      3

Encontramos que existen 3 id con NA, y 8 id duplicados: 8309, 8310, 8313, 8314, 8315, 8316, 8317, 8318. Vemos los NA y se pueden eliminar por lo que no contienen información relevante.Casi todos los campos están en NA.

identificacionId<- vivienda_faltantes %>%
  filter(is.na(id))

print(identificacionId)
## # A tibble: 3 × 13
##      id zona   piso estrato preciom areaconst parquea banios habitac tipo 
##   <dbl> <chr> <dbl>   <dbl>   <dbl>     <dbl>   <dbl>  <dbl>   <dbl> <chr>
## 1    NA <NA>     NA      NA      NA        NA      NA     NA      NA <NA> 
## 2    NA <NA>     NA      NA      NA        NA      NA     NA      NA <NA> 
## 3    NA <NA>     NA      NA     330        NA      NA     NA      NA <NA> 
## # ℹ 3 more variables: barrio <chr>, longitud <dbl>, latitud <dbl>

Examinamos los 8 id duplicados y estos contienen la misma información por lo que eliminaremos los duplicados posteriormente.

identificacionId<- vivienda_faltantes %>%
  filter(id%in%c(8309, 8310, 8313, 8314, 8315, 8316, 8317, 8318)) %>% 
  arrange(id)

print(identificacionId)
## # A tibble: 16 × 13
##       id zona        piso estrato preciom areaconst parquea banios habitac tipo 
##    <dbl> <chr>      <dbl>   <dbl>   <dbl>     <dbl>   <dbl>  <dbl>   <dbl> <chr>
##  1  8309 ZONA OESTE     5       4     150        56      NA      1       2 APAR…
##  2  8309 ZONA OESTE     5       4     150        56      NA      1       2 APAR…
##  3  8310 ZONA OESTE     1       6    1600       463       4      6       3 APAR…
##  4  8310 ZONA OESTE     1       6    1600       463       4      6       3 APAR…
##  5  8313 ZONA OESTE     7       6     525       137       2      3       3 APAR…
##  6  8313 ZONA OESTE     7       6     525       137       2      3       3 APAR…
##  7  8314 ZONA OESTE     7       6    1400       210       3      4       3 APAR…
##  8  8314 ZONA OESTE     7       6    1400       210       3      4       3 APAR…
##  9  8315 ZONA OESTE    NA       6     620       167       2      4       4 APAR…
## 10  8315 ZONA OESTE    NA       6     620       167       2      4       4 APAR…
## 11  8316 ZONA NORTE     7       5     400       220       1      4       4 APAR…
## 12  8316 ZONA NORTE     7       5     400       220       1      4       4 APAR…
## 13  8317 ZONA OESTE    NA       6    1100       290       4      4       3 APAR…
## 14  8317 ZONA OESTE    NA       6    1100       290       4      4       3 APAR…
## 15  8318 ZONA NORTE    NA       4     580       295       2      5       5 CASA 
## 16  8318 ZONA NORTE    NA       4     580       295       2      5       5 CASA 
## # ℹ 3 more variables: barrio <chr>, longitud <dbl>, latitud <dbl>

Eliminamos los id analizados anteriormente y quedan en total 8.319 registros.

vivienda_faltantes <- distinct(vivienda_faltantes)
vivienda_faltantes <-vivienda_faltantes[!is.na(vivienda_faltantes$id),]

Corregir campos de latitud, longitud y tipo

Al observar los campos de las coordenadas encontramos que la información es inconsistente puesto que existen datos sin punto decimal (característica de las coordenadas)

El campo tipo, tiene 2 opciones: Apartamento o Vivienda. Sin embargo, en algunos casos no aparece Apartamento sino Apto, por lo que es necesario cambiarlo.

Utilizamos la función mutate para modificar los campos longitud, latitud y tipo. Para la longitud y latitud, aplicamos la función contar_int para dterminar en qué registros tenemos que hacer un cambio, es decir, multiplicarlo para que quede como decimal.

vivienda_faltantes <- vivienda_faltantes %>% 
mutate(longitud = ifelse(contar_int(longitud)==2, longitud, longitud*0.001),
       latitud = ifelse(contar_int(latitud)==1, latitud, latitud*0.001),
       tipo = ifelse(tipo=="APTO", "APARTAMENTO", tipo)) 

Corregir datos de Barrio

Los caracteres “É” y “Ú” los está tomando con los caracteres “√©” y “√∫”, respectivamente. Por lo tanto hacemos los cambios.

vivienda_faltantes$barrio <- gsub("√©", "É", vivienda_faltantes$barrio)
vivienda_faltantes$barrio <- gsub("√∫", "Ú", vivienda_faltantes$barrio)

Exploración de datos

Primera Parte: General

Con la información limpia, analizamos la información en general.

summary(vivienda_faltantes)
##        id           zona                piso          estrato    
##  Min.   :   1   Length:8319        Min.   : 1.00   Min.   :3.00  
##  1st Qu.:2080   Class :character   1st Qu.: 2.00   1st Qu.:4.00  
##  Median :4160   Mode  :character   Median : 3.00   Median :5.00  
##  Mean   :4160                      Mean   : 3.77   Mean   :4.63  
##  3rd Qu.:6240                      3rd Qu.: 5.00   3rd Qu.:5.00  
##  Max.   :8319                      Max.   :12.00   Max.   :6.00  
##                                    NA's   :2635                  
##     preciom       areaconst       parquea          banios         habitac     
##  Min.   :  58   Min.   :  30   Min.   : 1.00   Min.   : 0.00   Min.   : 0.00  
##  1st Qu.: 220   1st Qu.:  80   1st Qu.: 1.00   1st Qu.: 2.00   1st Qu.: 3.00  
##  Median : 330   Median : 123   Median : 2.00   Median : 3.00   Median : 3.00  
##  Mean   : 434   Mean   : 175   Mean   : 1.83   Mean   : 3.11   Mean   : 3.61  
##  3rd Qu.: 540   3rd Qu.: 229   3rd Qu.: 2.00   3rd Qu.: 4.00   3rd Qu.: 4.00  
##  Max.   :1999   Max.   :1745   Max.   :10.00   Max.   :10.00   Max.   :10.00  
##                                NA's   :1602                                   
##      tipo              barrio             longitud        latitud    
##  Length:8319        Length:8319        Min.   :-76.6   Min.   :3.33  
##  Class :character   Class :character   1st Qu.:-76.5   1st Qu.:3.38  
##  Mode  :character   Mode  :character   Median :-76.5   Median :3.42  
##                                        Mean   :-76.5   Mean   :3.42  
##                                        3rd Qu.:-76.5   3rd Qu.:3.45  
##                                        Max.   :-76.5   Max.   :3.50  
## 

A continuación, analizaremos cada una de las variables para tener un panorama general, las operaciones serán muy similares en los casos de las varibales que se asocian a las características de las propiedades.

Zona

Creamos una tabla de frecuencia para la variable Zona con la función freq y data.frame. En este caso, la tabla muestra automáticamente si tiene valores NA. Como no los tiene, eliminamos de la tabla esta fila y seleccionamos únicamente los campos que nos interesan, Zona, Freq. Absoluta, Freq. Relativa %. COn la función flextable, creamos una tabla que se vea mucho mejor.

Zona <- data.frame(freq(vivienda_faltantes$zona))

Zona<- rownames_to_column(Zona,"Zona") %>%
  drop_na() %>% 
  select(Zona, Freq, X..Valid)

colnames(Zona) = c("Zona", "Freq. Absoluta", "Freq. Relativa %")

flextable(Zona)

Zona

Freq. Absoluta

Freq. Relativa %

ZONA CENTRO

124

1.49056

ZONA NORTE

1,920

23.07970

ZONA OESTE

1,198

14.40077

ZONA ORIENTE

351

4.21926

ZONA SUR

4,726

56.80971

Total

8,319

100.00000

Construimos un gráfico de barras para ver la distribución. Para ello, eliminamos la fila “Total” y utilizamos la función plot_ly con type = “bar”

dataZona <- Zona%>% 
  filter(Zona!="Total")

plot_ly(data = dataZona, x=~Zona, y=~`Freq. Absoluta`,  type = "bar",
         text = comma(dataZona$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E6E6FA", "#FFE4B5", "#FFDAB9", "#EEE8AA", "#BDB76B")))%>% 
  layout(title = list(text="Distribución Zonas Mercado inmobiliario Cali", 
                      font=list(family = "Arial, sans-serif",size = 18,color = "#17202A")),
         xaxis = list(title=list(text="Zonas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
                      ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Piso

Creamos una tabla de frecuencia para la variable Piso con la función freq y data.frame. Seleccionamos únicamente los campos que nos interesan, Piso, Freq. Absoluta, Freq. Relativa %. COn la función flextable, creamos una tabla que se vea mucho mejor.

Piso <- data.frame(freq(vivienda_faltantes$piso))

Piso<- rownames_to_column(Piso,"Piso") %>%
  select(Piso, Freq, X..Valid)

colnames(Piso) = c("Piso", "Freq. Absoluta", "Freq. Relativa %")

flextable(Piso)

Piso

Freq. Absoluta

Freq. Relativa %

1

860

15.13019

2

1,450

25.51020

3

1,097

19.29979

4

607

10.67910

5

567

9.97537

6

245

4.31034

7

204

3.58902

8

211

3.71217

9

146

2.56861

10

130

2.28712

11

84

1.47783

12

83

1.46024

<NA>

2,635

Total

8,319

100.00000

Construimos un gráfico de barras para ver la distribución. Para ello, eliminamos la fila “Total” y los NA. Dejamos la variable Piso como factor y determinamos los niveles. Utilizamos la función plot_ly con type = “bar”

dataPiso <- Piso%>% 
  drop_na() %>%
  filter(Piso!="Total")

dataPiso$Piso<-factor(dataPiso$Piso, ordered = T,levels = c("1","2","3","4","5","6","7","8","9","10","11","12"))

plot_ly(data = dataPiso, x=~Piso, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataPiso$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B", "#556B2F", "#A52A2A")))%>% 
  layout(title = list(text="Número de piso de las viviendas del Mercado inmobiliario Cali", 
                      font=list(family = "Arial, sans-serif",size = 18,color = "#17202A")),
         xaxis = list(title=list(text="Piso", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Estrato

Creamos una tabla de frecuencia para la variable Estrato con la función freq y data.frame. En este caso, la tabla muestra automáticamente si tiene valores NA. Como no los tiene, eliminamos de la tabla esta fila. Seleccionamos únicamente los campos que nos interesan, Estrato, Freq. Absoluta, Freq. Relativa %. COn la función flextable, creamos una tabla que se vea mucho mejor.

Estrato <- data.frame(freq(vivienda_faltantes$estrato))

Estrato<- rownames_to_column(Estrato,"Estrato") %>%
  select(Estrato, Freq, X..Valid) %>%
  drop_na() 

colnames(Estrato) = c("Estrato", "Freq. Absoluta", "Freq. Relativa %")

flextable(Estrato)

Estrato

Freq. Absoluta

Freq. Relativa %

3

1,453

17.4660

4

2,129

25.5920

5

2,750

33.0569

6

1,987

23.8851

Total

8,319

100.0000

Construimos un gráfico de barras para ver la distribución. Para ello, eliminamos la fila “Total” y utilizamos la función plot_ly con type = “bar” Dejamos la variable Estrato como factor y determinamos los niveles.

dataEstrato <- Estrato%>% 
  filter(Estrato!="Total")

dataEstrato$Estrato<-factor(dataEstrato$Estrato, ordered = T,levels = c("1","2","3","4","5","6"))

plot_ly(data = dataEstrato, x=~Estrato, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataEstrato$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E6E6FA","#BDB76B", "#556B2F", "#A52A2A")))%>% 
  layout(title = list(text="Estrato en las viviendas del Mercado inmobiliario Cali", 
                      font=list(family = "Arial, sans-serif",size = 18,color = "#17202A")),
         xaxis = list(title=list(text="Estrato", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Parqueaderos

Creamos una tabla de frecuencia para la variable Parqueadero con la función freq y data.frame. Seleccionamos únicamente los campos que nos interesan, Parqueadero, Freq. Absoluta, Freq. Relativa %. Con la función flextable, creamos una tabla que se vea mucho mejor.

Parqueadero <- data.frame(freq(vivienda_faltantes$parquea))

Parqueadero<- rownames_to_column(Parqueadero,"Parqueadero") %>%
  select(Parqueadero, Freq, X..Valid)

colnames(Parqueadero) = c("Parqueadero", "Freq. Absoluta", "Freq. Relativa %")

flextable(Parqueadero)

Parqueadero

Freq. Absoluta

Freq. Relativa %

1

3,155

46.9703737

2

2,475

36.8468066

3

520

7.7415513

4

384

5.7168379

5

68

1.0123567

6

68

1.0123567

7

18

0.2679768

8

17

0.2530892

9

4

0.0595504

10

8

0.1191008

<NA>

1,602

Total

8,319

100.0000000

Construimos un gráfico de barras para ver la distribución. Para ello, eliminamos la fila “Total” y los valores NA. Utilizamos la función plot_ly con type = “bar” Dejamos la variable Parqueadero como factor y determinamos los niveles.

dataParqueadero <- Parqueadero%>% 
  drop_na() %>%
  filter(Parqueadero!="Total")

dataParqueadero$Parqueadero<-factor(dataParqueadero$Parqueadero, ordered = T,levels = c("1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataParqueadero, x=~Parqueadero, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataParqueadero$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B")))%>% 
  layout(title = list(text="Número de parqueaderos en las viviendas del Mercado inmobiliario Cali", 
                      font=list(family = "Arial, sans-serif",size = 18,color = "#17202A")),
         xaxis = list(title=list(text="Parqueaderos", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Baños

Creamos una tabla de frecuencia para la variable Baño con la función freq y data.frame. En este caso, la tabla muestra automáticamente si tiene valores NA. Como no los tiene, eliminamos de la tabla esta fila. Seleccionamos únicamente los campos que nos interesan, Baños, Freq. Absoluta, Freq. Relativa %. Con la función flextable, creamos una tabla que se vea mucho mejor.

Baños <- data.frame(freq(vivienda_faltantes$banios))

Baños<- rownames_to_column(Baños,"Baños") %>%
  drop_na() %>%
  select(Baños, Freq, X..Valid)

colnames(Baños) = c("Baños", "Freq. Absoluta", "Freq. Relativa %")

flextable(Baños)

Baños

Freq. Absoluta

Freq. Relativa %

0

45

0.540930

1

496

5.962255

2

2,946

35.412910

3

1,993

23.957206

4

1,456

17.502104

5

890

10.698401

6

314

3.774492

7

107

1.286212

8

48

0.576992

9

15

0.180310

10

9

0.108186

Total

8,319

100.000000

Construimos un gráfico de barras para ver la distribución. Para ello, eliminamos la fila “Total” y los valores NA. Utilizamos la función plot_ly con type = “bar” Dejamos la variable Baño como factor y determinamos los niveles.

dataBaños <- Baños%>% 
  filter(Baños!="Total")

dataBaños$Baños<-factor(dataBaños$Baños, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataBaños, x=~Baños, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataBaños$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B", "#A52A2A")))%>% 
  layout(title = list(text="Número de baños en las viviendas del Mercado inmobiliario Cali", 
                      font=list(family = "Arial, sans-serif",size = 18,color = "#17202A")),
         xaxis = list(title=list(text="Baños", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Habitaciones

Creamos una tabla de frecuencia para la variable Habitaciones con la función freq y data.frame. En este caso, la tabla muestra automáticamente si tiene valores NA. Como no los tiene, eliminamos de la tabla esta fila. Seleccionamos únicamente los campos que nos interesan, Habitaciones, Freq. Absoluta, Freq. Relativa %. Con la función flextable, creamos una tabla que se vea mucho mejor.

Habitaciones <- data.frame(freq(vivienda_faltantes$habitac))

Habitaciones<- rownames_to_column(Habitaciones,"Habitaciones") %>%
  drop_na() %>%
  select(Habitaciones, Freq, X..Valid)

colnames(Habitaciones) = c("Habitaciones", "Freq. Absoluta", "Freq. Relativa %")

flextable(Habitaciones)

Habitaciones

Freq. Absoluta

Freq. Relativa %

0

66

0.793365

1

59

0.709220

2

926

11.131146

3

4,097

49.248708

4

1,729

20.783748

5

679

8.162039

6

318

3.822575

7

173

2.079577

8

138

1.658853

9

83

0.997716

10

51

0.613054

Total

8,319

100.000000

Construimos un gráfico de barras para ver la distribución. Para ello, eliminamos la fila “Total” y los valores NA. Utilizamos la función plot_ly con type = “bar” Dejamos la variable Habitación como factor y determinamos los niveles.

dataHabitaciones <- Habitaciones%>% 
  filter(Habitaciones!="Total")

dataHabitaciones$Habitaciones<-factor(dataHabitaciones$Habitaciones, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataHabitaciones, x=~Habitaciones, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataHabitaciones$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B", "#A52A2A")))%>% 
  layout(title = list(text="Número de habitaciones en las viviendas del Mercado inmobiliario Cali", 
                      font=list(family = "Arial, sans-serif",size = 18,color = "#17202A")),
         xaxis = list(title=list(text="Habitaciones", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Tipo

Creamos una tabla de frecuencia para la variable Tipo con la función freq y data.frame. En este caso, la tabla muestra automáticamente si tiene valores NA. Como no los tiene, eliminamos de la tabla esta fila. Seleccionamos únicamente los campos que nos interesan, Tipo, Freq. Absoluta, Freq. Relativa %. Con la función flextable, creamos una tabla que se vea mucho mejor.

Tipo <- data.frame(freq(vivienda_faltantes$tipo))

Tipo<- rownames_to_column(Tipo,"Tipo") %>%
  drop_na() %>%
  select(Tipo, Freq, X..Valid)

colnames(Tipo) = c("Tipo", "Freq. Absoluta", "Freq. Relativa %")

flextable(Tipo)

Tipo

Freq. Absoluta

Freq. Relativa %

APARTAMENTO

5,099

61.2934

CASA

3,220

38.7066

Total

8,319

100.0000

Construimos un gráfico de pastel para ver la distribución. Para ello, eliminamos la fila “Total” y los valores NA. Utilizamos la función plot_ly con type = “pie”

dataTipo <- Tipo%>% 
  filter(Tipo!="Total")


plot_ly(data = dataTipo, labels = ~Tipo, values=~`Freq. Absoluta`, type="pie",
        marker = list(colors = c("#BDB76B", "#A52A2A")),
        textposition = 'inside',
        textinfo = 'label+percent',
        showlegend = FALSE)

Barrio

Creamos una tabla de frecuencia para la variable Barrio con la función freq y data.frame. En este caso, la tabla muestra automáticamente si tiene valores NA. Como no los tiene, eliminamos de la tabla esta fila. Seleccionamos únicamente los campos que nos interesan, Barrio, Freq. Absoluta, Freq. Relativa %. Con la función flextable, creamos una tabla que se vea mucho mejor.

Barrio <- data.frame(freq(vivienda_faltantes$barrio))

NOTA: No presento la tabla asociada a la variable barrio porque tiene más de 30 registros. Lo que si se puede identificar es que existen barrios que están duplicados porque los escribieron de otra forma. Por otro lado, en algunos casos no aparece el barrio sino que aparace la Zona. Lo mejor que se podría hacer en este caso sería ver la distribución geográfica con las coordenadas.

Latitud y Longitud

Con la función leaflet creamos el mapa de viviendas. Como son 8.319 registros, se demora en cargar el archivo y no se visualiza muy bien la distribución geográfica. Por lo tanto dejo la formulación y un pantallazo de lo que arroja el código.

vivienda_faltantes %>% leaflet() %>% addTiles() %>% addMarkers(~longitud, ~latitud)

Mapa Viviendas
Mapa Viviendas

preciom

Para el precio, extraemos toda la información estadística asociada a indicadores de tendencia central, dispersión, posición e indicadores de forma. También construimos un histograma para comprenderla distribución de la variable.

descr(vivienda_faltantes$preciom)
## Descriptive Statistics  
## vivienda_faltantes$preciom  
## N: 8319  
## 
##                     preciom
## ----------------- ---------
##              Mean    433.90
##           Std.Dev    328.67
##               Min     58.00
##                Q1    220.00
##            Median    330.00
##                Q3    540.00
##               Max   1999.00
##               MAD    207.56
##               IQR    320.00
##                CV      0.76
##          Skewness      1.85
##       SE.Skewness      0.03
##          Kurtosis      3.67
##           N.Valid   8319.00
##         Pct.Valid    100.00
hist(vivienda_faltantes$preciom,  main = "Histograma de Precio", 
     xlab = "Precio", ylab = "Frecuencia", col = "#BDB76B")

areaconst

Para el área, extraemos toda la información estadística asociada a indicadores de tendencia central, dispersión, posición e indicadores de forma. También construimos un histograma para comprenderla distribución de la variable.

descr(vivienda_faltantes$areaconst)
## Descriptive Statistics  
## vivienda_faltantes$areaconst  
## N: 8319  
## 
##                     areaconst
## ----------------- -----------
##              Mean      174.93
##           Std.Dev      142.96
##               Min       30.00
##                Q1       80.00
##            Median      123.00
##                Q3      229.00
##               Max     1745.00
##               MAD       84.51
##               IQR      149.00
##                CV        0.82
##          Skewness        2.69
##       SE.Skewness        0.03
##          Kurtosis       12.91
##           N.Valid     8319.00
##         Pct.Valid      100.00
hist(vivienda_faltantes$areaconst,main = "Histograma de Área", 
     xlab = "Área", ylab = "Frecuencia", col="#A52A2A")

Analizaremos las variables de precio y área junto con las demás, para saber cómo se distribuyen los datos.Para ello utilizaremos la función boxplot que nos proporciona un gráfico de cajas y bigotes.

Precio vs Zona

par(cex.axis=0.8)
boxplot(vivienda_faltantes$preciom ~ vivienda_faltantes$zona,
        main="Distribución del precio por zona",
        ylab="Precio",
        xlab="Zona",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA", "#D8BFD8", "#FFE4B5")
        )

Área vs Zona

par(cex.axis=0.8)
boxplot(vivienda_faltantes$areaconst ~ vivienda_faltantes$zona,
        main="Distribución del área por zona",
        ylab="Área",
        xlab="Zona",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5")
        )

Precio vs Estrato

par(cex.axis=0.8)
boxplot(vivienda_faltantes$preciom ~ vivienda_faltantes$estrato,
        main="Distribución del precio de acuerdo al estrato",
        ylab="Precio",
        xlab="Estrato",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5")
        )

Área vs Estrato

par(cex.axis=0.8)
boxplot(vivienda_faltantes$areaconst ~ vivienda_faltantes$estrato,
        main="Distribución del área por estrato",
        ylab="Área",
        xlab="Estrato",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5")
        )

Precio vs Piso

par(cex.axis=0.8)
boxplot(vivienda_faltantes$preciom ~ vivienda_faltantes$piso,
        main="Distribución del precio de acuerdo al piso",
        ylab="Precio",
        xlab="Piso",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5")
        )

Precio vs Parqueaderos

par(cex.axis=0.8)
boxplot(vivienda_faltantes$preciom ~ vivienda_faltantes$parquea,
        main="Distribución del precio de acuerdo al número de parqueaderos",
        ylab="Precio",
        xlab="Parquedaeros",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5")
        )

Precio vs Tipo

par(cex.axis=0.8)
boxplot(vivienda_faltantes$preciom ~ vivienda_faltantes$tipo,
        main="Distribución del precio de acuerdo al tipo de vivienda",
        ylab="Precio",
        xlab="Tipo",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5")
        )

Precio vs Área

Con la función breaks creamos intervalos para los precios y área. Esto con el fin de analizar las dos variables.

breaksPrecio =c(250, 500,750,1000,1250,1500,1750,2000)
breaksArea =c(100, 200,300,400,500,600,700,800, 900,1000,1100,1200,1300,1400,1500,1600,1700,1800)
Precio = cut(vivienda_faltantes$preciom, breaks = breaksPrecio)
Area = cut(vivienda_faltantes$areaconst, breaks = breaksArea)

table(Precio, Area)
##                     Area
## Precio               (100,200] (200,300] (300,400] (400,500] (500,600]
##   (250,500]               1513       545       188        40        12
##   (500,750]                568       269       167       110        26
##   (750,1e+03]              114       199       123        54        22
##   (1e+03,1.25e+03]          19        87        55        28        18
##   (1.25e+03,1.5e+03]         1        63        41        32        21
##   (1.5e+03,1.75e+03]         0        12        28        18         7
##   (1.75e+03,2e+03]           0         5        11        20         6
##                     Area
## Precio               (600,700] (700,800] (800,900] (900,1e+03] (1e+03,1.1e+03]
##   (250,500]                  1         0         0           1               0
##   (500,750]                 11         6         0           0               0
##   (750,1e+03]                6         6         6           6               0
##   (1e+03,1.25e+03]          11        10         2           4               0
##   (1.25e+03,1.5e+03]        11         5         4           4               1
##   (1.5e+03,1.75e+03]         2         4         2           2               2
##   (1.75e+03,2e+03]           3         3         2           0               2
##                     Area
## Precio               (1.1e+03,1.2e+03] (1.2e+03,1.3e+03] (1.3e+03,1.4e+03]
##   (250,500]                          0                 0                 0
##   (500,750]                          1                 0                 0
##   (750,1e+03]                        0                 0                 0
##   (1e+03,1.25e+03]                   1                 0                 0
##   (1.25e+03,1.5e+03]                 1                 1                 0
##   (1.5e+03,1.75e+03]                 0                 0                 0
##   (1.75e+03,2e+03]                   0                 0                 0
##                     Area
## Precio               (1.4e+03,1.5e+03] (1.5e+03,1.6e+03] (1.6e+03,1.7e+03]
##   (250,500]                          1                 0                 0
##   (500,750]                          0                 0                 0
##   (750,1e+03]                        0                 0                 0
##   (1e+03,1.25e+03]                   0                 0                 0
##   (1.25e+03,1.5e+03]                 1                 0                 0
##   (1.5e+03,1.75e+03]                 1                 1                 0
##   (1.75e+03,2e+03]                   0                 1                 0
##                     Area
## Precio               (1.7e+03,1.8e+03]
##   (250,500]                          1
##   (500,750]                          0
##   (750,1e+03]                        0
##   (1e+03,1.25e+03]                   0
##   (1.25e+03,1.5e+03]                 0
##   (1.5e+03,1.75e+03]                 0
##   (1.75e+03,2e+03]                   0

Resumen Primera Parte

En esta primera parte pudimos identificar algunos aspectos generales, como que por ejemplo, el 80% de los datos se encuentran concentrados en la Zona Oeste (14.4%) y Zona Sur(56.8%). Al analizar cada una de las variables podemos generalizar, pero para ser más asertivos, analizaremos cada una de las zonas puesto que como pudimos ver algunas variables están muy dispersas.

Segunda Parte: Específico

Zona Centro

La Zona Centro cuenta con 124 viviendas que representan el 1.5% de los registros analizados. Filtramos la información para que solo nos muestre la información de la Zona Centro

dataZonaCentro <- vivienda_faltantes %>% 
  filter(zona == "ZONA CENTRO")

descr(dataZonaCentro)
## Descriptive Statistics  
## dataZonaCentro  
## N: 124  
## 
##                     areaconst   banios   estrato   habitac        id   latitud   longitud   parquea
## ----------------- ----------- -------- --------- --------- --------- --------- ---------- ---------
##              Mean      194.04     2.84      3.20      4.70   3782.92      3.44     -76.53      1.41
##           Std.Dev      109.78     1.54      0.53      2.35   1389.70      0.01       0.01      1.03
##               Min       52.00     0.00      3.00      0.00    440.00      3.40     -76.54      1.00
##                Q1      122.50     2.00      3.00      3.00   2912.50      3.44     -76.53      1.00
##            Median      160.00     2.50      3.00      4.00   3807.50      3.44     -76.53      1.00
##                Q3      247.50     4.00      3.00      6.00   4847.50      3.45     -76.52      1.00
##               Max      750.00     9.00      6.00     10.00   6662.00      3.49     -76.50      6.00
##               MAD       94.15     0.74      0.00      1.48   1383.27      0.01       0.01      0.00
##               IQR      122.50     2.00      0.00      3.00   1915.50      0.01       0.01      0.00
##                CV        0.57     0.54      0.16      0.50      0.37      0.00       0.00      0.74
##          Skewness        1.75     0.99      2.86      0.45     -0.56      0.80       1.30      3.21
##       SE.Skewness        0.22     0.22      0.22      0.22      0.22      0.22       0.22      0.30
##          Kurtosis        5.07     1.65      8.53     -0.46     -0.26      5.63       2.04     10.41
##           N.Valid      124.00   124.00    124.00    124.00    124.00    124.00     124.00     64.00
##         Pct.Valid      100.00   100.00    100.00    100.00    100.00    100.00     100.00     51.61
## 
## Table: Table continues below
## 
##  
## 
##                      piso   preciom
## ----------------- ------- ---------
##              Mean    2.26    309.69
##           Std.Dev    1.97    162.15
##               Min    1.00    100.00
##                Q1    1.00    187.50
##            Median    2.00    297.00
##                Q3    3.00    362.50
##               Max   11.00   1100.00
##               MAD    1.48    126.02
##               IQR    2.00    172.50
##                CV    0.87      0.52
##          Skewness    2.66      1.94
##       SE.Skewness    0.29      0.22
##          Kurtosis    8.68      5.92
##           N.Valid   69.00    124.00
##         Pct.Valid   55.65    100.00

Haremos lo mismo que se hizo al analizar las variables de manera general:

Piso Zona Centro

Tabla:

Piso <- data.frame(freq(dataZonaCentro$piso))

Piso<- rownames_to_column(Piso,"Piso") %>%
  select(Piso, Freq, X..Valid)

colnames(Piso) = c("Piso", "Freq. Absoluta", "Freq. Relativa %")

flextable(Piso)

Piso

Freq. Absoluta

Freq. Relativa %

1

33

47.82609

2

16

23.18841

3

8

11.59420

4

5

7.24638

5

5

7.24638

11

2

2.89855

<NA>

55

Total

124

100.00000

Gráfico:

dataPiso <- Piso%>% 
  drop_na() %>%
  filter(Piso!="Total")

dataPiso$Piso<-factor(dataPiso$Piso, ordered = T,levels = c("1","2","3","4","5","11"))

plot_ly(data = dataPiso, x=~Piso, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataPiso$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9")))%>% 
  layout(title = list(text="Número de piso de las viviendas del Mercado inmobiliario Cali- Zona Centro", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Piso", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Estrato Zona Centro

Tabla:

Estrato <- data.frame(freq(dataZonaCentro$estrato))

Estrato<- rownames_to_column(Estrato,"Estrato") %>%
  select(Estrato, Freq, X..Valid) %>%
  drop_na() 

colnames(Estrato) = c("Estrato", "Freq. Absoluta", "Freq. Relativa %")

flextable(Estrato)

Estrato

Freq. Absoluta

Freq. Relativa %

3

105

84.677419

4

14

11.290323

5

4

3.225806

6

1

0.806452

Total

124

100.000000

Gráfico

dataEstrato <- Estrato%>% 
  filter(Estrato!="Total")

dataEstrato$Estrato<-factor(dataEstrato$Estrato, ordered = T,levels = c("3","4","5","6"))

plot_ly(data = dataEstrato, x=~Estrato, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataEstrato$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E6E6FA","#BDB76B", "#556B2F", "#A52A2A")))%>% 
  layout(title = list(text="Estrato en las viviendas del Mercado inmobiliario Cali  Zona Centro", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Estrato", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Parqueaderos Zona Centro

Tabla.

Parqueadero <- data.frame(freq(dataZonaCentro$parquea))

Parqueadero<- rownames_to_column(Parqueadero,"Parqueadero") %>%
  select(Parqueadero, Freq, X..Valid)

colnames(Parqueadero) = c("Parqueadero", "Freq. Absoluta", "Freq. Relativa %")

flextable(Parqueadero)

Parqueadero

Freq. Absoluta

Freq. Relativa %

1

50

78.125

2

10

15.625

4

2

3.125

6

2

3.125

<NA>

60

Total

124

100.000

Gráfico

dataParqueadero <- Parqueadero%>% 
  drop_na() %>%
  filter(Parqueadero!="Total")

dataParqueadero$Parqueadero<-factor(dataParqueadero$Parqueadero, ordered = T,levels = c("1","2","3","4","5","6"))

plot_ly(data = dataParqueadero, x=~Parqueadero, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataParqueadero$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8")))%>% 
  layout(title = list(text="Número de parqueaderos en las viviendas del Mercado inmobiliario Cali  Zona Centro", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Parqueaderos", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Baños Zona Centro

Tabla:

Baños <- data.frame(freq(dataZonaCentro$banios))

Baños<- rownames_to_column(Baños,"Baños") %>%
  drop_na() %>%
  select(Baños, Freq, X..Valid)

colnames(Baños) = c("Baños", "Freq. Absoluta", "Freq. Relativa %")

flextable(Baños)

Baños

Freq. Absoluta

Freq. Relativa %

0

3

2.419355

1

16

12.903226

2

43

34.677419

3

26

20.967742

4

19

15.322581

5

11

8.870968

6

4

3.225806

8

1

0.806452

9

1

0.806452

Total

124

100.000000

Gráfico:

dataBaños <- Baños%>% 
  filter(Baños!="Total")

dataBaños$Baños<-factor(dataBaños$Baños, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataBaños, x=~Baños, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataBaños$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C")))%>% 
  layout(title = list(text="Número de baños en las viviendas del Mercado inmobiliario Cali  Zona Centro", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Baños", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Habitaciones Zona Centro

Tabla:

Habitaciones <- data.frame(freq(dataZonaCentro$habitac))

Habitaciones<- rownames_to_column(Habitaciones,"Habitaciones") %>%
  drop_na() %>%
  select(Habitaciones, Freq, X..Valid)

colnames(Habitaciones) = c("Habitaciones", "Freq. Absoluta", "Freq. Relativa %")

flextable(Habitaciones)

Habitaciones

Freq. Absoluta

Freq. Relativa %

0

3

2.41935

1

3

2.41935

2

12

9.67742

3

28

22.58065

4

19

15.32258

5

20

16.12903

6

11

8.87097

7

9

7.25806

8

8

6.45161

9

7

5.64516

10

4

3.22581

Total

124

100.00000

Gráfico:

dataHabitaciones <- Habitaciones%>%
  filter(Habitaciones!="Total")

dataHabitaciones$Habitaciones<-factor(dataHabitaciones$Habitaciones, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataHabitaciones, x=~Habitaciones, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataHabitaciones$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B", "#A52A2A")))%>% 
  layout(title = list(text="Número de habitaciones en las viviendas del Mercado inmobiliario Cali  Zona Centro", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Habitaciones", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Tipo Zona Centro

Tabla

Tipo <- data.frame(freq(dataZonaCentro$tipo))

Tipo<- rownames_to_column(Tipo,"Tipo") %>%
  drop_na() %>%
  select(Tipo, Freq, X..Valid)

colnames(Tipo) = c("Tipo", "Freq. Absoluta", "Freq. Relativa %")

flextable(Tipo)

Tipo

Freq. Absoluta

Freq. Relativa %

APARTAMENTO

24

19.3548

CASA

100

80.6452

Total

124

100.0000

Gáfico:

dataTipo <- Tipo%>% 
  filter(Tipo!="Total")


plot_ly(data = dataTipo, labels = ~Tipo, values=~`Freq. Absoluta`, type="pie",
        marker = list(colors = c("#BDB76B", "#A52A2A")),
        textposition = 'inside',
        textinfo = 'label+percent',
        showlegend = FALSE)

Barrio Zona Centro

En total aparecen 33 barrios, se organizan de manera descendente y con la función head se presentan los 6 primeros.

Tabla:

Barrio <- data.frame(freq(dataZonaCentro$barrio)) %>% 
  select(Freq, "Freq. Relativa %" = X..Valid) %>% 
  arrange(desc(Freq))
head(Barrio)
##           Freq Freq. Relativa %
## Total      124        100.00000
## JUNIN       17         13.70968
## ARANJUEZ    14         11.29032
## GUAYAQUIL   14         11.29032
## BRETAÑA     13         10.48387
## ALAMEDA     11          8.87097

Latitud y Longitud Zona Centro

dataZonaCentro %>% 
  leaflet() %>%
  addTiles() %>% 
  addMarkers(~longitud, ~latitud) 

preciom Zona Centro

descr(dataZonaCentro$preciom)
## Descriptive Statistics  
## dataZonaCentro$preciom  
## N: 124  
## 
##                     preciom
## ----------------- ---------
##              Mean    309.69
##           Std.Dev    162.15
##               Min    100.00
##                Q1    187.50
##            Median    297.00
##                Q3    362.50
##               Max   1100.00
##               MAD    126.02
##               IQR    172.50
##                CV      0.52
##          Skewness      1.94
##       SE.Skewness      0.22
##          Kurtosis      5.92
##           N.Valid    124.00
##         Pct.Valid    100.00
hist(dataZonaCentro$preciom,  main = "Histograma de Precio Zona Centro", 
     xlab = "Precio", ylab = "Frecuencia", col = "#BDB76B")

areaconst Zona Centro

descr(dataZonaCentro$areaconst)
## Descriptive Statistics  
## dataZonaCentro$areaconst  
## N: 124  
## 
##                     areaconst
## ----------------- -----------
##              Mean      194.04
##           Std.Dev      109.78
##               Min       52.00
##                Q1      122.50
##            Median      160.00
##                Q3      247.50
##               Max      750.00
##               MAD       94.15
##               IQR      122.50
##                CV        0.57
##          Skewness        1.75
##       SE.Skewness        0.22
##          Kurtosis        5.07
##           N.Valid      124.00
##         Pct.Valid      100.00
hist(dataZonaCentro$areaconst,main = "Histograma de Área Zona Centro", 
     xlab = "Área", ylab = "Frecuencia", col="#A52A2A")

Precio vs Tipo Zona Centro

boxplot(dataZonaCentro$preciom ~ dataZonaCentro$tipo,
        main="Distribución del precio por tipo de vivienda Zona Centro",
        ylab="Precio",
        xlab="Tipo",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5")
        )

Zona Oriente

La Zona Oriente cuenta con 351 viviendas que representan el 4.2% de los registros analizados. Filtramos la información para que solo nos muestre la información de la Zona Oriente

dataZonaOriente <- vivienda_faltantes %>% 
  filter(zona == "ZONA ORIENTE")

descr(dataZonaOriente)
## Descriptive Statistics  
## dataZonaOriente  
## N: 351  
## 
##                     areaconst   banios   estrato   habitac        id   latitud   longitud   parquea
## ----------------- ----------- -------- --------- --------- --------- --------- ---------- ---------
##              Mean      192.33     2.75      3.04      4.92   1392.36      3.43     -76.51      1.38
##           Std.Dev      157.32     1.57      0.26      2.32   1597.25      0.02       0.02      0.80
##               Min       40.00     0.00      3.00      0.00     21.00      3.34     -76.56      1.00
##                Q1       90.00     2.00      3.00      3.00    424.00      3.42     -76.52      1.00
##            Median      160.00     2.00      3.00      4.00    976.00      3.44     -76.51      1.00
##                Q3      240.00     4.00      3.00      7.00   1417.00      3.45     -76.50      2.00
##               Max     1745.00    10.00      6.00     10.00   8271.00      3.49     -76.47      6.00
##               MAD      103.78     1.48      0.00      2.97    787.26      0.02       0.01      0.00
##               IQR      150.00     2.00      0.00      4.00    992.00      0.03       0.02      0.50
##                CV        0.82     0.57      0.09      0.47      1.15      0.01       0.00      0.58
##          Skewness        4.47     1.19      7.42      0.35      2.23     -0.56      -0.41      2.77
##       SE.Skewness        0.13     0.13      0.13      0.13      0.13      0.13       0.13      0.19
##          Kurtosis       34.76     2.15     63.20     -0.83      4.79      0.49       0.32      9.26
##           N.Valid      351.00   351.00    351.00    351.00    351.00    351.00     351.00    163.00
##         Pct.Valid      100.00   100.00    100.00    100.00    100.00    100.00     100.00     46.44
## 
## Table: Table continues below
## 
##  
## 
##                       piso   preciom
## ----------------- -------- ---------
##              Mean     2.13    228.53
##           Std.Dev     1.19    122.06
##               Min     1.00     58.00
##                Q1     1.00    145.00
##            Median     2.00    210.00
##                Q3     3.00    290.00
##               Max    10.00   1350.00
##               MAD     1.48    103.78
##               IQR     2.00    145.00
##                CV     0.56      0.53
##          Skewness     1.87      2.87
##       SE.Skewness     0.17      0.13
##          Kurtosis     8.14     20.21
##           N.Valid   208.00    351.00
##         Pct.Valid    59.26    100.00

Haremos lo mismo que se hizo al analizar las variables de manera general:

Piso Zona Oriente

Tabla:

Piso <- data.frame(freq(dataZonaOriente$piso))

Piso<- rownames_to_column(Piso,"Piso") %>%
  select(Piso, Freq, X..Valid)

colnames(Piso) = c("Piso", "Freq. Absoluta", "Freq. Relativa %")

flextable(Piso)

Piso

Freq. Absoluta

Freq. Relativa %

1

74

35.576923

2

63

30.288462

3

54

25.961538

4

8

3.846154

5

8

3.846154

10

1

0.480769

<NA>

143

Total

351

100.000000

Gráfico:

dataPiso <- Piso%>% 
  drop_na() %>%
  filter(Piso!="Total")

dataPiso$Piso<-factor(dataPiso$Piso, ordered = T,levels = c("1","2","3","4","5","11"))

plot_ly(data = dataPiso, x=~Piso, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataPiso$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9")))%>% 
  layout(title = list(text="Número de piso de las viviendas del Mercado inmobiliario Cali- Zona Oriente", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Piso", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Estrato Zona Oriente

Tabla:

Estrato <- data.frame(freq(dataZonaOriente$estrato))

Estrato<- rownames_to_column(Estrato,"Estrato") %>%
  select(Estrato, Freq, X..Valid) %>%
  drop_na() 

colnames(Estrato) = c("Estrato", "Freq. Absoluta", "Freq. Relativa %")

flextable(Estrato)

Estrato

Freq. Absoluta

Freq. Relativa %

3

340

96.866097

4

8

2.279202

5

2

0.569801

6

1

0.284900

Total

351

100.000000

Gráfico

dataEstrato <- Estrato%>% 
  filter(Estrato!="Total")

dataEstrato$Estrato<-factor(dataEstrato$Estrato, ordered = T,levels = c("3","4","5","6"))

plot_ly(data = dataEstrato, x=~Estrato, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataEstrato$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E6E6FA","#BDB76B", "#556B2F", "#A52A2A")))%>% 
  layout(title = list(text="Estrato en las viviendas del Mercado inmobiliario Cali  Zona Oriente", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Estrato", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Parqueaderos Zona Oriente

Tabla.

Parqueadero <- data.frame(freq(dataZonaOriente$parquea))

Parqueadero<- rownames_to_column(Parqueadero,"Parqueadero") %>%
  select(Parqueadero, Freq, X..Valid)

colnames(Parqueadero) = c("Parqueadero", "Freq. Absoluta", "Freq. Relativa %")

flextable(Parqueadero)

Parqueadero

Freq. Absoluta

Freq. Relativa %

1

122

74.846626

2

28

17.177914

3

8

4.907975

4

3

1.840491

5

1

0.613497

6

1

0.613497

<NA>

188

Total

351

100.000000

Gráfico

dataParqueadero <- Parqueadero%>% 
  drop_na() %>%
  filter(Parqueadero!="Total")

dataParqueadero$Parqueadero<-factor(dataParqueadero$Parqueadero, ordered = T,levels = c("1","2","3","4","5","6"))

plot_ly(data = dataParqueadero, x=~Parqueadero, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataParqueadero$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#BDB76B", "#556B2F")))%>% 
  layout(title = list(text="Número de parqueaderos en las viviendas del Mercado inmobiliario Cali  Zona Oriente", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Parqueaderos", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Baños Zona Oriente

Tabla:

Baños <- data.frame(freq(dataZonaOriente$banios))

Baños<- rownames_to_column(Baños,"Baños") %>%
  drop_na() %>%
  select(Baños, Freq, X..Valid)

colnames(Baños) = c("Baños", "Freq. Absoluta", "Freq. Relativa %")

flextable(Baños)

Baños

Freq. Absoluta

Freq. Relativa %

0

5

1.424501

1

68

19.373219

2

108

30.769231

3

78

22.222222

4

52

14.814815

5

19

5.413105

6

13

3.703704

7

2

0.569801

8

4

1.139601

9

1

0.284900

10

1

0.284900

Total

351

100.000000

Gráfico:

dataBaños <- Baños%>% 
  filter(Baños!="Total")

dataBaños$Baños<-factor(dataBaños$Baños, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataBaños, x=~Baños, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataBaños$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C")))%>% 
  layout(title = list(text="Número de baños en las viviendas del Mercado inmobiliario Cali  Zona Oriente", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Baños", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Habitaciones Zona Oriente

Tabla:

Habitaciones <- data.frame(freq(dataZonaOriente$habitac))

Habitaciones<- rownames_to_column(Habitaciones,"Habitaciones") %>%
  drop_na() %>%
  select(Habitaciones, Freq, X..Valid)

colnames(Habitaciones) = c("Habitaciones", "Freq. Absoluta", "Freq. Relativa %")

flextable(Habitaciones)

Habitaciones

Freq. Absoluta

Freq. Relativa %

0

6

1.709402

1

2

0.569801

2

31

8.831909

3

89

25.356125

4

52

14.814815

5

34

9.686610

6

42

11.965812

7

31

8.831909

8

32

9.116809

9

26

7.407407

10

6

1.709402

Total

351

100.000000

Gráfico:

dataHabitaciones <- Habitaciones%>%
  filter(Habitaciones!="Total")

dataHabitaciones$Habitaciones<-factor(dataHabitaciones$Habitaciones, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataHabitaciones, x=~Habitaciones, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataHabitaciones$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B", "#A52A2A")))%>% 
  layout(title = list(text="Número de habitaciones en las viviendas del Mercado inmobiliario Cali  Zona Oriente", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Habitaciones", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Tipo Zona Oriente

Tabla

Tipo <- data.frame(freq(dataZonaOriente$tipo))

Tipo<- rownames_to_column(Tipo,"Tipo") %>%
  drop_na() %>%
  select(Tipo, Freq, X..Valid)

colnames(Tipo) = c("Tipo", "Freq. Absoluta", "Freq. Relativa %")

flextable(Tipo)

Tipo

Freq. Absoluta

Freq. Relativa %

APARTAMENTO

62

17.6638

CASA

289

82.3362

Total

351

100.0000

Gáfico:

dataTipo <- Tipo%>% 
  filter(Tipo!="Total")


plot_ly(data = dataTipo, labels = ~Tipo, values=~`Freq. Absoluta`, type="pie",
        marker = list(colors = c("#BDB76B", "#A52A2A")),
        textposition = 'inside',
        textinfo = 'label+percent',
        showlegend = FALSE)

Barrio Zona Oriente

En total aparecen más de 70 barrios, se organizan de manera descendente y con la función head se presentan los 6 primeros.

Tabla:

Barrio <- data.frame(freq(dataZonaOriente$barrio)) %>% 
  select(Freq, "Freq. Relativa %" = X..Valid) %>% 
  arrange(desc(Freq))
head(Barrio)
##                Freq Freq. Relativa %
## Total           351        100.00000
## ALFONSO LÓPEZ    21          5.98291
## CIUDAD CORDOBA   20          5.69801
## LAS CEIBAS       19          5.41311
## ZONA ORIENTE     17          4.84330
## EL TRONCAL       16          4.55840

Latitud y Longitud Zona Oriente

dataZonaOriente %>% 
  leaflet() %>%
  addTiles() %>% 
  addMarkers(~longitud, ~latitud) 

preciom Zona Oriente

descr(dataZonaOriente$preciom)
## Descriptive Statistics  
## dataZonaOriente$preciom  
## N: 351  
## 
##                     preciom
## ----------------- ---------
##              Mean    228.53
##           Std.Dev    122.06
##               Min     58.00
##                Q1    145.00
##            Median    210.00
##                Q3    290.00
##               Max   1350.00
##               MAD    103.78
##               IQR    145.00
##                CV      0.53
##          Skewness      2.87
##       SE.Skewness      0.13
##          Kurtosis     20.21
##           N.Valid    351.00
##         Pct.Valid    100.00
hist(dataZonaOriente$preciom,  main = "Histograma de Precio Zona Oriente", 
     xlab = "Precio", ylab = "Frecuencia", col = "#BDB76B")

areaconst Zona Oriente

descr(dataZonaOriente$areaconst)
## Descriptive Statistics  
## dataZonaOriente$areaconst  
## N: 351  
## 
##                     areaconst
## ----------------- -----------
##              Mean      192.33
##           Std.Dev      157.32
##               Min       40.00
##                Q1       90.00
##            Median      160.00
##                Q3      240.00
##               Max     1745.00
##               MAD      103.78
##               IQR      150.00
##                CV        0.82
##          Skewness        4.47
##       SE.Skewness        0.13
##          Kurtosis       34.76
##           N.Valid      351.00
##         Pct.Valid      100.00
hist(dataZonaOriente$areaconst,main = "Histograma de Área Zona Oriente", 
     xlab = "Área", ylab = "Frecuencia", col="#A52A2A")

Precio vs Tipo Zona Oriente

boxplot(dataZonaOriente$preciom ~ dataZonaOriente$tipo,
        main="Distribución del precio por tipo de vivienda Zona Oriente",
        ylab="Precio",
        xlab="Tipo",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5")
        )

Zona Oeste

La Zona Oeste cuenta con 1.198 viviendas que representan el 14.4% de los registros analizados. Filtramos la información para que solo nos muestre la información de la Zona Oeste

dataZonaOeste <- vivienda_faltantes %>% 
  filter(zona == "ZONA OESTE")

descr(dataZonaOeste)
## Descriptive Statistics  
## dataZonaOeste  
## N: 1198  
## 
##                     areaconst    banios   estrato   habitac        id   latitud   longitud   parquea
## ----------------- ----------- --------- --------- --------- --------- --------- ---------- ---------
##              Mean      196.40      3.51      5.48      3.29   6786.41      3.44     -76.55      2.15
##           Std.Dev      122.44      1.31      0.81      1.14   1620.04      0.01       0.01      0.87
##               Min       44.00      0.00      3.00      0.00      2.00      3.36     -76.59      1.00
##                Q1      112.00      3.00      5.00      3.00   6314.00      3.44     -76.55      2.00
##            Median      165.50      4.00      6.00      3.00   7274.00      3.45     -76.55      2.00
##                Q3      240.00      4.00      6.00      4.00   7842.00      3.45     -76.54      2.00
##               Max     1200.00      9.00      6.00     10.00   8317.00      3.49     -76.46      7.00
##               MAD       92.66      1.48      0.00      0.00    965.91      0.01       0.01      0.00
##               IQR      127.75      1.00      1.00      1.00   1527.50      0.01       0.01      0.00
##                CV        0.62      0.37      0.15      0.35      0.24      0.00       0.00      0.40
##          Skewness        2.04      0.32     -1.59      1.75     -2.18     -1.61       2.23      1.38
##       SE.Skewness        0.07      0.07      0.07      0.07      0.07      0.07       0.07      0.07
##          Kurtosis        7.25      0.40      1.83      7.60      5.20      5.90       8.71      3.71
##           N.Valid     1198.00   1198.00   1198.00   1198.00   1198.00   1198.00    1198.00   1098.00
##         Pct.Valid      100.00    100.00    100.00    100.00    100.00    100.00     100.00     91.65
## 
## Table: Table continues below
## 
##  
## 
##                       piso   preciom
## ----------------- -------- ---------
##              Mean     4.70    677.58
##           Std.Dev     2.82    391.58
##               Min     1.00     85.00
##                Q1     2.00    393.00
##            Median     4.00    580.00
##                Q3     6.00    900.00
##               Max    12.00   1999.00
##               MAD     2.97    326.17
##               IQR     4.00    506.50
##                CV     0.60      0.58
##          Skewness     0.67      0.99
##       SE.Skewness     0.09      0.07
##          Kurtosis    -0.39      0.47
##           N.Valid   805.00   1198.00
##         Pct.Valid    67.20    100.00

Haremos lo mismo que se hizo al analizar las variables de manera general:

Piso Zona Oeste

Tabla:

Piso <- data.frame(freq(dataZonaOeste$piso))

Piso<- rownames_to_column(Piso,"Piso") %>%
  select(Piso, Freq, X..Valid)

colnames(Piso) = c("Piso", "Freq. Absoluta", "Freq. Relativa %")

flextable(Piso)

Piso

Freq. Absoluta

Freq. Relativa %

1

86

10.68323

2

121

15.03106

3

134

16.64596

4

99

12.29814

5

84

10.43478

6

80

9.93789

7

57

7.08075

8

43

5.34161

9

41

5.09317

10

28

3.47826

11

20

2.48447

12

12

1.49068

<NA>

393

Total

1,198

100.00000

Gráfico:

dataPiso <- Piso%>% 
  drop_na() %>%
  filter(Piso!="Total")

dataPiso$Piso<-factor(dataPiso$Piso, ordered = T,levels = c("1","2","3","4","5","6","7","8","9","10","11","12"))

plot_ly(data = dataPiso, x=~Piso, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataPiso$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B", "#556B2F", "#A52A2A")))%>% 
  layout(title = list(text="Número de piso de las viviendas del Mercado inmobiliario Cali Zona Oeste", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Piso", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Estrato Zona Oeste

Tabla:

Estrato <- data.frame(freq(dataZonaOeste$estrato))

Estrato<- rownames_to_column(Estrato,"Estrato") %>%
  select(Estrato, Freq, X..Valid) %>%
  drop_na() 

colnames(Estrato) = c("Estrato", "Freq. Absoluta", "Freq. Relativa %")

flextable(Estrato)

Estrato

Freq. Absoluta

Freq. Relativa %

3

54

4.50751

4

84

7.01169

5

290

24.20701

6

770

64.27379

Total

1,198

100.00000

Gráfico

dataEstrato <- Estrato%>% 
  filter(Estrato!="Total")

dataEstrato$Estrato<-factor(dataEstrato$Estrato, ordered = T,levels = c("3","4","5","6"))

plot_ly(data = dataEstrato, x=~Estrato, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataEstrato$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E6E6FA","#BDB76B", "#556B2F", "#A52A2A")))%>% 
  layout(title = list(text="Estrato en las viviendas del Mercado inmobiliario Cali  Zona Oeste", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Estrato", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Parqueaderos Zona Oeste

Tabla.

Parqueadero <- data.frame(freq(dataZonaOeste$parquea))

Parqueadero<- rownames_to_column(Parqueadero,"Parqueadero") %>%
  select(Parqueadero, Freq, X..Valid)

colnames(Parqueadero) = c("Parqueadero", "Freq. Absoluta", "Freq. Relativa %")

flextable(Parqueadero)

Parqueadero

Freq. Absoluta

Freq. Relativa %

1

195

17.759563

2

653

59.471767

3

166

15.118397

4

68

6.193078

5

8

0.728597

6

6

0.546448

7

2

0.182149

<NA>

100

Total

1,198

100.000000

Gráfico

dataParqueadero <- Parqueadero%>% 
  drop_na() %>%
  filter(Parqueadero!="Total")

dataParqueadero$Parqueadero<-factor(dataParqueadero$Parqueadero, ordered = T,levels = c("1","2","3","4","5","6"))

plot_ly(data = dataParqueadero, x=~Parqueadero, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataParqueadero$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#BDB76B", "#556B2F", "#8B0000")))%>% 
  layout(title = list(text="Número de parqueaderos en las viviendas del Mercado inmobiliario Cali  Zona Oeste", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Parqueaderos", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Baños Zona Oeste

Tabla:

Baños <- data.frame(freq(dataZonaOeste$banios))

Baños<- rownames_to_column(Baños,"Baños") %>%
  drop_na() %>%
  select(Baños, Freq, X..Valid)

colnames(Baños) = c("Baños", "Freq. Absoluta", "Freq. Relativa %")

flextable(Baños)

Baños

Freq. Absoluta

Freq. Relativa %

0

7

0.584307

1

38

3.171953

2

237

19.782972

3

315

26.293823

4

350

29.215359

5

185

15.442404

6

43

3.589316

7

19

1.585977

8

2

0.166945

9

2

0.166945

Total

1,198

100.000000

Gráfico:

dataBaños <- Baños%>% 
  filter(Baños!="Total")

dataBaños$Baños<-factor(dataBaños$Baños, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataBaños, x=~Baños, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataBaños$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C", "#FA8072", "#B22222")))%>% 
  layout(title = list(text="Número de baños en las viviendas del Mercado inmobiliario Cali  Zona Oeste", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Baños", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Habitaciones Zona Oeste

Tabla:

Habitaciones <- data.frame(freq(dataZonaOeste$habitac))

Habitaciones<- rownames_to_column(Habitaciones,"Habitaciones") %>%
  drop_na() %>%
  select(Habitaciones, Freq, X..Valid)

colnames(Habitaciones) = c("Habitaciones", "Freq. Absoluta", "Freq. Relativa %")

flextable(Habitaciones)

Habitaciones

Freq. Absoluta

Freq. Relativa %

0

8

0.667780

1

16

1.335559

2

173

14.440735

3

622

51.919866

4

272

22.704508

5

64

5.342237

6

22

1.836394

7

6

0.500835

8

5

0.417362

9

6

0.500835

10

4

0.333890

Total

1,198

100.000000

Gráfico:

dataHabitaciones <- Habitaciones%>%
  filter(Habitaciones!="Total")

dataHabitaciones$Habitaciones<-factor(dataHabitaciones$Habitaciones, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataHabitaciones, x=~Habitaciones, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataHabitaciones$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B", "#A52A2A")))%>% 
  layout(title = list(text="Número de habitaciones en las viviendas del Mercado inmobiliario Cali  Zona Oeste", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Habitaciones", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Tipo Zona Oeste

Tabla

Tipo <- data.frame(freq(dataZonaOeste$tipo))

Tipo<- rownames_to_column(Tipo,"Tipo") %>%
  drop_na() %>%
  select(Tipo, Freq, X..Valid)

colnames(Tipo) = c("Tipo", "Freq. Absoluta", "Freq. Relativa %")

flextable(Tipo)

Tipo

Freq. Absoluta

Freq. Relativa %

APARTAMENTO

1,029

85.8932

CASA

169

14.1068

Total

1,198

100.0000

Gáfico:

dataTipo <- Tipo%>% 
  filter(Tipo!="Total")


plot_ly(data = dataTipo, labels = ~Tipo, values=~`Freq. Absoluta`, type="pie",
        marker = list(colors = c("#BDB76B", "#A52A2A")),
        textposition = 'inside',
        textinfo = 'label+percent',
        showlegend = FALSE)

Barrio Zona Oeste

En total aparecen más de 50 barrios, se organizan de manera descendente y con la función head se presentan los 6 primeros.

Tabla:

Barrio <- data.frame(freq(dataZonaOeste$barrio)) %>% 
  select(Freq, "Freq. Relativa %" = X..Valid) %>% 
  arrange(desc(Freq))
head(Barrio)
##                Freq Freq. Relativa %
## Total          1198        100.00000
## SANTA TERESITA  255         21.28548
## LOS CRISTALES   154         12.85476
## NORMANDÍA       153         12.77129
## AGUACATAL       108          9.01503
## CRISTALES        81          6.76127

Latitud y Longitud Zona Oeste

dataZonaOeste %>% 
  leaflet() %>%
  addTiles() %>% 
  addMarkers(~longitud, ~latitud) 

precio Zona Oeste

descr(dataZonaOeste$preciom)
## Descriptive Statistics  
## dataZonaOeste$preciom  
## N: 1198  
## 
##                     preciom
## ----------------- ---------
##              Mean    677.58
##           Std.Dev    391.58
##               Min     85.00
##                Q1    393.00
##            Median    580.00
##                Q3    900.00
##               Max   1999.00
##               MAD    326.17
##               IQR    506.50
##                CV      0.58
##          Skewness      0.99
##       SE.Skewness      0.07
##          Kurtosis      0.47
##           N.Valid   1198.00
##         Pct.Valid    100.00
hist(dataZonaOeste$preciom,  main = "Histograma de Precio Zona Oeste", 
     xlab = "Precio", ylab = "Frecuencia", col = "#BDB76B")

areaconst Zona Oeste

descr(dataZonaOeste$areaconst)
## Descriptive Statistics  
## dataZonaOeste$areaconst  
## N: 1198  
## 
##                     areaconst
## ----------------- -----------
##              Mean      196.40
##           Std.Dev      122.44
##               Min       44.00
##                Q1      112.00
##            Median      165.50
##                Q3      240.00
##               Max     1200.00
##               MAD       92.66
##               IQR      127.75
##                CV        0.62
##          Skewness        2.04
##       SE.Skewness        0.07
##          Kurtosis        7.25
##           N.Valid     1198.00
##         Pct.Valid      100.00
hist(dataZonaOeste$areaconst,main = "Histograma de Área Zona Oeste", 
     xlab = "Área", ylab = "Frecuencia", col="#A52A2A")

Precio vs Tipo Zona Oeste

boxplot(dataZonaOeste$preciom ~ dataZonaOeste$tipo,
        main="Distribución del precio por tipo de vivienda Zona Oeste",
        ylab="Precio",
        xlab="Tipo",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5")
        )

Zona Norte

La Zona Norte cuenta con 1.920 viviendas que representan el 23.1% de los registros analizados. Filtramos la información para que solo nos muestre la información de la Zona Norte

dataZonaNorte <- vivienda_faltantes %>% 
  filter(zona == "ZONA NORTE")

descr(dataZonaNorte)
## Descriptive Statistics  
## dataZonaNorte  
## N: 1920  
## 
##                     areaconst    banios   estrato   habitac        id   latitud   longitud   parquea
## ----------------- ----------- --------- --------- --------- --------- --------- ---------- ---------
##              Mean      161.12      2.78      4.28      3.50   2558.00      3.46     -76.52      1.65
##           Std.Dev      137.71      1.33      0.99      1.46   1933.38      0.03       0.02      1.01
##               Min       30.00      0.00      3.00      0.00     31.00      3.33     -76.59      1.00
##                Q1       70.00      2.00      3.00      3.00    832.50      3.46     -76.53      1.00
##            Median      107.00      2.00      4.00      3.00   2400.50      3.47     -76.52      1.00
##                Q3      215.50      3.00      5.00      4.00   3869.50      3.48     -76.50      2.00
##               Max     1440.00     10.00      6.00     10.00   8319.00      3.50     -76.47     10.00
##               MAD       68.20      1.48      1.48      0.00   2263.93      0.02       0.02      0.00
##               IQR      145.25      1.00      2.00      1.00   3035.00      0.03       0.03      1.00
##                CV        0.85      0.48      0.23      0.42      0.76      0.01       0.00      0.62
##          Skewness        2.57      1.17     -0.03      1.59      0.71     -1.81       0.04      2.74
##       SE.Skewness        0.06      0.06      0.06      0.06      0.06      0.06       0.06      0.07
##          Kurtosis       10.51      2.12     -1.23      4.34     -0.24      2.89      -0.11     11.43
##           N.Valid     1920.00   1920.00   1920.00   1920.00   1920.00   1920.00    1920.00   1287.00
##         Pct.Valid      100.00    100.00    100.00    100.00    100.00    100.00     100.00     67.03
## 
## Table: Table continues below
## 
##  
## 
##                        piso   preciom
## ----------------- --------- ---------
##              Mean      3.98    345.61
##           Std.Dev      2.95    240.87
##               Min      1.00     65.00
##                Q1      2.00    160.00
##            Median      3.00    300.00
##                Q3      5.00    430.00
##               Max     12.00   1940.00
##               MAD      1.48    200.15
##               IQR      3.00    270.00
##                CV      0.74      0.70
##          Skewness      1.27      1.97
##       SE.Skewness      0.07      0.06
##          Kurtosis      0.74      5.75
##           N.Valid   1139.00   1920.00
##         Pct.Valid     59.32    100.00

Haremos lo mismo que se hizo al analizar las variables de manera general:

Piso Zona Norte

Tabla:

Piso <- data.frame(freq(dataZonaNorte$piso))

Piso<- rownames_to_column(Piso,"Piso") %>%
  select(Piso, Freq, X..Valid)

colnames(Piso) = c("Piso", "Freq. Absoluta", "Freq. Relativa %")

flextable(Piso)

Piso

Freq. Absoluta

Freq. Relativa %

1

177

15.53995

2

293

25.72432

3

189

16.59350

4

129

11.32572

5

117

10.27217

6

33

2.89728

7

33

2.89728

8

39

3.42406

9

32

2.80948

10

27

2.37050

11

33

2.89728

12

37

3.24846

<NA>

781

Total

1,920

100.00000

Gráfico:

dataPiso <- Piso%>% 
  drop_na() %>%
  filter(Piso!="Total")

dataPiso$Piso<-factor(dataPiso$Piso, ordered = T,levels = c("1","2","3","4","5","6","7","8","9","10","11","12"))

plot_ly(data = dataPiso, x=~Piso, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataPiso$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B", "#556B2F", "#A52A2A")))%>% 
  layout(title = list(text="Número de piso de las viviendas del Mercado inmobiliario Cali Zona Norte", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Piso", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Estrato Zona Norte

Tabla:

Estrato <- data.frame(freq(dataZonaNorte$estrato))

Estrato<- rownames_to_column(Estrato,"Estrato") %>%
  select(Estrato, Freq, X..Valid) %>%
  drop_na() 

colnames(Estrato) = c("Estrato", "Freq. Absoluta", "Freq. Relativa %")

flextable(Estrato)

Estrato

Freq. Absoluta

Freq. Relativa %

3

572

29.79167

4

407

21.19792

5

769

40.05208

6

172

8.95833

Total

1,920

100.00000

Gráfico

dataEstrato <- Estrato%>% 
  filter(Estrato!="Total")

dataEstrato$Estrato<-factor(dataEstrato$Estrato, ordered = T,levels = c("3","4","5","6"))

plot_ly(data = dataEstrato, x=~Estrato, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataEstrato$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E6E6FA","#BDB76B", "#556B2F", "#A52A2A")))%>% 
  layout(title = list(text="Estrato en las viviendas del Mercado inmobiliario Cali  Zona Norte", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Estrato", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Parqueaderos Zona Norte

Tabla.

Parqueadero <- data.frame(freq(dataZonaNorte$parquea))

Parqueadero<- rownames_to_column(Parqueadero,"Parqueadero") %>%
  select(Parqueadero, Freq, X..Valid)

colnames(Parqueadero) = c("Parqueadero", "Freq. Absoluta", "Freq. Relativa %")

flextable(Parqueadero)

Parqueadero

Freq. Absoluta

Freq. Relativa %

1

727

56.4879565

2

418

32.4786325

3

69

5.3613054

4

46

3.5742036

5

11

0.8547009

6

8

0.6216006

7

5

0.3885004

8

1

0.0777001

9

1

0.0777001

10

1

0.0777001

<NA>

633

Total

1,920

100.0000000

Gráfico

dataParqueadero <- Parqueadero%>% 
  drop_na() %>%
  filter(Parqueadero!="Total")

dataParqueadero$Parqueadero<-factor(dataParqueadero$Parqueadero, ordered = T,levels = c("1","2","3","4","5","6"))

plot_ly(data = dataParqueadero, x=~Parqueadero, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataParqueadero$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#BDB76B", "#556B2F", "#8B0000")))%>% 
  layout(title = list(text="Número de parqueaderos en las viviendas del Mercado inmobiliario Cali  Zona Norte", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Parqueaderos", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Baños Zona Norte

Tabla:

Baños <- data.frame(freq(dataZonaNorte$banios))

Baños<- rownames_to_column(Baños,"Baños") %>%
  drop_na() %>%
  select(Baños, Freq, X..Valid)

colnames(Baños) = c("Baños", "Freq. Absoluta", "Freq. Relativa %")

flextable(Baños)

Baños

Freq. Absoluta

Freq. Relativa %

0

12

0.6250000

1

186

9.6875000

2

811

42.2395833

3

438

22.8125000

4

270

14.0625000

5

130

6.7708333

6

48

2.5000000

7

11

0.5729167

8

11

0.5729167

9

1

0.0520833

10

2

0.1041667

Total

1,920

100.0000000

Gráfico:

dataBaños <- Baños%>% 
  filter(Baños!="Total")

dataBaños$Baños<-factor(dataBaños$Baños, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataBaños, x=~Baños, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataBaños$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C", "#FA8072", "#B22222")))%>% 
  layout(title = list(text="Número de baños en las viviendas del Mercado inmobiliario Cali  Zona Norte", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Baños", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Habitaciones Zona Norte

Tabla:

Habitaciones <- data.frame(freq(dataZonaNorte$habitac))

Habitaciones<- rownames_to_column(Habitaciones,"Habitaciones") %>%
  drop_na() %>%
  select(Habitaciones, Freq, X..Valid)

colnames(Habitaciones) = c("Habitaciones", "Freq. Absoluta", "Freq. Relativa %")

flextable(Habitaciones)

Habitaciones

Freq. Absoluta

Freq. Relativa %

0

29

1.510417

1

17

0.885417

2

220

11.458333

3

1,008

52.500000

4

342

17.812500

5

146

7.604167

6

60

3.125000

7

42

2.187500

8

29

1.510417

9

14

0.729167

10

13

0.677083

Total

1,920

100.000000

Gráfico:

dataHabitaciones <- Habitaciones%>%
  filter(Habitaciones!="Total")

dataHabitaciones$Habitaciones<-factor(dataHabitaciones$Habitaciones, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataHabitaciones, x=~Habitaciones, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataHabitaciones$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B", "#A52A2A")))%>% 
  layout(title = list(text="Número de habitaciones en las viviendas del Mercado inmobiliario Cali  Zona Norte", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Habitaciones", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Tipo Zona Norte

Tabla

Tipo <- data.frame(freq(dataZonaNorte$tipo))

Tipo<- rownames_to_column(Tipo,"Tipo") %>%
  drop_na() %>%
  select(Tipo, Freq, X..Valid)

colnames(Tipo) = c("Tipo", "Freq. Absoluta", "Freq. Relativa %")

flextable(Tipo)

Tipo

Freq. Absoluta

Freq. Relativa %

APARTAMENTO

1,198

62.3958

CASA

722

37.6042

Total

1,920

100.0000

Gáfico:

dataTipo <- Tipo%>% 
  filter(Tipo!="Total")


plot_ly(data = dataTipo, labels = ~Tipo, values=~`Freq. Absoluta`, type="pie",
        marker = list(colors = c("#BDB76B", "#A52A2A")),
        textposition = 'inside',
        textinfo = 'label+percent',
        showlegend = FALSE)

Barrio Zona Norte

En total aparecen más de 100 barrios, se organizan de manera descendente y con la función head se presentan los 6 primeros.

Tabla:

Barrio <- data.frame(freq(dataZonaNorte$barrio)) %>% 
  select(Freq, "Freq. Relativa %" = X..Valid) %>% 
  arrange(desc(Freq))
head(Barrio)
##                       Freq Freq. Relativa %
## Total                 1920        100.00000
## LA FLORA               367         19.11458
## ACOPI                  157          8.17708
## PRADOS DEL NORTE       125          6.51042
## URBANIZACIÓN LA FLORA   83          4.32292
## BRISAS DE LOS           82          4.27083

Latitud y Longitud Zona Norte

Uilizamos el mismo código para generar el mapa. Sin embargo, debido a fallas en el procesamiento dejo la imagen.

dataZonaNorte %>% leaflet() %>% addTiles() %>% addMarkers(~longitud, ~latitud)

Mapa Viviendas Zona Norte
Mapa Viviendas Zona Norte

precio Zona Norte

descr(dataZonaNorte$preciom)
## Descriptive Statistics  
## dataZonaNorte$preciom  
## N: 1920  
## 
##                     preciom
## ----------------- ---------
##              Mean    345.61
##           Std.Dev    240.87
##               Min     65.00
##                Q1    160.00
##            Median    300.00
##                Q3    430.00
##               Max   1940.00
##               MAD    200.15
##               IQR    270.00
##                CV      0.70
##          Skewness      1.97
##       SE.Skewness      0.06
##          Kurtosis      5.75
##           N.Valid   1920.00
##         Pct.Valid    100.00
hist(dataZonaNorte$preciom,  main = "Histograma de Precio Zona Norte", 
     xlab = "Precio", ylab = "Frecuencia", col = "#BDB76B")

areaconst Zona Norte

descr(dataZonaNorte$areaconst)
## Descriptive Statistics  
## dataZonaNorte$areaconst  
## N: 1920  
## 
##                     areaconst
## ----------------- -----------
##              Mean      161.12
##           Std.Dev      137.71
##               Min       30.00
##                Q1       70.00
##            Median      107.00
##                Q3      215.50
##               Max     1440.00
##               MAD       68.20
##               IQR      145.25
##                CV        0.85
##          Skewness        2.57
##       SE.Skewness        0.06
##          Kurtosis       10.51
##           N.Valid     1920.00
##         Pct.Valid      100.00
hist(dataZonaNorte$areaconst,main = "Histograma de Área Zona Norte", 
     xlab = "Área", ylab = "Frecuencia", col="#A52A2A")

Precio vs Tipo Zona Norte

boxplot(dataZonaNorte$preciom ~ dataZonaNorte$tipo,
        main="Distribución del precio por tipo de vivienda Zona Norte",
        ylab="Precio",
        xlab="Tipo",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5")
        )

Zona Sur

La Zona Sur cuenta con 4.726 viviendas que representan el 56.8%% de los registros analizados. Filtramos la información para que solo nos muestre la información de la Zona Sur

dataZonaSur <- vivienda_faltantes %>% 
  filter(zona == "ZONA SUR")

descr(dataZonaSur)
## Descriptive Statistics  
## dataZonaSur  
## N: 4726  
## 
##                     areaconst    banios   estrato   habitac        id   latitud   longitud   parquea
## ----------------- ----------- --------- --------- --------- --------- --------- ---------- ---------
##              Mean      173.31      3.18      4.72      3.60   4360.51      3.39     -76.53      1.83
##           Std.Dev      148.68      1.45      0.90      1.35   2080.10      0.03       0.01      1.21
##               Min       40.00      0.00      3.00      0.00      1.00      3.33     -76.57      1.00
##                Q1       78.00      2.00      4.00      3.00   2574.00      3.37     -76.54      1.00
##            Median      113.00      3.00      5.00      3.00   4378.50      3.38     -76.53      1.00
##                Q3      220.00      4.00      5.00      4.00   6057.00      3.41     -76.52      2.00
##               Max     1600.00     10.00      6.00     10.00   8305.00      3.50     -76.46     10.00
##               MAD       71.16      1.48      1.48      1.48   2554.52      0.03       0.01      0.00
##               IQR      142.00      2.00      1.00      1.00   3482.50      0.04       0.02      1.00
##                CV        0.86      0.46      0.19      0.38      0.48      0.01       0.00      0.66
##          Skewness        2.70      1.00     -0.08      1.69     -0.07      0.57       1.12      2.40
##       SE.Skewness        0.04      0.04      0.04      0.04      0.04      0.04       0.04      0.04
##          Kurtosis       12.15      1.11     -0.86      4.42     -0.99      0.06       3.49      8.18
##           N.Valid     4726.00   4726.00   4726.00   4726.00   4726.00   4726.00    4726.00   4105.00
##         Pct.Valid      100.00    100.00    100.00    100.00    100.00    100.00     100.00     86.86
## 
## Table: Table continues below
## 
##  
## 
##                        piso   preciom
## ----------------- --------- ---------
##              Mean      3.61    426.52
##           Std.Dev      2.43    322.72
##               Min      1.00     75.00
##                Q1      2.00    222.00
##            Median      3.00    320.00
##                Q3      5.00    520.00
##               Max     12.00   1900.00
##               MAD      1.48    192.74
##               IQR      3.00    298.00
##                CV      0.67      0.76
##          Skewness      1.35      2.00
##       SE.Skewness      0.04      0.04
##          Kurtosis      1.42      4.29
##           N.Valid   3463.00   4726.00
##         Pct.Valid     73.28    100.00

Haremos lo mismo que se hizo al analizar las variables de manera general:

Piso Zona Sur

Tabla:

Piso <- data.frame(freq(dataZonaSur$piso))

Piso<- rownames_to_column(Piso,"Piso") %>%
  select(Piso, Freq, X..Valid)

colnames(Piso) = c("Piso", "Freq. Absoluta", "Freq. Relativa %")

flextable(Piso)

Piso

Freq. Absoluta

Freq. Relativa %

1

490

14.149581

2

957

27.634999

3

712

20.560208

4

366

10.568871

5

353

10.193474

6

132

3.811724

7

114

3.291943

8

129

3.725094

9

73

2.107999

10

74

2.136876

11

29

0.837424

12

34

0.981808

<NA>

1,263

Total

4,726

100.000000

Gráfico:

dataPiso <- Piso%>% 
  drop_na() %>%
  filter(Piso!="Total")

dataPiso$Piso<-factor(dataPiso$Piso, ordered = T,levels = c("1","2","3","4","5","6","7","8","9","10","11","12"))

plot_ly(data = dataPiso, x=~Piso, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataPiso$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B", "#556B2F", "#A52A2A")))%>% 
  layout(title = list(text="Número de piso de las viviendas del Mercado inmobiliario Cali Zona Sur", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Piso", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Estrato Zona Sur

Tabla:

Estrato <- data.frame(freq(dataZonaSur$estrato))

Estrato<- rownames_to_column(Estrato,"Estrato") %>%
  select(Estrato, Freq, X..Valid) %>%
  drop_na() 

colnames(Estrato) = c("Estrato", "Freq. Absoluta", "Freq. Relativa %")

flextable(Estrato)

Estrato

Freq. Absoluta

Freq. Relativa %

3

382

8.08295

4

1,616

34.19382

5

1,685

35.65383

6

1,043

22.06940

Total

4,726

100.00000

Gráfico

dataEstrato <- Estrato%>% 
  filter(Estrato!="Total")

dataEstrato$Estrato<-factor(dataEstrato$Estrato, ordered = T,levels = c("3","4","5","6"))

plot_ly(data = dataEstrato, x=~Estrato, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataEstrato$`Freq. Absoluta`, accuracy = 1), marker = list(color = c("#E6E6FA","#BDB76B", "#556B2F", "#A52A2A")))%>% 
  layout(title = list(text="Estrato en las viviendas del Mercado inmobiliario Cali  Zona Sur", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Estrato", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Parqueaderos Zona Sur

Tabla.

Parqueadero <- data.frame(freq(dataZonaSur$parquea))

Parqueadero<- rownames_to_column(Parqueadero,"Parqueadero") %>%
  select(Parqueadero, Freq, X..Valid)

colnames(Parqueadero) = c("Parqueadero", "Freq. Absoluta", "Freq. Relativa %")

flextable(Parqueadero)

Parqueadero

Freq. Absoluta

Freq. Relativa %

1

2,061

50.2070646

2

1,366

33.2764921

3

277

6.7478685

4

265

6.4555420

5

48

1.1693057

6

51

1.2423873

7

11

0.2679659

8

16

0.3897686

9

3

0.0730816

10

7

0.1705238

<NA>

621

Total

4,726

100.0000000

Gráfico

dataParqueadero <- Parqueadero%>% 
  drop_na() %>%
  filter(Parqueadero!="Total")

dataParqueadero$Parqueadero<-factor(dataParqueadero$Parqueadero, ordered = T,levels = c("1","2","3","4","5","6"))

plot_ly(data = dataParqueadero, x=~Parqueadero, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataParqueadero$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#BDB76B", "#556B2F", "#8B0000")))%>% 
  layout(title = list(text="Número de parqueaderos en las viviendas del Mercado inmobiliario Cali  Zona Sur", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Parqueaderos", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Baños Zona Sur

Tabla:

Baños <- data.frame(freq(dataZonaSur$banios))

Baños<- rownames_to_column(Baños,"Baños") %>%
  drop_na() %>%
  select(Baños, Freq, X..Valid)

colnames(Baños) = c("Baños", "Freq. Absoluta", "Freq. Relativa %")

flextable(Baños)

Baños

Freq. Absoluta

Freq. Relativa %

0

18

0.380872

1

188

3.977994

2

1,747

36.965722

3

1,136

24.037241

4

765

16.187050

5

545

11.531951

6

206

4.358866

7

75

1.586966

8

30

0.634786

9

10

0.211595

10

6

0.126957

Total

4,726

100.000000

Gráfico:

dataBaños <- Baños%>% 
  filter(Baños!="Total")

dataBaños$Baños<-factor(dataBaños$Baños, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataBaños, x=~Baños, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataBaños$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C", "#FA8072", "#B22222")))%>% 
  layout(title = list(text="Número de baños en las viviendas del Mercado inmobiliario Cali  Zona Sur", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Baños", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Habitaciones Zona Sur

Tabla:

Habitaciones <- data.frame(freq(dataZonaSur$habitac))

Habitaciones<- rownames_to_column(Habitaciones,"Habitaciones") %>%
  drop_na() %>%
  select(Habitaciones, Freq, X..Valid)

colnames(Habitaciones) = c("Habitaciones", "Freq. Absoluta", "Freq. Relativa %")

flextable(Habitaciones)

Habitaciones

Freq. Absoluta

Freq. Relativa %

0

20

0.423191

1

21

0.444350

2

490

10.368176

3

2,350

49.724926

4

1,044

22.090563

5

415

8.781210

6

183

3.872196

7

85

1.798561

8

64

1.354211

9

30

0.634786

10

24

0.507829

Total

4,726

100.000000

Gráfico:

dataHabitaciones <- Habitaciones%>%
  filter(Habitaciones!="Total")

dataHabitaciones$Habitaciones<-factor(dataHabitaciones$Habitaciones, ordered = T,levels = c("0","1","2","3","4","5","6","7","8","9","10"))

plot_ly(data = dataHabitaciones, x=~Habitaciones, y=~`Freq. Absoluta`,  type = "bar",
        text = comma(dataHabitaciones$`Freq. Absoluta`, accuracy = 1), 
        marker = list(color = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5", "#FFDAB9", "#D2B48C","#EEE8AA", "#F0E68C","#BDB76B", "#A52A2A")))%>% 
  layout(title = list(text="Número de habitaciones en las viviendas del Mercado inmobiliario Cali  Zona Sur", 
                      font=list(family = "Arial, sans-serif",size = 14,color = "#17202A")),
         xaxis = list(title=list(text="Habitaciones", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")),
                      tickfont= list(family = "Arial, sans-serif",size = 10,color = "#17202A")),
         yaxis = list(tickformat = ",", 
                      title=list(text="Número de viviendas", font= list(family = "Arial, sans-serif",size = 16,color = "#17202A")), 
                      tickfont= list(family = "Arial, sans-serif",size = 14,color = "#17202A")
         ),
         paper_bgcolor='rgba(0,0,0,0)',
         plot_bgcolor='rgba(0,0,0,0)') %>% 
  config(displayModeBar=F)

Tipo Zona Sur

Tabla

Tipo <- data.frame(freq(dataZonaSur$tipo))

Tipo<- rownames_to_column(Tipo,"Tipo") %>%
  drop_na() %>%
  select(Tipo, Freq, X..Valid)

colnames(Tipo) = c("Tipo", "Freq. Absoluta", "Freq. Relativa %")

flextable(Tipo)

Tipo

Freq. Absoluta

Freq. Relativa %

APARTAMENTO

2,786

58.9505

CASA

1,940

41.0495

Total

4,726

100.0000

Gáfico:

dataTipo <- Tipo%>% 
  filter(Tipo!="Total")


plot_ly(data = dataTipo, labels = ~Tipo, values=~`Freq. Absoluta`, type="pie",
        marker = list(colors = c("#BDB76B", "#A52A2A")),
        textposition = 'inside',
        textinfo = 'label+percent',
        showlegend = FALSE)

Barrio Zona Sur

En total aparecen más de 150 barrios, se organizan de manera descendente y con la función head se presentan los 6 primeros.

Tabla:

Barrio <- data.frame(freq(dataZonaSur$barrio)) %>% 
  select(Freq, "Freq. Relativa %" = X..Valid) %>% 
  arrange(desc(Freq))
head(Barrio)
##                Freq Freq. Relativa %
## Total          4726        100.00000
## VALLE DEL LILI 1005         21.26534
## CIUDAD JARDÍN   515         10.89716
## PANCE           411          8.69657
## EL CANEY        209          4.42234
## EL INGENIO      203          4.29539

Latitud y Longitud Zona Sur

Uilizamos el mismo código para generar el mapa. Sin embargo, debido a fallas en el procesamiento dejo la imagen. dataZonaSur %>% leaflet() %>% addTiles() %>% addMarkers(~longitud, ~latitud)

Mapa Viviendas Zona Norte
Mapa Viviendas Zona Norte

precio Zona Sur

descr(dataZonaSur$preciom)
## Descriptive Statistics  
## dataZonaSur$preciom  
## N: 4726  
## 
##                     preciom
## ----------------- ---------
##              Mean    426.52
##           Std.Dev    322.72
##               Min     75.00
##                Q1    222.00
##            Median    320.00
##                Q3    520.00
##               Max   1900.00
##               MAD    192.74
##               IQR    298.00
##                CV      0.76
##          Skewness      2.00
##       SE.Skewness      0.04
##          Kurtosis      4.29
##           N.Valid   4726.00
##         Pct.Valid    100.00
hist(dataZonaSur$preciom,  main = "Histograma de Precio Zona Sur", 
     xlab = "Precio", ylab = "Frecuencia", col = "#BDB76B")

areaconst Zona Sur

descr(dataZonaSur$areaconst)
## Descriptive Statistics  
## dataZonaSur$areaconst  
## N: 4726  
## 
##                     areaconst
## ----------------- -----------
##              Mean      173.31
##           Std.Dev      148.68
##               Min       40.00
##                Q1       78.00
##            Median      113.00
##                Q3      220.00
##               Max     1600.00
##               MAD       71.16
##               IQR      142.00
##                CV        0.86
##          Skewness        2.70
##       SE.Skewness        0.04
##          Kurtosis       12.15
##           N.Valid     4726.00
##         Pct.Valid      100.00
hist(dataZonaSur$areaconst,main = "Histograma de Área Zona Sur", 
     xlab = "Área", ylab = "Frecuencia", col="#A52A2A")

Precio vs Tipo Zona Sur

boxplot(dataZonaSur$preciom ~ dataZonaSur$tipo,
        main="Distribución del precio por tipo de vivienda Zona Sur",
        ylab="Precio",
        xlab="Tipo",
        col = c("#E0FFFF","#B0E0E6","#E6E6FA",  "#D8BFD8", "#FFE4B5")
        )

Resultados

Primera Parte

Al analizar la información procesada de 8.319 propiedades podemos identificar diferentes aspectos:

  • El 80% de las propiedades se encuentran ubicadas en las Zonas Norte (23%) y Sur (57%). Las propiedades de las Zonas Centro y Oriente representan un 5,7%.

  • En la variable Piso, el 31% de los datos están vacíos. Al analizar el 69% restante,encontramos que el máximo número de piso es 12 y que más del 50% de los datos tienen entre 1 y 4 pisos.

  • Las propiedades se encuentran en los estratos 3, 4, 5 y 6. No se presentan diferencias significativas entre los estratos pero si podemos decir que la minoría (17%) de las propiedades, se encuentran en el estrato 3, mientras que la mayoría (33%) son propiedades de estrato 5.

  • En la variable parqueadero, el 19% de los datos están vacíos. Al hacer el análisis sobre el 81% de los datos restantes, encontramos que el máximo número de parqueaderos es 10, y que la mayoría de las propiedades (80%) cuenta con entre 1 y 2 parqueaderos.

  • En la variable baño, se identifican 45 propiedades que no tienen baño. El máximo número de baños son 10, además el 76.8% de las propiedades cuenta con 2 a 4 baños.

  • En la variable habitaciones, existen 66 propiedades que no cuentan con habitaciones. El máximo número de habitaciones son 10, y el 80% de las propiedades cuentan con 3 (49.2%) a 4 habitaciones (20.7%).

  • El 61% de las propiedades son apartamentos.

  • En la variable Barrio, se identificaron más de 200 barrios. Como lo que se estaba intentando era tener una vista general, en esta variable no se concentra la información en barrios particulares.

  • Las variables latitud y longitud presentan el mismo inconveniente que la variable barrio.

  • La variable precio tiene una media de 433.9 y una mediana de 330, donde el precio máximo es de 1.999 y el mínimo de 58. Al ver la distribución del precio, identificamos que tiene un Coeficiente de variación del 76% por lo que los datos no son homogéneos y la distribución es asimétrica a la derecha.

  • La variable área tiene una media de 174.93 y una mediana de 123, donde el precio máximo es de 1.745 y el mínimo de 30. Al ver la distribución del área, identificamos que tiene un Coeficiente de variación del 82% por lo que los datos no son homogéneos y la distribución es asimétrica a la derecha.

  • Al analizar las variables precio y zona conjuntamente, vemos que la Zona Norte y Sur, son las que tienen más valores atípicos. La Zona Oeste es la que tiene el rango más grande entre el valor inferior y superior. Las Zonas Centro y Norte tienen una mediana de precio muy parecida, la Zona Oeste es la que tiene la mediana de precio mayor, mientras que la Zona Oriente es la que tiene la mediana de precio más baja.

  • Al analizar las variables área y zona conjuntamente, vemos que la Zona Sur, es la que tiene más valores atípicos. La Zona Centro, Oeste y Norte presentan la mediana de área mayor y es muy parecida entre ellas; mientras que la Zona Norte y Sur tienen la mediana de área más baja.

  • Al analizar las variables precio y estrato, vemos que a medida que incrementa el estrato, incrementa el precio, sin embargo, es importante tener en cuenta que el estrato 4 y 5 presentan bastantes datos atípicos.

  • Al analizar las variables área y estrato, vemos que a medida que incrementa el estrato, incrementa la mediana del área, sin embargo, es importante tener en cuenta que todos los estratos presentan datos atípicos. Es importante resalta que la propiedad con mayor área se encuentra es estrato 3.

  • Al analizar el precio junto con el número de parqueaderos vemos que no necesariamente que tenga más parqueaderos significa que incrementa el precio.

  • Al analizar el precio junto con el tipo de vivienda, vemos que las casas tienen un mayor precio respecto a los apartamentos, la mediana del precio de las casas corresponde al cuartil 3 de los apartamentos.

  • Al analizar la tabla que nos relaciona el precio y el área podemos ver que existe (aunque no en todos los casos),una relación inversa. Sin embargo, existe un dato atípico que tiene la máxima área de las propiedades y el precio está dentro del rango más pequeño.

Segunda Parte: Zonas

Zona Centro

La Zona Centro tiene propiedades que en su mayoría son estrato 3 (84%), la mayoría son casas (80.6%), por lo que tiene sentido que el 80% de las propiedades estén ubicadas los pisos 1 y 2, la mayoría (75%) cuenta con un parqueadero, el 70.8% cuenta con 2 a 4 baños y el 58.07% cuenta con 2 a 5 habitaciones. Aunque los datos de los precios no son homogéneos, podemos ver que la media es de 309, el valor mínimo es de 100 y el máximo de 1.100; en cuanto al área también presenta datos heterogéneos, pero tenemos una media de 194.04 m2, con un mínimo de 52m2 y un máximo de 750 m2. Al ver la relación precio tipo de vivienda, presenta el mismo comportamiento del análisis general.Se evidencia que las casas tienen un mayor precio. Al ver el mapa, la concentración si se ve en el centro, pero también son frecuentes los datos que están en otras zonas.

Zona Oriente

La Zona Oriente tiene propiedades que en su mayoría son estrato 3 (96%), la mayoría son casas (82.3%), las propiedades están ubicadas en los pisos 1, 2 y 3 (90%), el 74% cuenta con un parqueadero, el 87% cuenta con 1 a 4 baños y el 61.6% cuenta con 3 a 6 habitaciones. Aunque los datos de los precios no son homogéneos, podemos ver que la media es de 228.5, el valor mínimo es de 58 y el máximo de 1.350; en cuanto al área también presenta datos heterogéneos, pero tenemos una media de 192.33 m2, con un mínimo de 40m2 y un máximo de 1.745 m2. Al ver la relación precio tipo de vivienda, vemos una gran diferencia entre los precios de los apartamentos y las casas.Se evidencia que las casas tienen un mayor precio. Al ver el mapa, la concentración si se ve en el oriente, pero también son frecuentes los datos que están en otras zonas.

Zona Oeste

La Zona Oeste tiene propiedades que en su mayoría son estrato 5 (24.2%) y 6 (64.2%), la mayoría son apartamentos (85.9%). Las propiedades presentan pisos del 1 al 12, sin embargo, los más frecuentes son los pisos del 2 al 5 (64,1%); las propiedades cuentan con 1 (17.7%) a 2 parqueaderos (59.4%); el 75.2% cuenta con 2 a 5 baños y el 74.6% cuenta con 3 a 4 habitaciones. Aunque los datos de los precios no son homogéneos, podemos ver que la media es de 677.58, el valor mínimo es de 85 y el máximo de 1.999; en cuanto al área también presenta datos heterogéneos, per tenemos una media de 196.40 m2, con un mínimo de 44m2 y un máximo de 1.200 m2. Al ver la relación precio tipo de vivienda, vemos que no existe una diferencia significativa entre los precios de las casas y los apartamentos, sin embargo, si se evidencia que las casas tienen un mayor precio. Al ver el mapa, la concentración si se ve en el oeste, pero también son frecuentes los datos que están en otras zonas.

Zona Norte

La Zona Norte tiene propiedades que en su mayoría son estrato 3 (29.8%), 4 (21.2%) y 5 (40.0%), la mayoría son apartamentos (62.4%). Las propiedades presentan pisos del 1 al 12, sin embargo, los más frecuentes son los pisos del 1 al 5 (80%); las propiedades cuentan con 1 (56.4%) a 2 parqueaderos (32.4%); el 80% cuenta con 2 a 4 baños y el 80% cuenta con 2 a 4 habitaciones. Aunque los datos de los precios no son homogéneos, podemos ver que la media es de 341.61, el valor mínimo es de 65 y el máximo de 1.940; en cuanto al área también presenta datos heterogéneos, per tenemos una media de 161.12 m2, con un mínimo de 30m2 y un máximo de 1.440 m2. Al ver la relación precio tipo de vivienda, vemos que existe una diferencia entre los precios de las casas y los apartamentos, sin embargo, si se evidencia que las casas tienen un mayor precio.

Al ver el mapa, no se presenta concentración, los datos se encuentran por toda la ciudad de Cali.

Zona Sur

La Zona Sur tiene propiedades que en su mayoría son estrato 4 (34.2%), 5 (35.6%) y 6 (22.1%), la mayoría son apartamentos (59%). El 80% de las propiedades se encuentran entre los pisos 1 y 5; las propiedades cuentan con 1 (50.2%) a 2 parqueaderos (33.3%); el 77% cuenta con 2 a 4 baños y el 72% cuenta con 3 a 4 habitaciones. Aunque los datos de los precios no son homogéneos, podemos ver que la media es de 426.52, el valor mínimo es de 75 y el máximo de 1.900; en cuanto al área también presenta datos heterogéneos, pero tenemos una media de 173.31 m2, con un mínimo de 40m2 y un máximo de 1.600 m2. Al ver la relación precio tipo de vivienda, vemos que existe una diferencia entre los precios de las casas y los apartamentos bastante significativa. Se evidencia que las casas tienen un mayor precio.

Al ver el mapa, no se presenta concentración, los datos se encuentran por toda la ciudad de Cali.

Discusión

Existen diferentes aspectos que hacen diferentes a cada una de las zonas analizadas. Es importante que la empresa B&C tenga presente que las propiedades se encuentran mayoritariamente en las Zonas Norte y Sur, puesto que representan el 80%.

Las Zonas Norte y Sur cuentan en su mayoría con Apartamentos

La Zona Norte está comprendida por la comuna 2, 4 y 5. Esta zona se caracteriza por ser una zona comercial e industrial. Se pueden encontrar centros comerciales como el Centro Comercial Chipichape, el Hotel Torre de Cali, existen diferentes centros educativos incluido el Sena y también se encuentran clínicas y puestos de salud. Las propiedades de esta Zona se encuentra entre el estrato 3 y 5 y por las características, puede ser apropiada para una familia mediana.

La Zona Sur está comprendida por la comuna 17 y 22 que se caracteriza por su gran número de urbanizaciones, se encuentran varias Universidades así como terrenos destinados a la construcción de vivienda, es una zona con una alta valorización y lujosos edificios. Las propiedades de esta zona se encuentran entre el estrato 4 y 6 y por sus características, puede ser apropiada para una familia grande.

Si el mercado busca casas, las opciones estarían en las Zonas Centro y Zona Oriente, sin embargo, estas zonas corresponden al 5,7% de la data analizada. Más del 80% de las casas son estrato 3 y por las características, son apropiadas para familias grandes.

En la Zona Oeste encontramos el 14% de las propiedades de la base total, esta zona presenta las propiedades más costosas, con los estratos más altos, la mayoría son apartamentos y pueden ser apropiadas para cualquier familia.

Conclusiones

La data inicial presentaba algunos inconvenientes principalmente en los campos barrio y las coordenadas. Sería interesante saber cómo se están diligenciando estos datos, porque se podría pensar que lo están haciendo de manera manual. Los datos no están estandarizados y por otro lado, algunos campos se diligenciaron mal. Sin embargo,al final la información es muy buena para analizar algunos aspectos.

Si se analiza la data de manera general, vamos a encontrar bastante variabilidad puesto que cada zona se comporta de manera diferente. La vista general nos permitió ver dónde se encuentran la mayoría de las propiedades, el comportamiento del precio y el área; pero no podemos suministrar información relevante si lo analizaramos como un todo. Por lo tanto, se hizo el análisis por zona para encontrar patrones y diferencias. Vemos que cada zona tiene sus particularidades y que depende de lo que busque una persona, se le podrá ofrecer algo personalizado.

Sería interesante poder tener información respecto a aspectos socieconómicos de las personas para complementar la información y apuntar a una venta segura. También sería bueno complementar la información con ventas históricas, identificando los diferentes canales. Sin embargo, con esta información preliminar se puede perfilar a un potencial cliente y tomar decisiones con base a la información.

Anexos

Mapa Zonas Geográficas de Cali
Mapa Zonas Geográficas de Cali