1. INTRODUCCIÓN

La empresa B&C (Bines y Casas) es una agencia de bienes raíces que opera en la ciudad de Cali, Colombia. La empresa fue fundada por Sandra Milena hace 10 años y actualmente cuenta con ocho agentes de bienes raíces. [1.]

El análisis descriptivo de datos se ha convertido en una herramienta fundamental para las empresas. Permite comprender la información, detectar datos erróneos o atípicos, identificar patrones y tendencias, y formular hipótesis que pueden ser probadas con herramientas estadísticas más avanzadas.

Este documento presenta un análisis descriptivo de la información recolectada por B&C. conociendo a fondo el sector inmobiliario de Cali y encontrando variables relacionadas entre sí

2. OBJETIVO

2.1 OBJETIVO GENERAL

Realizar análisis descriptivo de la información recolectada por la empresa B&C.

2.2. OBJETIVOS ESPECIFICOS

2.2.1. Encontrar tipologías de viviendas más ofertadas

2.2.2. Realizar un análisis por zonas de la ciudad

2.2.3. Realizar un análisis del mercado por estrato social

#install.packages("devtools") # solo una vez
devtools::install_github("dgonxalex80/paqueteMETODOS")
## Skipping install of 'paqueteMETODOS' from a github remote, the SHA1 (341036c5) has not changed since last install.
##   Use `force = TRUE` to force installation
library(paqueteMETODOS) 
## Loading required package: cubature
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## Loading required package: flextable
## Loading required package: ggplot2
## Loading required package: lmtest
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
## Loading required package: psych
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
## Loading required package: summarytools
## Loading required package: randtests
## Loading required package: rapportools
## 
## Attaching package: 'rapportools'
## The following objects are masked from 'package:summarytools':
## 
##     label, label<-
## The following object is masked from 'package:dplyr':
## 
##     n
## The following objects are masked from 'package:stats':
## 
##     IQR, median, sd, var
## The following objects are masked from 'package:base':
## 
##     max, mean, min, range, sum
data(vivienda_faltantes)

3. METODOLOGÍA

El desarrollo de este proyecto se realizó siguiendo la siguiente metodología.

3.1. Análisis de datos.

3.2. Limpieza de datos.

3.3. Cálculo de medidas de tendencia central.

3.4. Creación de graficas descriptivas

3.1. ANALISIS

Para la limpieza de datos lo primero que se hizo fue identificar que tipos de variables tenía la base de datos, se logró identificar que existían 13 variables de las cuales 3 eran de tipo carácter y 10 de tipo numéricas.

summary(vivienda_faltantes)
##        id           zona                piso           estrato     
##  Min.   :   1   Length:8330        Min.   : 1.000   Min.   :3.000  
##  1st Qu.:2082   Class :character   1st Qu.: 2.000   1st Qu.:4.000  
##  Median :4164   Mode  :character   Median : 3.000   Median :5.000  
##  Mean   :4164                      Mean   : 3.772   Mean   :4.634  
##  3rd Qu.:6246                      3rd Qu.: 5.000   3rd Qu.:5.000  
##  Max.   :8319                      Max.   :12.000   Max.   :6.000  
##  NA's   :3                         NA's   :2641     NA's   :3      
##     preciom         areaconst       parquea           banios      
##  Min.   :  58.0   Min.   :  30   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 220.0   1st Qu.:  80   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 330.0   Median : 123   Median : 2.000   Median : 3.000  
##  Mean   : 434.2   Mean   : 175   Mean   : 1.836   Mean   : 3.112  
##  3rd Qu.: 540.0   3rd Qu.: 229   3rd Qu.: 2.000   3rd Qu.: 4.000  
##  Max.   :1999.0   Max.   :1745   Max.   :10.000   Max.   :10.000  
##  NA's   :2        NA's   :3      NA's   :1606     NA's   :3       
##     habitac           tipo              barrio             longitud        
##  Min.   : 0.000   Length:8330        Length:8330        Min.   :-76576.00  
##  1st Qu.: 3.000   Class :character   Class :character   1st Qu.:-76506.00  
##  Median : 3.000   Mode  :character   Mode  :character   Median :   -76.54  
##  Mean   : 3.605                                         Mean   :-21845.13  
##  3rd Qu.: 4.000                                         3rd Qu.:   -76.52  
##  Max.   :10.000                                         Max.   :   -76.46  
##  NA's   :3                                              NA's   :3          
##     latitud        
##  Min.   :   3.333  
##  1st Qu.:   3.390  
##  Median :   3.450  
##  Mean   : 970.370  
##  3rd Qu.:3367.000  
##  Max.   :3497.000  
##  NA's   :3
hist(vivienda_faltantes$preciom,main = "Distribución datos precio") 

hist(vivienda_faltantes$areaconst, main = "Distribución datos area")

3.2. LIMPIEZA DE DATOS

Posteriormente se identificaron los datos faltantes en la base de datos. Se encontró que había 2 líneas completamente vacías y 1 línea que solo contaba con 1 dato en el precio. Debido a que eran datos que no servían para nada se procedió a eliminar las 3 líneas anteriormente mencionadas. Posteriormente se encontró que hacían falta 2641 datos para la variable tipo y 1606 datos para la variable parqueadero. Para corregir esa inconstancia, en la variable piso se procedió a remplazar los datos faltantes por la moda de esta variable y la variable parqueadero se procedió a remplazar los datos faltantes por el valor entero de la media de parqueaderos.

Moda de piso = 2

Media parqueadero = 2

Se continuó con un análisis sistemático de las variables de tipo carácter, allí se encontró que en la variable tipo y la variable barrio había varios datos que querían expresar lo mismo pero escrito de forma diferente, por ejemplo, en la variable tipo había datos para apartamento escritos de 3 maneras diferentes, APARTAMENTO, apartamento y apto. Para corregir la inconsistencia se modificaron los datos para dejar 1 solo valor para apartamento y 1 solo valor para casa, en el caso de la variable barrio también se modificaron los diferentes casos en los que se encontraron nombres que querían decir lo mismo, pero escritos de forma diferente.

library(paqueteMETODOS) 
faltantes <- colSums(is.na(vivienda_faltantes)) %>% 
  as.data.frame()

#Ordenar y Limpiar Datos

vivienda_sinna <- subset(vivienda_faltantes, !is.na(vivienda_faltantes$barrio)) 
#install.packages("DescTools") # solo una vez 
library(DescTools) 
## 
## Attaching package: 'DescTools'
## The following objects are masked from 'package:psych':
## 
##     AUC, ICC, SD
moda_vivienda_sinna <- Mode(vivienda_sinna$piso, na.rm = TRUE)
vivienda_sinna$piso[is.na(vivienda_sinna$piso)] <- moda_vivienda_sinna 
library(DescTools) 
moda_vivienda_sinna_parqueadero <- Mode(vivienda_sinna$parquea, na.rm = TRUE)
media_vivienda_sinna_parqueadero <- mean(vivienda_sinna$parquea, na.rm = TRUE) %>% 
  round( ,0) 
vivienda_sinna$parquea[is.na(vivienda_sinna$parquea)] <- media_vivienda_sinna_parqueadero

faltantes_sinna <- colSums(is.na(vivienda_sinna)) %>% as.data.frame()

library(dplyr) 
vec_recode <- c("APARTAMENTO" = "Apartamento", "apto" = "Apartamento", "casa" = "Casa", "CASA" = "Casa") 
# Recodificar la columna 'tipo' 
vivienda_sinna <- vivienda_sinna %>% 
mutate(tipo = recode(tipo, !!! vec_recode))

vec_recode1 <- c("aguablanca"="agua blanca","alameda del río"="alameda del rio","alf√©rez real"="alferez real","alfonso lópez"="alfonso lopez","base a√©rea"="base aerea","Belalcazar"="belalcazar","Brisas De Los"="brisas de los","cali bella"="calibella","cali canto"="calicanto","Camino Real"="camino real","Centenario"="centenario","Chiminangos"="chiminangos","Ciudad 2000"=" ciudad 2000","ciudad córdoba"="ciudad cordoba","ciudad jardín"="ciudad jardin","Ciudad Jardín"="ciudad jardin","Ciudad Pacifica"="ciudad pacifica","ciudadela paso ancho"="ciudadela pasoancho","Colseguros Andes"="colseguros andes","cristobal colón"="cristóbal colón","El Bosque"="el bosque","El Caney"="el caney","El Ingenio"="el ingenio","el ingenio 3"="el ingenio iii","el tr√©bol"="el trebol"," juanamb√∫"="juanambu","junin"="junín","La Flora"="la flora","la hacienda"="La Hacienda","las am√©ricas"="las americas","los alcazares"="los alcázares","los cámbulos"="los cambulos","Los Guaduales"="los guaduales","mel√©ndez"="melendez","Miraflores"="miraflores","nápoles"="napoles","normandía"="normandia","pacará"="pacara","pampa linda "="pampalinda","Pance"="pance","Prados Del Limonar"="prados del limonar","Prados Del Norte"="prados del norte","Quintas De Don"="quintas de don","rep√∫blica de israel "="repeblica de israel ","San Fernando"="san fernando","san joaquín"="san joaquin ","san luís "="san luis","san nicolás"="san nicolas","Santa Anita"="santa anita","Santa Isabel"="santa isabel ","Santa Monica"="santa monica","santa mónica"="santa monica","santa mónica popular"="santa monica popular","santa mónica residencial"="santa monica residencial","Santa Teresita"="santa teresita","Santo Domingo"="santo domingo","tequendema"="tequendama","valle de lili"="valle del lili","Valle Del Lili"="valle del lili","Villa Del Prado"="villa del prado","Villas De Veracruz"="villas de veracruz") 
# Recodificar la columna 'barrio' 
vivienda_sinna <- vivienda_sinna %>% 
  mutate(barrio = recode(barrio, !!! vec_recode1))

3.3. CÁLCULO DE MEDIDAS DE TENDENCIA CENTRAL.

Se realizo el cálculo de medidas de tendencia central y de dispersión con el fin de dar mayor explicación a algunas variables.

library(DescTools) 
library(dplyr)
moda_vivienda_sinna_estrato <- Mode(vivienda_sinna$estrato, na.rm = TRUE) 
moda_vivienda_sinna_habitac <- Mode(vivienda_sinna$habitac, na.rm = TRUE) 
moda_vivienda_sinna_banios <- Mode(vivienda_sinna$banios, na.rm = TRUE) 
media_vivienda_sinna_areaconst <- mean(vivienda_sinna$areaconst, na.rm = TRUE) %>% 
  round( ,0) 
media_vivienda_sinna_precio <- mean(vivienda_sinna$preciom, na.rm = TRUE) %>% 
  round( ,0)
minimo_precio = min(vivienda_sinna$preciom)
maximo_precio = max(vivienda_sinna$preciom)
desviacion_precio = sd(vivienda_sinna$preciom)
desviacion_area = sd(vivienda_sinna$areaconst)

3.4. CREACIÓN DE GRAFICAS DESCRIPTIVAS

Para las gráficas se tomó la decisión de mostrar las siguientes:

4. RESULTADOS

4.1 MEDIDAS DE TENDENCIA CENTRAL

Una vez realizado el cálculo de las medidas de tendencia central se encontró lo siguiente:

  1. El precio medio de venta de una vivienda en Cali es de 434 con una desviación estándar de 329.03 lo que indica una variación significativa en los precios

  2. El precio mínimo de venta de una vivienda es de 58 el cual corresponde a un apartamento ubicado en la zona oriente de la ciudad.

  3. El precio máximo de venta de una vivienda es de 1999 el cual corresponde a una casa ubicada en la zona oeste de la ciudad.

  4. El área construida media de 175 con una desviación estándar de 142.94 lo que indica una variación considerable en los tamaños de las viviendas.

  5. La mayor cantidad de viviendas corresponden al estrato 5 y a viviendas con 3 habitaciones.

4.2 PRECIO PROMEDIO DE VIVIENDA SEGÚN LA ZONA EN LA QUE ESTA UBICADA

Se realizó una gráfica de barras dobles, con la cual se pudiera comparar el precio de las viviendas según la zona y el tipo de vivienda.

library(DescTools) 
library(dplyr)
vivienda_sinna_promedio <- vivienda_sinna %>% 
  group_by(zona,tipo) %>% 
  summarise(preciom = mean(preciom, na.rm = TRUE))
## `summarise()` has grouped output by 'zona'. You can override using the
## `.groups` argument.
ggplot(vivienda_sinna_promedio, aes(x = zona, y = preciom, fill = tipo)) + 
  geom_bar(stat = "identity", position = "dodge") + 
  labs(title = "Precio Promedio Según la Zona", 
       x = "Zona", 
       y = "Precio promedio", 
       fill = "tipo") + 
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 0, hjust = 1))

Se evidencia que hay una relación directamente proporcional con el precio y el tipo de vivienda, al igual que el precio y la zona en la que está ubicada la vivienda.

Los apartamentos son más económicos que las casas si están ubicados en la misma zona, la zona donde las viviendas son más económicas es en la zona oriente y las zonas más costosas son la zona oeste y la zona sur, la zona norte cuenta con los precios más cerca al precio medio de toda la ciudad.

4.3. PRECIO PROMEDIO DE LA VIVIENDA SEGÚN EL ESTRATO

Se realizó una gráfica de barras dobles, con la cual se pudiera comparar el precio de las viviendas según el estrato y el tipo de vivienda.

library(DescTools) 
library(dplyr)
vivienda_sinna_promedio_estrato <- vivienda_sinna %>%
  group_by(estrato,tipo) %>% 
  summarise(preciom = mean(preciom, na.rm = TRUE))
## `summarise()` has grouped output by 'estrato'. You can override using the
## `.groups` argument.
ggplot(vivienda_sinna_promedio_estrato, aes(x = estrato, y = preciom, fill = tipo)) + 
  geom_bar(stat = "identity", position = "dodge") + 
  labs(title = "Precio Promedio Según el Estrato", 
       x = "Estrato", 
       y = "Precio promedio", 
       fill = "tipo") + 
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 0, hjust = 1))

Se evidencia que hay una relación directamente proporcional con el precio y el estrato de la vivienda.

Los apartamentos son más económicos que las casas si se encuentran en el mismo, el estrato donde las viviendas son más económica es el estrato 1 y donde son más costosas es el estrato 6, el estrato 4 cuenta con los precios más cerca al precio medio de toda la ciudad.

4.4. CANTIDAD DE VIVIENDAS POR TIPO

Se realizó una gráfica de torta, con la cual se pudiera evidenciar la proporción de ventas por el tipo de vivienda.

t1=table(vivienda_sinna$tipo) 
pie(t1, main = "Proporción de Viviendas Ofertadas por Tipo")

Se evidencia que los apartamentos tienen aproximadamente 25% más ventas que las casas

4.5. CANDIDAD DE VIVIENDAS SEGÚN LA ZONA Y EL ESTRATO

Se realiza una tabla en la cual se pueda evidenciar el total de viviendas vendidas por zona de ubicación y estrato.

library(DescTools) 
library(dplyr)
matriz <- table(vivienda_sinna$zona, vivienda_sinna$estrato)
matriz_con_totales <- addmargins(matriz) 
print(matriz_con_totales)
##               
##                   3    4    5    6  Sum
##   Zona Centro   105   14    4    1  124
##   Zona Norte    572  408  770  172 1922
##   Zona Oeste     54   85  290  775 1204
##   Zona Oriente  340    8    2    1  351
##   Zona Sur      382 1616 1685 1043 4726
##   Sum          1453 2131 2751 1992 8327

Se encontraron los siguientes resultados

5. CONCLUCIONES

6. RECOMENDACIONES