1. Introducción

El mercado inmobiliario en Cali ha experimentado un notable crecimiento en los últimos años, impulsado por una combinación de factores que incluyen el aumento de la demanda, la evolución de las preferencias del consumidor y el desarrollo continuo de nuevas áreas urbanas. Ante este panorama dinámico y en constante cambio, resulta fundamental disponer de información precisa y actualizada que permita comprender a fondo las tendencias del mercado y ajustar las estrategias empresariales en consecuencia.

La empresa ha compilado una valiosa base de datos que contiene información detallada sobre las propiedades en venta en Cali, abarcando aspectos como los precios, ubicaciones, características y transacciones de viviendas. Este conjunto de datos se presenta como una herramienta invaluable para la empresa, brindando la oportunidad de generar un informe estadístico que respalde la toma de decisiones estratégicas.

El análisis descriptivo de estos datos proporcionará la oportunidad de explorar una amplia gama de variables, desde los precios y las ubicaciones hasta las características específicas de las propiedades. A través del uso de técnicas estadísticas y herramientas de visualización de datos, seremos capaces de identificar patrones emergentes, relaciones significativas y posibles oportunidades de negocio dentro del mercado inmobiliario de Cali.

2. Objetivos

2.1. Objetivo General

El objetivo principal de este proyecto es proporcionar una visión detallada del mercado inmobiliario en la ciudad de Cali, dirigida específicamente a los directivos de B&C (Bines y Casas). Se busca realizar un análisis exhaustivo de los datos recopilados con el fin de identificar tendencias y patrones significativos que puedan orientar las decisiones futuras de la empresa.

2.2. Objetivos Específicos:

  • Realizar un análisis descriptivo completo de la base de datos recopilada sobre el mercado inmobiliario de Cali.

  • Identificar el precio promedio de las viviendas en diferentes zonas de Cali y su evolución temporal.

  • Determinar los tipos de viviendas más ofertadas en Cali y su distribución por áreas geográficas.

  • Analizar las características más relevantes de la oferta de vivienda en Cali, como tamaño, número de habitaciones, entre otros aspectos.

  • Utilizar la información obtenida para proporcionar recomendaciones específicas a la empresa B&C, incluyendo la definición de su nicho de mercado, el desarrollo de estrategias de marketing, el establecimiento de precios de venta competitivos y la mejora de los servicios ofrecidos a los clientes.

3. Métodos

3.1. Base de datos

La base de datos vivienda_faltantes contiene información sobre propiedades inmobiliarias, y cada variable representa diferentes características de estas propiedades. Aquí tienes una descripción de cada una de las variables:

Data con 8322 registros y 13 variables

  • id: Identificador único de la vivienda
  • zona: Zona de la ciudad
  • piso: Piso en la que está ubicada la vivienda
  • estrato: Estrato
  • preciom: Precio en millones de pesos
  • areaconst: Área construida en metros cuadrados
  • parquea: Número de parqueaderos
  • banios: Número de baños
  • habitac: Número de habitaciones
  • tipo: Tipo de vivienda
  • barrio: Barrio
  • longitud: Coordenada de longitud
  • latitud: Coordenada de latitud

3.2. Importación de los datos

library(paqueteMETODOS)
data(vivienda_faltantes)
library(mice)
library(naniar)
attach(vivienda_faltantes)
library(dplyr)
library(ggmap)
library(fdth)
library(formattable)
library(kableExtra)
library(summarytools)
library(ggplot2)

datos<- vivienda_faltantes
datos

3.3 Selección de variables

str(datos)
## spc_tbl_ [8,330 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ id       : num [1:8330] 8312 8311 8307 8296 8297 ...
##  $ zona     : chr [1:8330] "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
##  $ piso     : num [1:8330] 4 1 NA 2 NA NA 2 NA NA 2 ...
##  $ estrato  : num [1:8330] 6 6 5 3 5 5 6 5 5 5 ...
##  $ preciom  : num [1:8330] 1300 480 1200 220 330 1350 305 480 275 285 ...
##  $ areaconst: num [1:8330] 318 300 800 150 112 390 125 280 74 120 ...
##  $ parquea  : num [1:8330] 2 1 4 1 2 8 2 4 1 2 ...
##  $ banios   : num [1:8330] 4 4 7 2 4 10 3 4 2 4 ...
##  $ habitac  : num [1:8330] 2 4 5 4 3 10 3 4 3 3 ...
##  $ tipo     : chr [1:8330] "Apartamento" "Casa" "Casa" "Casa" ...
##  $ barrio   : chr [1:8330] "arboleda" "normandía" "miraflores" "el guabal" ...
##  $ longitud : num [1:8330] -76576 -76571 -76568 -76565 -76565 ...
##  $ latitud  : num [1:8330] 3454 3454 3455 3417 3408 ...
##  - attr(*, "spec")=List of 3
##   ..$ cols   :List of 13
##   .. ..$ id       : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ zona     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ piso     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ estrato  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ preciom  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ areaconst: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ parquea  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ banios   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ habitac  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ tipo     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ barrio   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ longitud : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ latitud  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
##   ..$ delim  : chr ","
##   ..- attr(*, "class")= chr "col_spec"
##  - attr(*, "problems")=<externalptr>

Para el análisis que se llevará a cabo, se eligen las siguientes variables:

  • zona: Zona de la ciudad
  • piso: Piso en la que está ubicada la vivienda
  • estrato: Estrato
  • preciom: Precio en millones de pesos
  • areaconst: Área construida en metros cuadrados
  • parquea: Número de parqueaderos
  • banios: Número de baños
  • habitac: Número de habitaciones
  • tipo: Tipo de vivienda

Se define el nuevo dataset

datos<- vivienda_faltantes[, -c(1, 11, 12, 13)]

El estrato es una categoría socioeconómica, por tal razón, para este análisis se tratará como una variable tipo factor.

datos$estrato <- factor(datos$estrato)

3.4. Sistematización en los datos

Observando los valores que puede tomar la variable tipo se tiene

table(datos$tipo)
## 
## Apartamento APARTAMENTO        apto        casa        Casa        CASA 
##        5032          61          13          14        3195          12

Por lo tanto, identificamos un problema de sistematización que abordamos mediante:

datos$tipo <- toupper(datos$tipo)
datos$tipo <- gsub("APTO", "APARTAMENTO", datos$tipo)

table(datos$tipo)
## 
## APARTAMENTO        CASA 
##        5106        3221

3.5. Datos faltantes

Se hace la verificación respectiva de la existencia de los datos faltantes

faltantes <- colSums(is.na(datos)) %>%
                 as.data.frame() 

faltantes
gg_miss_var(datos)

Se evidencia una notable cantidad de datos faltantes en las variables piso y parquea. Por consiguiente, se llevará a cabo un análisis de algunos supuestos para efectuar la imputación de estos datos ausentes.

3.5.1. Variable parquea

A continuación se realiza un análisis para los datos faltantes de la variable parquea

casas <- datos[datos$tipo == "CASA", ]
casas
faltantes_c <- colSums(is.na(casas)) %>%
                 as.data.frame() 
faltantes_c

el resultado obtenido desvirtúa el anterior supuesto

parquederos_faltantes <- datos[is.na(datos$parquea), ]
parquederos_faltantes
table(parquederos_faltantes$zona)
## 
##  Zona Centro   Zona Norte   Zona Oeste Zona Oriente     Zona Sur 
##           60          633          101          188          621
table(parquederos_faltantes$estrato)
## 
##   3   4   5   6 
## 769 489 228 117
distra <- fdt(parquederos_faltantes$preciom,breaks="Sturges", na.rm = TRUE) 
distra
##         Class limits   f   rf rf(%)   cf cf(%)
##     [61.38,207.8492) 882 0.55 54.92  882 54.92
##  [207.8492,354.3183) 337 0.21 20.98 1219 75.90
##  [354.3183,500.7875) 178 0.11 11.08 1397 86.99
##  [500.7875,647.2567)  69 0.04  4.30 1466 91.28
##  [647.2567,793.7258)  55 0.03  3.42 1521 94.71
##   [793.7258,940.195)  33 0.02  2.05 1554 96.76
##   [940.195,1086.664)  12 0.01  0.75 1566 97.51
##  [1086.664,1233.133)  13 0.01  0.81 1579 98.32
##  [1233.133,1379.603)   8 0.00  0.50 1587 98.82
##  [1379.603,1526.072)   9 0.01  0.56 1596 99.38
##  [1526.072,1672.541)   4 0.00  0.25 1600 99.63
##   [1672.541,1819.01)   4 0.00  0.25 1604 99.88
distra1 <- fdt(parquederos_faltantes$areaconst,breaks="Sturges", na.rm = TRUE) 
distra1
##       Class limits    f   rf rf(%)   cf cf(%)
##     [34.65,146.65) 1063 0.66 66.19 1063 66.19
##    [146.65,258.65)  283 0.18 17.62 1346 83.81
##    [258.65,370.65)  154 0.10  9.59 1500 93.40
##    [370.65,482.65)   57 0.04  3.55 1557 96.95
##    [482.65,594.65)   24 0.01  1.49 1581 98.44
##    [594.65,706.65)    8 0.00  0.50 1589 98.94
##    [706.65,818.65)    7 0.00  0.44 1596 99.38
##    [818.65,930.65)    2 0.00  0.12 1598 99.50
##   [930.65,1042.65)    3 0.00  0.19 1601 99.69
##  [1042.65,1154.65)    0 0.00  0.00 1601 99.69
##  [1154.65,1266.65)    1 0.00  0.06 1602 99.75
##  [1266.65,1378.65)    1 0.00  0.06 1603 99.81
frecuencias1 <- table(datos$parquea, datos$tipo)
print(frecuencias1)
##     
##      APARTAMENTO CASA
##   1         2299  857
##   2         1586  892
##   3          253  268
##   4           90  296
##   5            4   64
##   6            2   66
##   7            1   17
##   8            0   17
##   9            0    4
##   10           2    6

Basándonos en las tablas anteriores, se aprecia que los datos faltantes de la variable parquea se concentran principalmente en las viviendas de menor tamaño y menor valor. Esta tendencia sugiere que es posible que estas viviendas no cuenten con parqueaderos. Por consiguiente, se procederá a la imputación de datos, sustituyendo los valores faltantes por cero.

3.5.2. Variable piso

A continuación se realiza un análisis para los datos faltantes de la variable piso

pisos_faltantes <- datos[is.na(datos$piso), ]
pisos_faltantes
table(pisos_faltantes$estrato)
## 
##   3   4   5   6 
## 575 614 792 657
table(pisos_faltantes$zona)
## 
##  Zona Centro   Zona Norte   Zona Oeste Zona Oriente     Zona Sur 
##           55          782          395          143         1263
table(pisos_faltantes$tipo)
## 
## APARTAMENTO        CASA 
##        1383        1255
distra2 <- fdt(pisos_faltantes$preciom,breaks="Sturges", na.rm = TRUE) 
distra2
##      Class limits   f   rf rf(%)   cf cf(%)
##     [64.35,210.9) 600 0.23 22.72  600 22.72
##    [210.9,357.45) 769 0.29 29.12 1369 51.84
##      [357.45,504) 487 0.18 18.44 1856 70.28
##      [504,650.55) 261 0.10  9.88 2117 80.16
##    [650.55,797.1) 149 0.06  5.64 2266 85.80
##    [797.1,943.65) 119 0.05  4.51 2385 90.31
##   [943.65,1090.2)  65 0.02  2.46 2450 92.77
##  [1090.2,1236.75)  60 0.02  2.27 2510 95.04
##  [1236.75,1383.3)  45 0.02  1.70 2555 96.74
##  [1383.3,1529.85)  39 0.01  1.48 2594 98.22
##  [1529.85,1676.4)  14 0.01  0.53 2608 98.75
##  [1676.4,1822.95)  17 0.01  0.64 2625 99.39
##  [1822.95,1969.5)  14 0.01  0.53 2639 99.92
distra3 <- fdt(pisos_faltantes$areaconst,breaks="Sturges", na.rm = TRUE) 
distra3
##         Class limits    f   rf rf(%)   cf cf(%)
##      [29.7,162.9885) 1506 0.57 57.02 1506 57.02
##  [162.9885,296.2769)  629 0.24 23.82 2135 80.84
##  [296.2769,429.5654)  332 0.13 12.57 2467 93.41
##  [429.5654,562.8538)  104 0.04  3.94 2571 97.35
##  [562.8538,696.1423)   27 0.01  1.02 2598 98.37
##  [696.1423,829.4308)   19 0.01  0.72 2617 99.09
##  [829.4308,962.7192)   10 0.00  0.38 2627 99.47
##  [962.7192,1096.008)    4 0.00  0.15 2631 99.62
##  [1096.008,1229.296)    2 0.00  0.08 2633 99.70
##  [1229.296,1362.585)    1 0.00  0.04 2634 99.73
##  [1362.585,1495.873)    1 0.00  0.04 2635 99.77
##  [1495.873,1629.162)    2 0.00  0.08 2637 99.85
##   [1629.162,1762.45)    1 0.00  0.04 2638 99.89
frecuencias <- table(datos$piso, datos$tipo)
print(frecuencias)
##     
##      APARTAMENTO CASA
##   1          431  430
##   2          512  938
##   3          573  524
##   4          545   62
##   5          564    4
##   6          243    2
##   7          203    4
##   8          211    0
##   9          146    0
##   10         128    2
##   11          84    0
##   12          83    0

Después de revisar las tablas anteriores, no se aprecia ninguna tendencia clara en los datos. Por lo tanto, se optará por realizar la imputación utilizando la moda. Este enfoque resulta especialmente útil cuando se trata de datos categóricos o discretos, ya que la moda no se ve afectada por valores atípicos. Al imputar datos con la moda, se conserva la distribución original de los datos de manera más fiel en comparación con otras técnicas de imputación.

frecuencias <- table(datos$piso, datos$tipo)
print(frecuencias)
##     
##      APARTAMENTO CASA
##   1          431  430
##   2          512  938
##   3          573  524
##   4          545   62
##   5          564    4
##   6          243    2
##   7          203    4
##   8          211    0
##   9          146    0
##   10         128    2
##   11          84    0
##   12          83    0

3.6. Imputación de datos

Se procede a reemplazar los valores faltantes en la variable “parquea” por cero, y se crea un nuevo conjunto de datos denominado “datosNA”.

datosNA <- datos
datosNA$parquea[is.na(datosNA$parquea)] <- 0

Para la variable “piso”, se sustituyen los valores NA por la moda de dicha variable.

moda_piso <- names(sort(-table(datos$piso), na.rm = TRUE))[1]

print(moda_piso)
## [1] "2"
datosNA$piso[is.na(datosNA$piso)] <- moda_piso

Dado que los datos faltantes en las demás variables no exceden tres para una observación, se procede a eliminar dichas observaciones.

datosSINA <- na.omit(datosNA)
table(datosSINA$piso)
## 
##    1   10   11   12    2    3    4    5    6    7    8    9 
##  861  130   84   83 4088 1097  607  568  245  207  211  146
faltantesN <- colSums(is.na(datosSINA)) %>%
                 as.data.frame() 
faltantesN
table(is.na(datosSINA))
## 
## FALSE 
## 74943

## 3.7. Datos atípicos.
Se hace la revisión de los datos atípicos para las variables preciom y areaconst

### 3.7.1. Variable precio 

```r
boxplot(datosSINA$preciom)

Q1 <- quantile(datosSINA$preciom, 0.25)
Q1
## 25% 
## 220
Q3 <- quantile(datosSINA$preciom, 0.75)
Q3
## 75% 
## 540
IQR <- Q3 - Q1
IQR
## 75% 
## 320
limite_inferior <- Q1 - 1.5 * IQR
limite_inferior
##  25% 
## -260
limite_superior <- Q3 + 1.5 * IQR
limite_superior
##  75% 
## 1020
valores_atipicos <- datosSINA$preciom < limite_inferior | datosSINA$preciom > limite_superior

datos_sin_atipicos <- datosSINA[!valores_atipicos, ]

print(datos_sin_atipicos)
## # A tibble: 7,772 × 9
##    zona       piso  estrato preciom areaconst parquea banios habitac tipo       
##    <chr>      <chr> <fct>     <dbl>     <dbl>   <dbl>  <dbl>   <dbl> <chr>      
##  1 Zona Oeste 1     6           480       300       1      4       4 CASA       
##  2 Zona Sur   2     3           220       150       1      2       4 CASA       
##  3 Zona Oeste 2     5           330       112       2      4       3 CASA       
##  4 Zona Sur   2     6           305       125       2      3       3 APARTAMENTO
##  5 Zona Oeste 2     5           480       280       4      4       4 APARTAMENTO
##  6 Zona Sur   2     5           275        74       1      2       3 APARTAMENTO
##  7 Zona Sur   2     5           285       120       2      4       3 APARTAMENTO
##  8 Zona Sur   1     5           310       166       2      4       3 APARTAMENTO
##  9 Zona Oeste 2     3           175       155       0      4       6 CASA       
## 10 Zona Oeste 6     6           640       157       2      3       3 APARTAMENTO
## # ℹ 7,762 more rows
percentiles <- quantile(datosSINA$preciom, probs = seq(0, 1, by = 0.01))

percentil_1020 <- sum(datosSINA$preciom <= 1020) / length(datosSINA$preciom)

print(percentil_1020)
## [1] 0.9333493

3.7.2. Variable área

boxplot(datosSINA$areaconst)

Q1 <- quantile(datosSINA$areaconst, 0.25)
Q1
## 25% 
##  80
Q3 <- quantile(datosSINA$areaconst, 0.75)
Q3
## 75% 
## 229
IQR <- Q3 - Q1
IQR
## 75% 
## 149
limite_inferior <- Q1 - 1.5 * IQR
limite_inferior
##    25% 
## -143.5
limite_superior <- Q3 + 1.5 * IQR
limite_superior
##   75% 
## 452.5
valores_atipicos1 <- datosSINA$areaconst < limite_inferior | datosSINA$areaconst > limite_superior

datos_sin_atipicos1 <- datosSINA[!valores_atipicos, ]

print(datos_sin_atipicos)
## # A tibble: 7,772 × 9
##    zona       piso  estrato preciom areaconst parquea banios habitac tipo       
##    <chr>      <chr> <fct>     <dbl>     <dbl>   <dbl>  <dbl>   <dbl> <chr>      
##  1 Zona Oeste 1     6           480       300       1      4       4 CASA       
##  2 Zona Sur   2     3           220       150       1      2       4 CASA       
##  3 Zona Oeste 2     5           330       112       2      4       3 CASA       
##  4 Zona Sur   2     6           305       125       2      3       3 APARTAMENTO
##  5 Zona Oeste 2     5           480       280       4      4       4 APARTAMENTO
##  6 Zona Sur   2     5           275        74       1      2       3 APARTAMENTO
##  7 Zona Sur   2     5           285       120       2      4       3 APARTAMENTO
##  8 Zona Sur   1     5           310       166       2      4       3 APARTAMENTO
##  9 Zona Oeste 2     3           175       155       0      4       6 CASA       
## 10 Zona Oeste 6     6           640       157       2      3       3 APARTAMENTO
## # ℹ 7,762 more rows
percentiles <- quantile(datosSINA$areaconst, probs = seq(0, 1, by = 0.01))

percentil_452.5 <- sum(datosSINA$areaconst <= 452.5) / length(datosSINA$areaconst)

print(percentil_452.5)
## [1] 0.954005

3.7 Nuevas variables

Valor por metro cuadrado: precimtc

datosSINA <- mutate(datosSINA, precimtc=preciom/areaconst)

3.8 Análisis de los datos

En esta sección, se realiza el análisis descriptivo del conjunto de datos proporcionado por la empresa.

datosSINA$piso <- as.numeric(datosSINA$piso)
str(datosSINA)
## spc_tbl_ [8,327 × 10] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ zona     : chr [1:8327] "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
##  $ piso     : num [1:8327] 4 1 2 2 2 2 2 2 2 2 ...
##  $ estrato  : Factor w/ 4 levels "3","4","5","6": 4 4 3 1 3 3 4 3 3 3 ...
##  $ preciom  : num [1:8327] 1300 480 1200 220 330 1350 305 480 275 285 ...
##  $ areaconst: num [1:8327] 318 300 800 150 112 390 125 280 74 120 ...
##  $ parquea  : num [1:8327] 2 1 4 1 2 8 2 4 1 2 ...
##  $ banios   : num [1:8327] 4 4 7 2 4 10 3 4 2 4 ...
##  $ habitac  : num [1:8327] 2 4 5 4 3 10 3 4 3 3 ...
##  $ tipo     : chr [1:8327] "APARTAMENTO" "CASA" "CASA" "CASA" ...
##  $ precimtc : num [1:8327] 4.09 1.6 1.5 1.47 2.95 ...
##  - attr(*, "spec")=List of 3
##   ..$ cols   :List of 13
##   .. ..$ id       : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ zona     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ piso     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ estrato  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ preciom  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ areaconst: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ parquea  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ banios   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ habitac  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ tipo     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ barrio   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ longitud : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ latitud  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
##   ..$ delim  : chr ","
##   ..- attr(*, "class")= chr "col_spec"
##  - attr(*, "problems")=<externalptr> 
##  - attr(*, "na.action")= 'omit' Named int [1:3] 8320 8321 8322
##   ..- attr(*, "names")= chr [1:3] "8320" "8321" "8322"
summary(datosSINA)
##      zona                piso        estrato     preciom         areaconst   
##  Length:8327        Min.   : 1.000   3:1453   Min.   :  58.0   Min.   :  30  
##  Class :character   1st Qu.: 2.000   4:2131   1st Qu.: 220.0   1st Qu.:  80  
##  Mode  :character   Median : 2.000   5:2751   Median : 330.0   Median : 123  
##                     Mean   : 3.211   6:1992   Mean   : 434.3   Mean   : 175  
##                     3rd Qu.: 4.000            3rd Qu.: 540.0   3rd Qu.: 229  
##                     Max.   :12.000            Max.   :1999.0   Max.   :1745  
##     parquea           banios          habitac           tipo          
##  Min.   : 0.000   Min.   : 0.000   Min.   : 0.000   Length:8327       
##  1st Qu.: 1.000   1st Qu.: 2.000   1st Qu.: 3.000   Class :character  
##  Median : 1.000   Median : 3.000   Median : 3.000   Mode  :character  
##  Mean   : 1.483   Mean   : 3.112   Mean   : 3.605                     
##  3rd Qu.: 2.000   3rd Qu.: 4.000   3rd Qu.: 4.000                     
##  Max.   :10.000   Max.   :10.000   Max.   :10.000                     
##     precimtc     
##  Min.   :0.1461  
##  1st Qu.:1.9167  
##  Median :2.6431  
##  Mean   :2.7230  
##  3rd Qu.:3.3810  
##  Max.   :9.4681

3.8.1. Tablas de frecuencia

A continuación se presentan las tablas de frecuencias para las variables seleccionadas.

3.8.1.1. Datos no agrupados

freq(datosSINA$estrato)
## Frequencies  
## datosSINA$estrato  
## Type: Factor  
## 
##               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
##           3   1453     17.45          17.45     17.45          17.45
##           4   2131     25.59          43.04     25.59          43.04
##           5   2751     33.04          76.08     33.04          76.08
##           6   1992     23.92         100.00     23.92         100.00
##        <NA>      0                               0.00         100.00
##       Total   8327    100.00         100.00    100.00         100.00
freq(datosSINA$zona)
## Frequencies  
## datosSINA$zona  
## Type: Character  
## 
##                      Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ------------------ ------ --------- -------------- --------- --------------
##        Zona Centro    124      1.49           1.49      1.49           1.49
##         Zona Norte   1922     23.08          24.57     23.08          24.57
##         Zona Oeste   1204     14.46          39.03     14.46          39.03
##       Zona Oriente    351      4.22          43.24      4.22          43.24
##           Zona Sur   4726     56.76         100.00     56.76         100.00
##               <NA>      0                               0.00         100.00
##              Total   8327    100.00         100.00    100.00         100.00
freq(datosSINA$piso)
## Frequencies  
## datosSINA$piso  
## Type: Numeric  
## 
##               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
##           1    861     10.34          10.34     10.34          10.34
##           2   4088     49.09          59.43     49.09          59.43
##           3   1097     13.17          72.61     13.17          72.61
##           4    607      7.29          79.90      7.29          79.90
##           5    568      6.82          86.72      6.82          86.72
##           6    245      2.94          89.66      2.94          89.66
##           7    207      2.49          92.15      2.49          92.15
##           8    211      2.53          94.68      2.53          94.68
##           9    146      1.75          96.43      1.75          96.43
##          10    130      1.56          97.99      1.56          97.99
##          11     84      1.01          99.00      1.01          99.00
##          12     83      1.00         100.00      1.00         100.00
##        <NA>      0                               0.00         100.00
##       Total   8327    100.00         100.00    100.00         100.00
freq(datosSINA$parquea)
## Frequencies  
## datosSINA$parquea  
## Type: Numeric  
## 
##               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
##           0   1603    19.251         19.251    19.251         19.251
##           1   3156    37.901         57.151    37.901         57.151
##           2   2478    29.759         86.910    29.759         86.910
##           3    521     6.257         93.167     6.257         93.167
##           4    386     4.636         97.802     4.636         97.802
##           5     68     0.817         98.619     0.817         98.619
##           6     68     0.817         99.436     0.817         99.436
##           7     18     0.216         99.652     0.216         99.652
##           8     17     0.204         99.856     0.204         99.856
##           9      4     0.048         99.904     0.048         99.904
##          10      8     0.096        100.000     0.096        100.000
##        <NA>      0                              0.000        100.000
##       Total   8327   100.000        100.000   100.000        100.000
freq(datosSINA$banios)
## Frequencies  
## datosSINA$banios  
## Type: Numeric  
## 
##               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
##           0     45      0.54           0.54      0.54           0.54
##           1    497      5.97           6.51      5.97           6.51
##           2   2946     35.38          41.89     35.38          41.89
##           3   1994     23.95          65.83     23.95          65.83
##           4   1460     17.53          83.37     17.53          83.37
##           5    891     10.70          94.07     10.70          94.07
##           6    315      3.78          97.85      3.78          97.85
##           7    107      1.28          99.14      1.28          99.14
##           8     48      0.58          99.71      0.58          99.71
##           9     15      0.18          99.89      0.18          99.89
##          10      9      0.11         100.00      0.11         100.00
##        <NA>      0                               0.00         100.00
##       Total   8327    100.00         100.00    100.00         100.00
freq(datosSINA$habitac)
## Frequencies  
## datosSINA$habitac  
## Type: Numeric  
## 
##               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
##           0     66      0.79           0.79      0.79           0.79
##           1     59      0.71           1.50      0.71           1.50
##           2    927     11.13          12.63     11.13          12.63
##           3   4101     49.25          61.88     49.25          61.88
##           4   1731     20.79          82.67     20.79          82.67
##           5    680      8.17          90.84      8.17          90.84
##           6    318      3.82          94.66      3.82          94.66
##           7    173      2.08          96.73      2.08          96.73
##           8    138      1.66          98.39      1.66          98.39
##           9     83      1.00          99.39      1.00          99.39
##          10     51      0.61         100.00      0.61         100.00
##        <NA>      0                               0.00         100.00
##       Total   8327    100.00         100.00    100.00         100.00
freq(datosSINA$tipo)
## Frequencies  
## datosSINA$tipo  
## Type: Character  
## 
##                     Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------------- ------ --------- -------------- --------- --------------
##       APARTAMENTO   5106     61.32          61.32     61.32          61.32
##              CASA   3221     38.68         100.00     38.68         100.00
##              <NA>      0                               0.00         100.00
##             Total   8327    100.00         100.00    100.00         100.00

3.8.1.2. Datos agrupados

frec_precio<- fdt(datosSINA$preciom,breaks="Sturges", na.rm = TRUE) 
frec_precio
##         Class limits    f   rf rf(%)   cf  cf(%)
##     [57.42,188.1913) 1657 0.20 19.90 1657  19.90
##  [188.1913,318.9627) 2245 0.27 26.96 3902  46.86
##   [318.9627,449.734) 1654 0.20 19.86 5556  66.72
##   [449.734,580.5053)  939 0.11 11.28 6495  78.00
##  [580.5053,711.2767)  603 0.07  7.24 7098  85.24
##   [711.2767,842.048)  288 0.03  3.46 7386  88.70
##   [842.048,972.8193)  306 0.04  3.67 7692  92.37
##  [972.8193,1103.591)  150 0.02  1.80 7842  94.18
##  [1103.591,1234.362)  129 0.02  1.55 7971  95.72
##  [1234.362,1365.133)  120 0.01  1.44 8091  97.17
##  [1365.133,1495.905)   71 0.01  0.85 8162  98.02
##  [1495.905,1626.676)   75 0.01  0.90 8237  98.92
##  [1626.676,1757.447)   37 0.00  0.44 8274  99.36
##  [1757.447,1888.219)   37 0.00  0.44 8311  99.81
##   [1888.219,2018.99)   16 0.00  0.19 8327 100.00
frec_area<- fdt(datosSINA$areaconst,breaks="Sturges", na.rm = TRUE) 
frec_area
##         Class limits    f   rf rf(%)   cf  cf(%)
##      [29.7,145.2167) 4805 0.58 57.70 4805  57.70
##  [145.2167,260.7333) 1904 0.23 22.87 6709  80.57
##    [260.7333,376.25)  916 0.11 11.00 7625  91.57
##    [376.25,491.7667)  408 0.05  4.90 8033  96.47
##  [491.7667,607.2833)  166 0.02  1.99 8199  98.46
##     [607.2833,722.8)   46 0.01  0.55 8245  99.02
##     [722.8,838.3167)   38 0.00  0.46 8283  99.47
##  [838.3167,953.8333)   17 0.00  0.20 8300  99.68
##   [953.8333,1069.35)   13 0.00  0.16 8313  99.83
##   [1069.35,1184.867)    3 0.00  0.04 8316  99.87
##  [1184.867,1300.383)    4 0.00  0.05 8320  99.92
##    [1300.383,1415.9)    1 0.00  0.01 8321  99.93
##    [1415.9,1531.417)    3 0.00  0.04 8324  99.96
##  [1531.417,1646.933)    2 0.00  0.02 8326  99.99
##   [1646.933,1762.45)    1 0.00  0.01 8327 100.00
frec_preciomet<- fdt(datosSINA$precimtc,breaks="Sturges", na.rm = TRUE) 
frec_preciomet
##     Class limits    f   rf rf(%)   cf  cf(%)
##  [0.1447,0.7725)   49 0.01  0.59   49   0.59
##     [0.7725,1.4)  792 0.10  9.51  841  10.10
##      [1.4,2.028) 1557 0.19 18.70 2398  28.80
##    [2.028,2.656) 1800 0.22 21.62 4198  50.41
##    [2.656,3.284) 1809 0.22 21.72 6007  72.14
##    [3.284,3.912) 1207 0.14 14.50 7214  86.63
##     [3.912,4.54)  636 0.08  7.64 7850  94.27
##     [4.54,5.168)  301 0.04  3.61 8151  97.89
##    [5.168,5.796)   76 0.01  0.91 8227  98.80
##    [5.796,6.423)   74 0.01  0.89 8301  99.69
##    [6.423,7.051)   13 0.00  0.16 8314  99.84
##    [7.051,7.679)    8 0.00  0.10 8322  99.94
##    [7.679,8.307)    4 0.00  0.05 8326  99.99
##    [8.307,8.935)    0 0.00  0.00 8326  99.99
##    [8.935,9.563)    1 0.00  0.01 8327 100.00

3.8.2. Tablas cruzadas

Se realiza la tabla cruzada entre tipo de inmueble y la zona

conteo <- table(datosSINA$tipo, datosSINA$zona)
barplot(conteo, main="Tipo de inmueble por zona",  
xlab="Zona",
col=c("#0d3b66","#f4d35e"),
legend = rownames(conteo),
las=1, ylim = c(0,7200))

Se realiza la tabla cruzada entre la zona y el precio

tabla_cruzada_zona <- table(datosSINA$zona, cut(datosSINA$preciom, breaks = 15))
tabla_cruzada_zona
##               
##                (56.1,187] (187,317] (317,446] (446,576] (576,705] (705,834]
##   Zona Centro          31        42        34        10         4         1
##   Zona Norte          569       463       447       184       115        51
##   Zona Oeste           70        84       250       193       181        77
##   Zona Oriente        144       137        58         8         2         1
##   Zona Sur            840      1516       867       490       352       156
##               
##                (834,964] (964,1.09e+03] (1.09e+03,1.22e+03] (1.22e+03,1.35e+03]
##   Zona Centro          0              1                   1                   0
##   Zona Norte          47             10                  14                   8
##   Zona Oeste          86             49                  79                  50
##   Zona Oriente         0              0                   0                   1
##   Zona Sur           180             45                  80                  62
##               
##                (1.35e+03,1.48e+03] (1.48e+03,1.61e+03] (1.61e+03,1.74e+03]
##   Zona Centro                    0                   0                   0
##   Zona Norte                     4                   7                   1
##   Zona Oeste                    32                  23                   5
##   Zona Oriente                   0                   0                   0
##   Zona Sur                      36                  45                  27
##               
##                (1.74e+03,1.87e+03] (1.87e+03,2e+03]
##   Zona Centro                    0                0
##   Zona Norte                     1                1
##   Zona Oeste                    19                6
##   Zona Oriente                   0                0
##   Zona Sur                      21                9

Se realiza la tabla cruzada entre el número de habitaciones y el precio

tabla_cruzada_habitaciones <- table(datosSINA$habitac, cut(datosSINA$preciom, breaks = 15))
tabla_cruzada_habitaciones
##     
##      (56.1,187] (187,317] (317,446] (446,576] (576,705] (705,834] (834,964]
##   0           6         8        28         6         6         4         4
##   1          14        24        14         3         1         1         0
##   2         420       315       111        45        21         5         3
##   3        1069      1322       769       286       237        96       112
##   4         103       338       390       281       189        93       118
##   5          18        74       154       129       108        39        48
##   6          13        61        80        49        37        22        14
##   7           6        32        48        29        25        10         6
##   8           4        38        38        28        12         8         2
##   9           1        24        16        17         8         5         6
##   10          0         6         8        12        10         3         0
##     
##      (964,1.09e+03] (1.09e+03,1.22e+03] (1.22e+03,1.35e+03] (1.35e+03,1.48e+03]
##   0               0                   3                   0                   0
##   1               0                   1                   0                   0
##   2               2                   2                   1                   0
##   3              45                  55                  37                  26
##   4              36                  63                  44                  18
##   5              11                  29                  22                  20
##   6               2                  14                  11                   4
##   7               3                   4                   2                   1
##   8               1                   1                   0                   0
##   9               2                   1                   1                   2
##   10              3                   1                   3                   1
##     
##      (1.48e+03,1.61e+03] (1.61e+03,1.74e+03] (1.74e+03,1.87e+03]
##   0                    0                   1                   0
##   1                    1                   0                   0
##   2                    0                   1                   1
##   3                   27                   9                   8
##   4                   20                  13                  17
##   5                   10                   5                  11
##   6                    7                   1                   2
##   7                    4                   2                   1
##   8                    4                   0                   1
##   9                    0                   0                   0
##   10                   2                   1                   0
##     
##      (1.87e+03,2e+03]
##   0                 0
##   1                 0
##   2                 0
##   3                 3
##   4                 8
##   5                 2
##   6                 1
##   7                 0
##   8                 1
##   9                 0
##   10                1
barplot(tabla_cruzada_habitaciones, beside = TRUE, legend = TRUE, col = rainbow(nrow(tabla_cruzada_habitaciones)))


Se realiza la tabla cruzada entre el número de parqueaderos y el precio 

```r
tabla_cruzada_parqueadero <- table(datosSINA$parquea, cut(datosSINA$preciom, breaks = 15))
tabla_cruzada_parqueadero
##     
##      (56.1,187] (187,317] (317,446] (446,576] (576,705] (705,834] (834,964]
##   0         834       315       177       113        59        32        27
##   1         797      1558       579       142        46        14        10
##   2          22       356       805       521       406       142       102
##   3           1         9        67        64        86        44        73
##   4           0         3        20        30        41        44        82
##   5           0         0         3         7         9         3         7
##   6           0         0         2         6         5         5         6
##   7           0         0         1         1         2         1         3
##   8           0         0         0         1         0         0         2
##   9           0         0         1         0         0         1         0
##   10          0         1         1         0         0         0         1
##     
##      (964,1.09e+03] (1.09e+03,1.22e+03] (1.22e+03,1.35e+03] (1.35e+03,1.48e+03]
##   0               8                  13                   8                   5
##   1               0                   1                   4                   2
##   2              30                  36                  21                  19
##   3              29                  53                  37                  20
##   4              29                  48                  35                  12
##   5               4                   9                   6                   8
##   6               3                   9                   7                   3
##   7               1                   1                   2                   2
##   8               1                   2                   1                   1
##   9               0                   0                   0                   0
##   10              0                   2                   0                   0
##     
##      (1.48e+03,1.61e+03] (1.61e+03,1.74e+03] (1.74e+03,1.87e+03]
##   0                    7                   3                   2
##   1                    2                   0                   1
##   2                   10                   3                   4
##   3                   21                   8                   7
##   4                   14                   9                  13
##   5                    5                   2                   3
##   6                    8                   6                   5
##   7                    2                   0                   2
##   8                    4                   1                   2
##   9                    1                   1                   0
##   10                   1                   0                   2
##     
##      (1.87e+03,2e+03]
##   0                 0
##   1                 0
##   2                 1
##   3                 2
##   4                 6
##   5                 2
##   6                 3
##   7                 0
##   8                 2
##   9                 0
##   10                0

Se realiza la tabla cruzada entre la zona y el precio por metro cuadrado

tabla_cruzada_zona1 <- table(datosSINA$zona, cut(datosSINA$precimtc, breaks = 15))
tabla_cruzada_zona1
##               
##                (0.137,0.768] (0.768,1.39] (1.39,2.01] (2.01,2.63] (2.63,3.25]
##   Zona Centro              0           42          54          20           2
##   Zona Norte               7          218         550         441         275
##   Zona Oeste               0           30          91         140         184
##   Zona Oriente            28          167         106          32          13
##   Zona Sur                11          304         751        1143        1332
##               
##                (3.25,3.87] (3.87,4.5] (4.5,5.12] (5.12,5.74] (5.74,6.36]
##   Zona Centro            2          2          2           0           0
##   Zona Norte           251        125         41           9           3
##   Zona Oeste           241        262        133          52          52
##   Zona Oriente           1          2          1           0           0
##   Zona Sur             717        283        133          29          15
##               
##                (6.36,6.98] (6.98,7.6] (7.6,8.23] (8.23,8.85] (8.85,9.48]
##   Zona Centro            0          0          0           0           0
##   Zona Norte             0          1          0           0           1
##   Zona Oeste            10          5          3           1           0
##   Zona Oriente           1          0          0           0           0
##   Zona Sur               5          2          1           0           0
barplot(tabla_cruzada_zona, beside = TRUE, legend = TRUE, col = rainbow(nrow(tabla_cruzada_zona)))

barplot(tabla_cruzada_zona1, beside = TRUE, legend = TRUE, col = rainbow(nrow(tabla_cruzada_zona1)))

Se realiza la tabla cruzada entre la zona y el área construida

tabla_cruzada_zonaa <- table(datosSINA$zona, cut(datosSINA$areaconst, breaks = 15))
tabla_cruzada_zonaa
##               
##                (28.3,144] (144,259] (259,373] (373,487] (487,602] (602,716]
##   Zona Centro          46        51        20         5         1         0
##   Zona Norte         1224       340       219        80        31         6
##   Zona Oeste          509       431       170        56        22        10
##   Zona Oriente        156       124        41        19         8         0
##   Zona Sur           2824       968       486       258       108        30
##               
##                (716,830] (830,945] (945,1.06e+03] (1.06e+03,1.17e+03]
##   Zona Centro          1         0              0                   0
##   Zona Norte          12         6              2                   0
##   Zona Oeste           4         1              0                   0
##   Zona Oriente         0         1              0                   0
##   Zona Sur            19        12             12                   3
##               
##                (1.17e+03,1.29e+03] (1.29e+03,1.4e+03] (1.4e+03,1.52e+03]
##   Zona Centro                    0                  0                  0
##   Zona Norte                     1                  0                  1
##   Zona Oeste                     1                  0                  0
##   Zona Oriente                   0                  1                  0
##   Zona Sur                       2                  0                  2
##               
##                (1.52e+03,1.63e+03] (1.63e+03,1.75e+03]
##   Zona Centro                    0                   0
##   Zona Norte                     0                   0
##   Zona Oeste                     0                   0
##   Zona Oriente                   0                   1
##   Zona Sur                       2                   0
barplot(tabla_cruzada_zonaa, beside = TRUE, legend = TRUE, col = rainbow(nrow(tabla_cruzada_zonaa)))

cor(datosSINA$areaconst,datosSINA$preciom)
## [1] 0.6872452
norte_precio <- datosSINA[datosSINA$zona == "Zona Norte", ]
frec_precionorte<- fdt(norte_precio$preciom,breaks="Sturges", na.rm = TRUE) 
frec_precionorte
##       Class limits   f   rf rf(%)   cf  cf(%)
##    [64.35,222.271) 683 0.36 35.54  683  35.54
##  [222.271,380.192) 606 0.32 31.53 1289  67.07
##  [380.192,538.113) 339 0.18 17.64 1628  84.70
##  [538.113,696.033) 146 0.08  7.60 1774  92.30
##  [696.033,853.954)  71 0.04  3.69 1845  95.99
##  [853.954,1011.88)  37 0.02  1.93 1882  97.92
##   [1011.88,1169.8)  11 0.01  0.57 1893  98.49
##   [1169.8,1327.72)  14 0.01  0.73 1907  99.22
##  [1327.72,1485.64)   5 0.00  0.26 1912  99.48
##  [1485.64,1643.56)   7 0.00  0.36 1919  99.84
##  [1643.56,1801.48)   2 0.00  0.10 1921  99.95
##   [1801.48,1959.4)   1 0.00  0.05 1922 100.00
summary(norte_precio)
##      zona                piso        estrato    preciom         areaconst     
##  Length:1922        Min.   : 1.000   3:572   Min.   :  65.0   Min.   :  30.0  
##  Class :character   1st Qu.: 2.000   4:408   1st Qu.: 160.0   1st Qu.:  70.0  
##  Mode  :character   Median : 2.000   5:770   Median : 300.0   Median : 107.0  
##                     Mean   : 3.178   6:172   Mean   : 345.8   Mean   : 161.2  
##                     3rd Qu.: 3.750           3rd Qu.: 430.0   3rd Qu.: 216.0  
##                     Max.   :12.000           Max.   :1940.0   Max.   :1440.0  
##     parquea           banios         habitac           tipo          
##  Min.   : 0.000   Min.   : 0.00   Min.   : 0.000   Length:1922       
##  1st Qu.: 0.000   1st Qu.: 2.00   1st Qu.: 3.000   Class :character  
##  Median : 1.000   Median : 2.00   Median : 3.000   Mode  :character  
##  Mean   : 1.104   Mean   : 2.78   Mean   : 3.502                     
##  3rd Qu.: 2.000   3rd Qu.: 3.00   3rd Qu.: 4.000                     
##  Max.   :10.000   Max.   :10.00   Max.   :10.000                     
##     precimtc     
##  Min.   :0.2569  
##  1st Qu.:1.6928  
##  Median :2.2265  
##  Mean   :2.4477  
##  3rd Qu.:3.1246  
##  Max.   :9.4681
sur_precio <- datosSINA[datosSINA$zona == "Zona Sur", ]
frec_preciosur<- fdt(sur_precio$preciom,breaks="Sturges", na.rm = TRUE) 
frec_preciosur
##   Class limits    f   rf rf(%)   cf  cf(%)
##    [74.25,206)  995 0.21 21.05  995  21.05
##    [206,337.8) 1546 0.33 32.71 2541  53.77
##  [337.8,469.6)  812 0.17 17.18 3353  70.95
##  [469.6,601.3)  472 0.10  9.99 3825  80.94
##  [601.3,733.1)  261 0.06  5.52 4086  86.46
##  [733.1,864.9)  203 0.04  4.30 4289  90.75
##  [864.9,996.6)  138 0.03  2.92 4427  93.67
##   [996.6,1128)   41 0.01  0.87 4468  94.54
##    [1128,1260)   78 0.02  1.65 4546  96.19
##    [1260,1392)   46 0.01  0.97 4592  97.16
##    [1392,1524)   53 0.01  1.12 4645  98.29
##    [1524,1655)   30 0.01  0.63 4675  98.92
##    [1655,1787)   23 0.00  0.49 4698  99.41
##    [1787,1919)   28 0.01  0.59 4726 100.00
centro_precio <- datosSINA[datosSINA$zona == "Zona Centro", ]
frec_preciocentro<- fdt(norte_precio$preciom,breaks="Sturges", na.rm = TRUE) 
frec_preciocentro
##       Class limits   f   rf rf(%)   cf  cf(%)
##    [64.35,222.271) 683 0.36 35.54  683  35.54
##  [222.271,380.192) 606 0.32 31.53 1289  67.07
##  [380.192,538.113) 339 0.18 17.64 1628  84.70
##  [538.113,696.033) 146 0.08  7.60 1774  92.30
##  [696.033,853.954)  71 0.04  3.69 1845  95.99
##  [853.954,1011.88)  37 0.02  1.93 1882  97.92
##   [1011.88,1169.8)  11 0.01  0.57 1893  98.49
##   [1169.8,1327.72)  14 0.01  0.73 1907  99.22
##  [1327.72,1485.64)   5 0.00  0.26 1912  99.48
##  [1485.64,1643.56)   7 0.00  0.36 1919  99.84
##  [1643.56,1801.48)   2 0.00  0.10 1921  99.95
##   [1801.48,1959.4)   1 0.00  0.05 1922 100.00

3.8.3. Gráficas

frecuencia_zona <- table(datosSINA$zona)
porcentajes <- prop.table(frecuencia_zona) * 100
pie(frecuencia_zona, labels = paste(names(frecuencia_zona), "(", round(porcentajes, 1), "%)"), col = rainbow(length(frecuencia_zona)))

title("Diagrama Zonas")

frecuencia_estrato <- table(datosSINA$estrato)
porcentajes <- prop.table(frecuencia_estrato) * 100
pie(frecuencia_estrato, labels = paste(names(frecuencia_estrato), "(", round(porcentajes, 1), "%)"), col = rainbow(length(frecuencia_estrato)))

title("Diagrama Estrato")

frecuencia_tipo <- table(datosSINA$tipo)
porcentajes <- prop.table(frecuencia_tipo) * 100
pie(frecuencia_tipo, labels = paste(names(frecuencia_tipo), "(", round(porcentajes, 1), "%)"), col = rainbow(length(frecuencia_tipo)))
title("Tipo de vivienda")

barplot(table(datosSINA$piso), col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Piso en el que se ubica la vivienda")

barplot(table(datosSINA$habitac), col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Número de habitaciones")

barplot(table(datosSINA$banios), col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Número de baños")

barplot(table(datosSINA$parquea), col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Número de parqueadero")

hist(datosSINA$preciom, col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Valor del inmueble en millones")

hist(datosSINA$precimtc, col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Valor por metro cuadrado en millones")

plot(density(datosSINA$areaconst), main = "Gráfico de Densidad de la variable área construida", xlab = "Valores", ylab = "Densidad")

plot(datosSINA$areaconst, datosSINA$preciom, xlab = "Tamaño", ylab = "Precio", main = "Gráfico de dispersión: Tamaño vs Precio")

3.8.4.. Medidas de tendencia central y cuartiles

summary(datosSINA[, -c(1,3,9)])
##       piso           preciom         areaconst       parquea      
##  Min.   : 1.000   Min.   :  58.0   Min.   :  30   Min.   : 0.000  
##  1st Qu.: 2.000   1st Qu.: 220.0   1st Qu.:  80   1st Qu.: 1.000  
##  Median : 2.000   Median : 330.0   Median : 123   Median : 1.000  
##  Mean   : 3.211   Mean   : 434.3   Mean   : 175   Mean   : 1.483  
##  3rd Qu.: 4.000   3rd Qu.: 540.0   3rd Qu.: 229   3rd Qu.: 2.000  
##  Max.   :12.000   Max.   :1999.0   Max.   :1745   Max.   :10.000  
##      banios          habitac          precimtc     
##  Min.   : 0.000   Min.   : 0.000   Min.   :0.1461  
##  1st Qu.: 2.000   1st Qu.: 3.000   1st Qu.:1.9167  
##  Median : 3.000   Median : 3.000   Median :2.6431  
##  Mean   : 3.112   Mean   : 3.605   Mean   :2.7230  
##  3rd Qu.: 4.000   3rd Qu.: 4.000   3rd Qu.:3.3810  
##  Max.   :10.000   Max.   :10.000   Max.   :9.4681

4. Resultados

A continuación, se presentan los resultados obtenidos del análisis del conjunto de datos, detallando las variables utilizadas y los estadísticos calculados:

Variables del Conjunto de Datos:

  • Zona: Zona de la ciudad
  • Piso: Piso en el que está ubicada la vivienda
  • Estrato: Estrato
  • PrecioM: Precio en millones de pesos
  • AreaConst: Área construida en metros cuadrados
  • Parquea: Número de parqueaderos
  • Banios: Número de baños
  • Habitac: Número de habitaciones
  • Tipo: Tipo de vivienda
  • PrecioMtc: Precio por metro cuadrado

Depuración y Limpieza de Datos: Se llevó a cabo una exhaustiva depuración y limpieza del conjunto de datos, identificando dos variables categóricas, una de tipo factor, y siete variables numéricas.

Resultados para Variables Numéricas:

Precio: El valor medio de las viviendas en Cali es de $434.300.000. La mitad de las viviendas tienen un precio inferior o igual a $330.000.000, mientras que solo el 25% de ellas tienen un precio por debajo de los $220.000.000. El rango de precios oscila entre $58.000.000 y $1.999.000.000. Área construida: La media del área construida para las viviendas en Cali es de 175 metros cuadrados. La mitad de las viviendas tienen un área entre 30 y 123 metros cuadrados. Solo el 25% tienen una superficie igual o superior a 229 metros cuadrados, con un máximo registrado de 1745 metros cuadrados. Habitaciones y Baños: En promedio, las viviendas cuentan con entre 3 y 4 habitaciones y tres baños. Solo el 25% tienen 4 o más baños y habitaciones. Precio por metro cuadrado: El precio promedio por metro cuadrado en Cali es de alrededor de $2.723.000, llegando en ocasiones a alcanzar un máximo de $9.468.100. Solo el 25% de las viviendas tienen un precio por metro cuadrado menor o igual a $1.916.700. Parqueaderos: Se observa un promedio de un parqueadero por vivienda. Solo el 25% de ellas cuenta con 2 o más parqueaderos. Resultados para Variables Cualitativas:

Tipo de vivienda: Predomina la oferta de apartamentos sobre las casas, con un 61.3% de apartamentos en comparación con un 38.7% de casas. Estrato: Los estratos presentes en el conjunto de datos son 3, 4, 5 y 6, siendo el estrato 5 el más común con un 33% de las viviendas, seguido por el estrato 6 (23.9%), el estrato 4 (25.6%) y el estrato 3 (17.4%). Zona: La mayoría de las viviendas se ubican en la Zona Sur (56.8%), seguida por la Zona Norte (23.1%) y la Zona Oeste (14.5%). La Zona Oriental y la Zona Centro, en conjunto, representan el 5.7% restante. Por otro lado, al graficar la relación entre el área construida y el precio de la vivienda, se evidencia una clara tendencia: a medida que el área construida aumenta, también lo hace el precio, concentrándose la mayoría de los puntos en un rango de tamaño entre 0 y 300 metros cuadrados, con un precio que oscila entre $58 y $500 millones aproximadamente.

Al analizar la relación entre el número de habitaciones y el precio, se observa que la mayoría de las viviendas con precios entre $56 millones y $187 millones tienen 3 habitaciones, tendencia que se mantiene en rangos de precios más altos, fluctuando luego entre 3 y 4 habitaciones.

En cuanto al precio por metro cuadrado, se destaca que en la zona sur es donde se concentra el mayor número de viviendas con valores entre 0.78 millones y 5.12 millones.

5. Discusión.

Basándonos en los resultados proporcionados, identificamos un posible nicho para una empresa inmobiliaria en Cali: la oferta de apartamentos en la Zona Sur, especialmente aquellos que se encuentran en el rango de precios más accesibles y con un área construida moderada. Esto se justifica por las siguientes razones:

Demanda de Apartamentos: Los datos muestran que la oferta de apartamentos supera a la de casas, con un 61.3% de apartamentos en comparación con un 38.7% de casas. Esto sugiere una demanda significativa de apartamentos en el mercado inmobiliario de Cali.

Zona Sur: La mayoría de las viviendas se encuentran en la Zona Sur, abarcando el 56.8% del total. Esta zona puede representar una oportunidad estratégica para enfocar los esfuerzos de comercialización y captar un segmento importante del mercado.

Rango de Precios y Área Construida: Al graficar la relación entre el área construida y el precio de la vivienda, se observa que la mayoría de los puntos se concentran en un rango de tamaño entre 0 y 300 metros cuadrados, con un precio que oscila entre $58 y $500 millones aproximadamente. Este rango de precios y área construida puede ser atractivo para un segmento de compradores interesados en adquirir apartamentos de tamaño moderado y precio accesible.

Con base en este nicho identificado, se propone la siguiente estrategia de marketing:

Estrategia de Marketing:

Segmentación del Mercado: Segmentar el mercado objetivo según criterios demográficos y socioeconómicos para identificar compradores potenciales interesados en apartamentos en la Zona Sur de Cali, con un rango de precios y área construida específicos.

Personalización de Mensajes: Desarrollar mensajes de marketing personalizados que resalten las características clave de los apartamentos en la Zona Sur, como su ubicación conveniente, comodidades, y precios competitivos.

Canales de Comunicación: Utilizar una combinación de canales de comunicación efectivos, como publicidad en línea dirigida, redes sociales, anuncios en portales inmobiliarios locales, y marketing directo a través de correo electrónico o correo físico.

Eventos y Ferias Inmobiliarias: Participar en eventos y ferias inmobiliarias locales en la Zona Sur para aumentar la visibilidad de la empresa y sus propiedades, y establecer relaciones con posibles compradores.

Colaboraciones Estratégicas: Establecer colaboraciones con agentes inmobiliarios locales y otros actores del mercado para ampliar la red de contactos y aumentar las oportunidades de venta.

En resumen, enfocar los esfuerzos de marketing en la oferta de apartamentos en la Zona Sur de Cali, con precios y áreas construidas específicas, puede ser una estrategia efectiva para captar la atención de compradores potenciales y satisfacer sus necesidades de vivienda.

6. Conclusiones.

En conclusión, el análisis realizado revela una diversidad significativa en el mercado inmobiliario de Cali, caracterizado por una amplia gama de precios, tamaños de viviendas y ubicaciones. Esta variabilidad indica una demanda heterogénea que abarca desde viviendas más asequibles hasta propiedades de lujo, lo que brinda oportunidades para satisfacer las necesidades de diversos segmentos de la población.

Además, se identificaron tendencias claras, como la relación entre el área construida y el precio, que ofrecen valiosa información sobre las preferencias de los compradores. Por ejemplo, la tendencia a que el precio aumente con el tamaño de la vivienda sugiere una demanda de propiedades más grandes.

La predominancia de apartamentos sobre casas y la concentración de viviendas en ciertas zonas, como la Zona Sur, proporcionan información sobre áreas de enfoque para la diferenciación y el desarrollo de estrategias de marketing específicas.

En cuanto a la estrategia de marketing, se recomienda la segmentación del mercado en función del tipo de vivienda, estrato y ubicación, para dirigir los esfuerzos de manera más efectiva hacia los segmentos más relevantes. La personalización de los mensajes y ofertas basados en las preferencias de los compradores, así como la selección adecuada de canales de marketing, como la publicidad en línea dirigida o el marketing directo en áreas específicas, son estrategias clave para llegar a la audiencia objetivo.

Finalmente, se destaca la importancia del branding y la diferenciación, resaltando la experiencia en el mercado local y la capacidad para satisfacer las necesidades únicas de los compradores en Cali, lo que permitirá a la empresa construir una marca sólida y destacarse frente a la competencia.

En resumen, una empresa inmobiliaria puede aprovechar las oportunidades en el mercado de Cali al utilizar datos y tendencias para informar sus estrategias de marketing, segmentar el mercado de manera efectiva y diferenciarse a través de mensajes personalizados y un branding sólido.

7. Anaxos.

frecuencia_zona <- table(datosSINA$zona)
porcentajes <- prop.table(frecuencia_zona) * 100
pie(frecuencia_zona, labels = paste(names(frecuencia_zona), "(", round(porcentajes, 1), "%)"), col = rainbow(length(frecuencia_zona)))

title("Diagrama Zonas")

frecuencia_estrato <- table(datosSINA$estrato)
porcentajes <- prop.table(frecuencia_estrato) * 100
pie(frecuencia_estrato, labels = paste(names(frecuencia_estrato), "(", round(porcentajes, 1), "%)"), col = rainbow(length(frecuencia_estrato)))

title("Diagrama Estrato")

frecuencia_tipo <- table(datosSINA$tipo)
porcentajes <- prop.table(frecuencia_tipo) * 100
pie(frecuencia_tipo, labels = paste(names(frecuencia_tipo), "(", round(porcentajes, 1), "%)"), col = rainbow(length(frecuencia_tipo)))
title("Tipo de vivienda")

barplot(table(datosSINA$piso), col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Piso en el que se ubica la vivienda")

barplot(table(datosSINA$habitac), col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Número de habitaciones")

barplot(table(datosSINA$banios), col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Número de baños")

barplot(table(datosSINA$parquea), col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Número de parqueadero")

hist(datosSINA$preciom, col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Valor del inmueble en millones")

hist(datosSINA$precimtc, col = "skyblue", xlab = "Valores", ylab = "Frecuencia", main = "Valor por metro cuadrado en millones")

plot(density(datosSINA$areaconst), main = "Gráfico de Densidad de la variable área construida", xlab = "Valores", ylab = "Densidad")

plot(datosSINA$areaconst, datosSINA$preciom, xlab = "Tamaño", ylab = "Precio", main = "Gráfico de dispersión: Tamaño vs Precio")