Introducción

En el siguiente informe se realizará el análisis de la oferta inmobiliaria de la ciudad de Cali, mediante un análisis exploratorio y descriptivo, cuyo fin es proporcionar una comprensión de las dinámicas que influyen en el mercado de vivienda en la ciudad. Este estudio se enfoca en variables clave como el tipo de vivienda, zona residencial, precio, estrato y otras que serán exploradas en su desarrollo.

Objetivo

Al examinar estas variables, se busca identificar patrones, tendencias y posibles relaciones que permitan entender mejor la oferta y la demanda de viviendas en Cali, así como las preferencias de los compradores y los factores que influyen en los precios.

Métodos

Se inicia con una exploración a la base de datos, reconociendo sus variables y total de registros. Posteriormente, se realiza la limpieza de sus datos, encontrando registros duplicados, datos faltantes, se realiza estandarización a variables nominales y analisis de imputación de datos. Finalmente, se lleva a cabo un analisis descritivo univariado, mostrando el comportamiento de cada variables y un analisis de frecuencias.

1. Datos iniciales

Se inicia con la instalación y carga de paquetes, que contienen la base de datos “vivienda_faltantes”. Se cuenta con un total de 8,330 registros y 13 variables.

  • id: Identificador único de la vivienda
  • zona: Zona de la ciudad (sur, norte, oriente, occidente)
  • piso: Piso en el que está ubicada la vivienda
  • estrato: Estrato socioeconómico
  • preciom: Precio en millones de pesos
  • areaconst: Área construida en metros cuadrados
  • parqueaderos: Número de parqueaderos
  • banios: Número de baños
  • habitaciones: Número de habitaciones
  • tipo: Tipo de vivienda (casa o apartamento)
  • barrio: Barrio
  • longitud: Coordenada de longitud
  • latitud: Coordenada de latitud
# Cargar los datos
data(vivienda_faltantes)

# Visión general de los datos
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, …

1.1 Limpieza de datos

Se inicia identificando por cada variable el total de datos faltantes

md.pattern(vivienda_faltantes,rotate.names = TRUE)

##      preciom id zona estrato areaconst banios habitac tipo barrio longitud
## 4812       1  1    1       1         1      1       1    1      1        1
## 1912       1  1    1       1         1      1       1    1      1        1
## 877        1  1    1       1         1      1       1    1      1        1
## 726        1  1    1       1         1      1       1    1      1        1
## 1          1  0    0       0         0      0       0    0      0        0
## 2          0  0    0       0         0      0       0    0      0        0
##            2  3    3       3         3      3       3    3      3        3
##      latitud parquea piso     
## 4812       1       1    1    0
## 1912       1       1    0    1
## 877        1       0    1    1
## 726        1       0    0    2
## 1          0       0    0   12
## 2          0       0    0   13
##            3    1606 2641 4279
faltantes_variables
##           Datos Faltantes
## id                      3
## zona                    3
## piso                 2641
## estrato                 3
## preciom                 2
## areaconst               3
## parquea              1606
## banios                  3
## habitac                 3
## tipo                    3
## barrio                  3
## longitud                3
## latitud                 3

Siendo la variable “id” un identificador unico, se verifica que no contenga registros duplicados y proceder a su eliminación

# Contar el total de registros duplicados basados en la variable "id"
total_duplicados_id <- sum(duplicated(vivienda_faltantes$id))

# Eliminar registros duplicados basados en la variable "id"
id_sin_dup <- distinct(vivienda_faltantes, id, .keep_all = TRUE)

print(paste("Total registros duplicados:", total_duplicados_id))
## [1] "Total registros duplicados: 10"
print(paste("Total sin duplicados:",length(id_sin_dup$id)))
## [1] "Total sin duplicados: 8320"
#Eliminar registros faltantes (NA) variable "id"
id_sin_dup_na <- id_sin_dup %>% filter(!is.na(id))
faltantes <- colSums(is.na(id_sin_dup_na)) %>% as.data.frame()
faltantes
##              .
## id           0
## zona         0
## piso      2635
## estrato      0
## preciom      0
## areaconst    0
## parquea   1602
## banios       0
## habitac      0
## tipo         0
## barrio       0
## longitud     0
## latitud      0
print(paste("Total de registros:", nrow(id_sin_dup_na)))
## [1] "Total de registros: 8319"
print(paste("Total de variables:", ncol(id_sin_dup_na)))
## [1] "Total de variables: 13"
bd_sin_dup <- id_sin_dup_na

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.