Señores: Directivos de B&C.

Ciudad

El siguiente informe estadístico muestra un análisis descriptivo de los datos del mercado inmobiliario en la ciudad de Cali, dirigido a su compañía inmobiliaria B&C para la toma de decisiones, como: definir su nicho de mercado, desarrollar estrategias de marketing, establecer precios de venta y ofrecer servicios personalizados a sus clientes.

Introducción

En este informe se describe la comprensión de datos, lo que implica acceder a los datos y explorarlos mediante de tablas, gráficos e indicadores, los cuales son realizadas en el software en R y RStudio (Lenguaje y entorno de programación con un enfoque al análisis estadístico), utilizando las fases entendimiento y preparación de la herramienta de proyectos CRISP-DM, se podrá determinar la calidad de los datos y describir los resultados de estos pasos en el documento del proyecto.

Objetivos

  • Analizar, identificar y corregir datos que están vacíos, con diferentes nombres y mal procesados.
  • Estructurar y representar la información contenida en los datos por medio de tablas de frecuencia, gráficos e indicadores.
  • Examinar el dataset con el mercado inmobiliario en la ciudad Cali con la finalidad de observar tendencias para generar conclusiones sobre la información que contienen.

Métodos

Inicialmente, se empezará con la importación de datos, para dar comienzo al análisis,

Importar datos

Primero, se instala el paquete “learnr”, y el paquete MET para acceder a la data de Viviendas por medio de la librería MET.

## Skipping install of 'paqueteMET' from a github remote, the SHA1 (624823ee) has not changed since last install.
##   Use `force = TRUE` to force installation

Como medida de accesibilidad se guarda el dataset en formato Excel, y lectura de archivo para ser trabajado desde cualquier sitio.

Después de cargar la data, se realizará una exploración de los datos contenidos en él.

## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 8330 obs. of  13 variables:
##  $ id       : num  8312 8311 8307 8296 8297 ...
##  $ zona     : chr  "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
##  $ piso     : num  4 1 NA 2 NA NA 2 NA NA 2 ...
##  $ estrato  : num  6 6 5 3 5 5 6 5 5 5 ...
##  $ preciom  : num  1300 480 1200 220 330 1350 305 480 275 285 ...
##  $ areaconst: num  318 300 800 150 112 390 125 280 74 120 ...
##  $ parquea  : num  2 1 4 1 2 8 2 4 1 2 ...
##  $ banios   : num  4 4 7 2 4 10 3 4 2 4 ...
##  $ habitac  : num  2 4 5 4 3 10 3 4 3 3 ...
##  $ tipo     : chr  "Apartamento" "Casa" "Casa" "Casa" ...
##  $ barrio   : chr  "arboleda" "normandía" "miraflores" "el guabal" ...
##  $ longitud : num  -76576 -76571 -76568 -76565 -76565 ...
##  $ latitud  : num  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>

El dataset contiene las siguientes características:

Tamaño: 8.330 registros y 13 atributos.

Descripción de las Variables:

  • id = Es de tipo numérico, que representa el identificador único de cada registro (propiedad).
  • zona = Es de tipo carácter, indicando la zona geográfica de Cali en la que se encuentra la propiedad.
  • piso = Es de tipo numérico, que podría indicar el número del nivel del piso o la cantidad que tiene la propiedad.
  • estrato: Es de tipo numérico, que representa el estrato socioeconómico de la propiedad.
  • preciom: Es de tipo numérico con el precio por metro cuadrado de la propiedad, expresada en milles.
  • areaconst: Es de tipo numérico que indica el área construida de la propiedad.
  • parquea: Es de tipo numérico con la cantidad de estacionamiento de la propiedad.
  • banios: Es de tipo numérico con la cantidad de baños de la propiedad.
  • habitac: Es de tipo numérico con la cantidad de habitaciones en la propiedad.
  • tipo: Es de tipo carácter que indica el tipo de propiedad, “Apartamento” o “Casa”.
  • barrio: Es de tipo carácter con el nombre el barrio de la propiedad.
  • longitud y latitud: Es de tipo numérico con las coordenadas de la ubicación geográfica de la propiedad.

Limpieza de los datos

El siguiente paso continua con la Limpieza de los datos, para lo cual lo primero es evidenciar datos vacíos en el dataset.

## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind

En el grafico anterior se observan una gran cantidad de datos vacíos, la mayoría corresponde a la variable parqueadero y piso, las demás variables presentan vacíos, pero de manera muy mínima, por lo cual se procede a:

  • Se elimina la variable Parqueadero que contienen 1.606 con NA, ya que son demasiados y se debe tener exactitud en su cantidad para dar una mejor apreciación.
  • Se elimina la variable Piso con 2.641 datos NA, ya que la variable no es Clara ¿Son Pisos (Nivel) por apartamentos o el número de Pisos por Casa?
  • Se elimina la variable longitud y latitud debido a que se cuenta con la Zona geográfica y el barrio de la Ciudad.
  • Posteriormente, Eliminar los registros con datos vacíos, los cuales son pocos.
  • Se unifican los valores de tipo Apartamento y apto en APARTAMENTO y casa y Casa en CASA
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

Finalmente, se observa que ya no existen registros vacíos (NA) y su disminución en registros fue solo de 3, lo cual afectara en un mínimo los resultados.

Analisís de Datos

En el análisis de datos se realizará una representación de los datos por medio de Frecuencia, Tablas y Gráficos, adicionalmente analizaremos los resultados junto a los Indicadores, para que la compañía cuente con elementos para la toma de decisiones.

Tablas de Frecuencias, Indicadores y Visualización

A continuación, se expondrán las tablas de frecuencia para mostrar de forma ordenada las variables y observar su distribución, de la Zona, el Estrato y el tipo de propiedad.

## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::arrange()   masks plyr::arrange()
## ✖ purrr::compact()   masks plyr::compact()
## ✖ dplyr::count()     masks plyr::count()
## ✖ dplyr::desc()      masks plyr::desc()
## ✖ dplyr::failwith()  masks plyr::failwith()
## ✖ dplyr::filter()    masks mice::filter(), stats::filter()
## ✖ dplyr::id()        masks plyr::id()
## ✖ dplyr::lag()       masks stats::lag()
## ✖ dplyr::mutate()    masks plyr::mutate()
## ✖ dplyr::rename()    masks plyr::rename()
## ✖ dplyr::summarise() masks plyr::summarise()
## ✖ dplyr::summarize() masks plyr::summarize()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Frequencies  
## vivienda_faltantes$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

En la Tabla de frecuencias simples, acumuladas de la Variable Zona, se observa un mayor número de Propiedades en la Zona Sur, con 4.726 equivalentes a un 56,76% seguida de la Zona Norte con 1.922 propiedades equivalente a un 23,08%.

En el gráfico de barras, de la variable Tipo de Inmueble, se observa; dos Tipos de Inmuebles; CASA y APARTAMENTO con un 61,32%, superior a las Casas con un 38,68%.

Diagrama circular de las variables Estrato y Tipo de Inmueble, se observa cuatro estratos, el estrato 5 más predominante con un 33,04%, seguido por el 4 y 6 con un 25,59% y 23,92% respectivamente y de ultimas el estrato 3 con un 17,44%

##               
##                APARTAMENTO       CASA
##   Zona Centro    0.2882190  1.2009127
##   Zona Norte    14.3989432  8.6825988
##   Zona Oeste    12.4294464  2.0295425
##   Zona Oriente   0.7445659  3.4706377
##   Zona Sur      33.4574276 23.2977063
##    
##     APARTAMENTO      CASA
##   3    7.673832  9.775429
##   4   16.860814  8.730635
##   5   21.220127 11.816981
##   6   15.563829  8.358352

En las Tablas con dos variables para frecuencias absolutas en porcentajes, se observa la distribución entre Casa y Apartamentos en las Zonas, con un 33,45% de Apartamentos y un 23,29% de Casas en la Zona Sur, y referente al estrato se destaca los Apartamentos en el estrato 5 y 4.

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    58.0   220.0   330.0   434.3   540.0  1999.0

Analizando la Variable Precio por Metro Cuadrado (Valores en Miles $), se destacan que el precio mínimo del metro cuadrado es de $58 mil y el precio mayor es de $1.999 mil, con una mediana de $330 mil

##            Zona        Tipo Rango.1 Rango.2
## 1   Zona Centro APARTAMENTO      52     155
## 2    Zona Norte APARTAMENTO      35     660
## 3    Zona Oeste APARTAMENTO      44     550
## 4  Zona Oriente APARTAMENTO      50     320
## 5      Zona Sur APARTAMENTO      40     932
## 6   Zona Centro        CASA      74     750
## 7    Zona Norte        CASA      30    1440
## 8    Zona Oeste        CASA      55    1200
## 9  Zona Oriente        CASA      40    1745
## 10     Zona Sur        CASA      47    1600

Histogramas:

hist(x = vivienda_faltantes$areaconst, , main = "Histograma de Área Construida", 
     xlab = "Área", ylab = "Frecuencia")

En el resumen por subgrupo de las Zonas vs el Tipo de Inmueble se observa, que el Rango.1 (Min) y Rango.2 (Max), los Precios Mayores corresponden a la Zona del Sur para los Apartamentos, pero para las Casa es mayor en la Zona Oriente.

En la gráfica del histograma nos permite observar la distribución de datos numéricos el Precio en Metros usando barras. Cada barra representa el número de veces (frecuencia) que se observan datos, en este caso vemos una distribución mayor entre $220 mil a $540 mil, pero con pocos valores mayores a $1.000 mil.

En el diagrama de cajas, se observa que el número de baños de se encuentran entre 2 y 4, y se observa claramente unos valores atípicos con 8, 9 y 10 baños que se deben verificar y relacionar con el área construida y el número de habitaciones.

En el diagrama de cajas, se observa que el número de habitaciones entre 3 a 4, y se observa claramente unos valores atípicos entre 6 y 10 habitaciones que se deben verificar y relacionar con el área construida y el número de habitaciones.

En la tabla cruzada se puede observar el número de habitaciones por tipo de inmueble, con un número Menor de habitaciones para los Apartamentos y con un número Mayor de habitaciones para las Casas

En el caso con los baños tienen el mismo patrón.

En los gráficos de densidad se observa nuevamente los datos con simetría izquierda, por lo cual dividir el dataset o eliminar los datos mayores generaría mejor comprensión de los datos.

Conclusiones

  • En los valores de los Precios, en el Rango mínimo se observa valores muy similares en todas las Zonas, sería recomendable realizar una revisión más detallada.
  • El valor del Precio del Metro Cuadrado, y el Área Construida no es asimétrica tiene una simetría a la Izquierda.
  • Los datos atípicos, corresponden a inmuebles extremadamente costosos, que contienen áreas grandes de construcción y un alto numero de baños y habitaciones, se recomienda analizar en un dataset aparte o no tenerlos para un estudio posterior.

Anexos

  • Script en R, en formato Markdown
  • Excel con datos limpios