Este informe presenta el análisis descriptivo de la base de datos “vivienda_faltantes”, propiedad de la empresa B&C. Para llevar a cabo este estudio se empleó software R, herramienta estadística líder en el ámbito del análisis de datos. El proyecto se enfoca en tres fases, la primera comprende un preprocesamiento y organización de la data, como preparación para el análisis posterior. En la segunda fase, se realiza un análisis univariado, explorando las variables individualmente para entender su distribución y características principales. Finalmente, en la tercera etapa se realiza cruce de variables con el objetivo de identificar tendencias y patrones en los datos que pueden ser de ayuda en la toma de decisiones de la empresa B&C.
Realizar análisis descriptivo de datos.
Identificar las características de las viviendas más vendidas en Cali.
Identificar la zona de mayor popularidad y posible desarrollo.
Identificar las áreas con mayor nivel socioeconómico.
Identificar patrones en los datos que puedan ser relevante para empresa B&C.
El análisis de datos se realizó en 3 fases:
Fase I. Pre procesamiento de data: cargue de información, revisión, descripción de tipo de data, estandarización y visualización de variables.
Fase II. Análisis univariado de las variables:
Fase III. Cruce de variables: identificación de tendencia e información relevante para la compañía.
La base de datos “vivienda_faltantes” está compuesta por 8330 datos y 13 variables.
## [1] "id" "zona" "piso" "estrato" "preciom" "areaconst"
## [7] "parquea" "banios" "habitac" "tipo" "barrio" "longitud"
## [13] "latitud"
Hay 4279 datos en valor NA siendo las variables piso y parqueadero con mayor número de datos faltantes.
## id zona piso estrato preciom areaconst parquea banios
## 3 3 2641 3 2 3 1606 3
## habitac tipo barrio longitud latitud
## 3 3 3 3 3
Las variables presentan las siguientes subdivisiones:
## $Uzona
## [1] "Zona Oeste" "Zona Sur" "Zona Norte" "Zona Oriente" "Zona Centro"
## [6] NA
##
## $Upiso
## [1] 4 1 NA 2 6 8 3 9 5 12 11 7 10
##
## $Uestrato
## [1] 6 5 3 4 NA
##
## $Uparquead
## [1] 2 1 4 8 NA 3 6 5 10 7 9
##
## $Ubanios
## [1] 4 7 2 10 3 5 1 6 0 8 9 NA
##
## $Utipo
## [1] "Apartamento" "Casa" "APARTAMENTO" "casa" "CASA"
## [6] "apto" NA
La variable tipo requirió estandarización para corregir errores de escritura.
## [1] "apartamento" "casa" NA
Para las variables numéricas: piso, estrato, preciom, areaconst, parquea, banios, habitac, se calculan:
## $piso
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 5689 3.77 2.62 3 3.37 1.48 1 12 11 1.28 1.05 0.03
##
## $estrato
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 8327 4.63 1.03 5 4.67 1.48 3 6 3 -0.18 -1.11 0.01
##
## $preciom
## vars n mean sd median trimmed mad min max range skew kurtosis
## X1 1 8328 434.24 329.02 330 374.72 209.05 58 1999 1941 1.85 3.66
## se
## X1 3.61
##
## $areaconst
## vars n mean sd median trimmed mad min max range skew kurtosis
## X1 1 8327 174.99 142.95 123 149.22 84.51 30 1745 1715 2.69 12.9
## se
## X1 1.57
##
## $parquea
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 6724 1.84 1.13 2 1.62 1.48 1 10 9 2.32 8.29 0.01
##
## $banios
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 8327 3.11 1.43 3 2.99 1.48 0 10 10 0.92 1.12 0.02
##
## $habitac
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 8327 3.61 1.46 3 3.41 1.48 0 10 10 1.64 3.99 0.02
## $piso
## 25% 50% 75%
## 2 3 5
##
## $estrato
## 25% 50% 75%
## 4 5 5
##
## $preciom
## 25% 50% 75%
## 220 330 540
##
## $areaconst
## 25% 50% 75%
## 80 123 229
##
## $parquea
## 25% 50% 75%
## 1 2 2
##
## $banios
## 25% 50% 75%
## 2 3 4
##
## $habitac
## 25% 50% 75%
## 3 3 4
Comentarios sobre los restultados del calculo de indicadores.
“piso”
“estrato”
“preciom”
Posee una desviación estandar alta (329.02) para el precio medio es de 434.24.
La mediana es de 330, lo que indica que el 50% de las viviendas tienen un precio inferior a 330.
La distribución es asimétrica hacia la derecha (skew = 1.85), lo que sugiere que hay algunas viviendas con precios muy altos que elevan la media.
“areaconst”
El área media de construcción es de 174.99, con una desviación estándar de 142.95.
La distribución es fuertemente asimétrica hacia la derecha (skew = 2.69), lo que sugiere que hay algunas viviendas con áreas de construcción muy grandes.
La curtosis es alta, lo que indica una distribución con extremos.
“parquea”
“habitac”
## # A tibble: 3 × 2
## tipo mean_price
## <chr> <dbl>
## 1 casa 540.
## 2 apartamento 368.
## 3 <NA> 330
## # A tibble: 3 × 2
## tipo mean_areaconst
## <chr> <dbl>
## 1 casa 273.
## 2 apartamento 113.
## 3 <NA> NaN
## Warning: Removed 1 rows containing missing values (`position_stack()`).
## # A tibble: 6 × 2
## zona mean_price
## <chr> <dbl>
## 1 Zona Oeste 679.
## 2 Zona Sur 427.
## 3 Zona Norte 346.
## 4 <NA> 330
## 5 Zona Centro 310.
## 6 Zona Oriente 229.
## # A tibble: 6 × 2
## zona median_estrato
## <chr> <dbl>
## 1 Zona Oeste 6
## 2 Zona Sur 5
## 3 Zona Norte 4
## 4 Zona Centro 3
## 5 Zona Oriente 3
## 6 <NA> NA
## Warning: Removed 1 rows containing missing values (`position_stack()`).
## # A tibble: 5 × 2
## estrato mean_price
## <dbl> <dbl>
## 1 6 801.
## 2 5 410.
## 3 NA 330
## 4 4 275.
## 5 3 210.
## # A tibble: 6 × 2
## zona mean_areaconst
## <chr> <dbl>
## 1 Zona Oeste 197.
## 2 Zona Centro 194.
## 3 Zona Oriente 192.
## 4 Zona Sur 173.
## 5 Zona Norte 161.
## 6 <NA> NaN
## # A tibble: 5 × 2
## estrato mean_areaconst
## <dbl> <dbl>
## 1 6 248.
## 2 5 173.
## 3 3 142.
## 4 4 131.
## 5 NA NaN
La base de datos tienen 4279 valores en estado NA lo que puede afectar un análisis precio. Se debe considerar la causa de estos datos faltantes y cómo deben ser tratados para análisis futuros.
La mayoría de las viviendas en Cali son apartamentos (61%), lo que puede indicar que Cali es una ciudad con medio-alto grado de urbanización.
La Zona Oeste tiene el promedio más alto de precio (679), el promedio más alto en área construida (197) y la mediana de estrato más alta (6), lo que indica que es una zona de mayor nivel socioeconómico en comparación con otras zonas.
La mayoría de las viviendas están en la Zona Sur (4726), lo que podría indicar que esta área es un centro de desarrollo o popularidad, esta es adicional a segunda zona con promedio de precios (427).
En promedio, las casas en Cali tienen 58% más área construida que los apartamentos (273 en casa vs 113 en apartamento).
En promedio, las casas en Cali tienen un precio 31% más alto que el precio de los apartamentos (540 para las casas vs 368 para los apartamentos).
Descripcion del codigo en R.
# Cargar el paquete necesario
library(paqueteMET)
data(vivienda_faltantes)
# instalación de libreria
library(dplyr)
library(moments)
library(naniar)
library(ggplot2)
library(tidyverse)
#Revision de variables presente en la base de datos
columnas <- names(vivienda_faltantes)
columnas
# Calcular el número de valores NA en cada variable
gg_miss_var(vivienda_faltantes)
na_count <- colSums(is.na(vivienda_faltantes))
na_count
# identificar la subdivisión de las variables zona, piso, estrato, parqueadero, baños, habitaciones.
Uzona <- unique(vivienda_faltantes$zona)
Upiso <- unique(vivienda_faltantes$piso)
Uestrato <- unique(vivienda_faltantes$estrato)
Uparquead <- unique(vivienda_faltantes$parquea)
Ubanios <- unique(vivienda_faltantes$banios)
Ubanios <- unique(vivienda_faltantes$banios)
Utipo <- unique(vivienda_faltantes$tipo)
Subdiv <- list(Uzona = Uzona, Upiso = Upiso, Uestrato = Uestrato, Uparquead = Uparquead, Ubanios = Ubanios, Utipo = Utipo)
Subdiv
# Estandarizar los valores de la variable "tipo"
vivienda_faltantes <- vivienda_faltantes %>% mutate(tipo = recode(tipo, "Apartamento" = "apartamento", "APARTAMENTO" = "apartamento", "apto" = "apartamento", "Casa" = "casa", "casa" = "casa", "CASA" = "casa", "NA" = "NA"))
# Verificar los cambios de la variable tipo
unique(vivienda_faltantes$tipo)
#grafico pie de variable tipo
data_pie <- round(table(vivienda_faltantes$tipo) %>% prop.table()*100, 2)
etiquetas_pie <- paste(vivienda_faltantes$tipo,"(", table(vivienda_faltantes$tipo), "-", data_pie, "%", ")" )
pie(data_pie, label=etiquetas_pie)
#Grafico de barra variable zona
ggplot(vivienda_faltantes, aes(x = zona)) + geom_bar(fill = "orange", color = "black", alpha = 0.7) + geom_text(stat='count', aes(label=after_stat(count)), vjust=-0.5) + theme_minimal() + labs(title = "Número de viviendas por zona", x = "Zona", y = "Número de viviendas") +
theme(legend.position = "none")
#histograma de piso
ggplot(vivienda_faltantes, aes(x = piso)) + geom_histogram(binwidth = 1, fill = "lightgreen", color = "black", alpha = 0.7, na.rm = TRUE) + labs(title = "Histograma distribución de piso", x = "Piso", y = "Viviendas")
#histograma de baños
ggplot(vivienda_faltantes, aes(x = banios)) + geom_histogram(binwidth = 1, fill = "gray", color = "black", alpha = 0.7, na.rm = TRUE) + labs(title = "Histograma distribución de baños", x = "Baños", y = "Viviendas")
#histograma de habitacion
ggplot(vivienda_faltantes, aes(x = habitac)) + geom_histogram(binwidth = 1, fill = "darkblue", color = "black", alpha = 0.7, na.rm = TRUE) + labs(title = "Histograma distribución de habitación", x = "Habitacion", y = "Viviendas")
# Boxplot para 'preciom'
ggplot(vivienda_faltantes, aes(y = preciom)) + geom_boxplot(fill = "salmon", color = "black", na.rm = TRUE) + labs(title = "Boxplot variable preciom", y = "Precio")
# Boxplot para 'areaconst'
ggplot(vivienda_faltantes, aes(y = areaconst)) + geom_boxplot(fill = "green", color = "black", na.rm = TRUE) + labs(title = "Boxplot variable area construida", y = "Area construida")
# Barras para 'parqueadero'
ggplot(vivienda_faltantes, aes(x = parquea)) + geom_bar(fill = "purple", color = "black", alpha = 0.7, na.rm = TRUE) + theme_minimal() + labs(title = "Número parquederos por vivienda", x = "Parqueadero", y = "Número de viviendas")
# Indicadpres de centro, dispersion y forma
Estad_descrip <- lapply(vivienda_faltantes[, c("piso", "estrato", "preciom", "areaconst", "parquea", "banios", "habitac")], psych::describe)
Estad_descrip
#Indicador de posición: caurtiles
Cuartiles <- lapply(vivienda_faltantes[c("piso", "estrato", "preciom", "areaconst", "parquea", "banios", "habitac")], quantile, probs = c(0.25, 0.5, 0.75), type = 6, na.rm = TRUE)
Cuartiles
# cruce entre varaibles precio y tipo
df_1 <-vivienda_faltantes %>% group_by(tipo) %>% summarise(mean_price = mean(preciom, na.rm = TRUE)) %>% arrange(-mean_price)
df_1
# Gráfico
ggplot(df_1, aes(x = reorder(tipo, -mean_price), y = mean_price)) + geom_bar(stat = "identity", fill = "darkblue", color = "black", alpha = 0.7, na.rm = TRUE) +
labs(title = "Promedio de precio por tipo de vivienda", x = "Tipo", y = "Promedio de precio") + theme_minimal()
# cruce entre varaibles precio y zona
df_2 <- vivienda_faltantes %>% group_by(zona) %>% summarise(mean_price = mean(preciom, na.rm = TRUE)) %>% arrange(-mean_price)
df_2
# Gráfico
ggplot(df_2, aes(x = reorder(zona, -mean_price), y = mean_price)) + geom_bar(stat = "identity", fill = "pink", color = "black", alpha = 0.7, na.rm = TRUE) +
labs(title = "Promedio de precio por zona", x = "Zona", y = "Promedio de precio") + theme_minimal()
# cruce entre varaibles zona y estrato
df_3 <-vivienda_faltantes %>% group_by(zona) %>% summarise(median_estrato = median(estrato, na.rm = TRUE)) %>% arrange(-median_estrato)
df_3
# Gráfico
ggplot(df_3, aes(x = reorder(zona, -median_estrato), y = median_estrato)) + geom_bar(stat = "identity", fill = "darkgreen", color = "black", alpha = 0.7, na.rm = TRUE) + labs(title = "Mediana de estrato por Zona", x = "zona", y = "Mediana de estrato") + theme_minimal()
# cruce entre varaibles tipo y area construida
df_4 <- vivienda_faltantes %>% group_by(tipo) %>% summarise(mean_areaconst= mean(areaconst, na.rm = TRUE)) %>% arrange(-mean_areaconst)
df_4
# Gráfico
ggplot(df_4, aes(x = reorder(tipo, -mean_areaconst), y = mean_areaconst)) + geom_bar(stat = "identity", fill = "purple", color = "black", alpha = 0.7, na.rm = TRUE) + labs(title = "Promedio de area construida por tipo de vivienda", x = "Tipo de vivienda", y = "Media de area construida") + theme_minimal()
# cruce de variables calculadas pero no graficadas
vivienda_faltantes %>% group_by(estrato) %>% summarise(mean_price = mean(preciom, na.rm = TRUE)) %>% arrange(-mean_price)
vivienda_faltantes %>% group_by(zona) %>% summarise(mean_areaconst= mean(areaconst, na.rm = TRUE)) %>% arrange(-mean_areaconst)
vivienda_faltantes %>% group_by(estrato) %>% summarise(mean_areaconst= mean(areaconst, na.rm = TRUE)) %>% arrange(-mean_areaconst)