La base de datos cuenta con 13 variables y 8330 registros, a
continuacion se describe cada una de las variables encontradas en la
base de 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>
De acuerdo a la grafica la variables con datos faltantes son
piso y parquea.
Se analiza la variable piso imputando por 0 los datos
faltantes y se analiza el comportamiento de la variable preciom
con respecto a esta.
datos1=vivienda_faltantes
datos1$piso[is.na(datos1$piso)] = 0
boxplotPiso = ggplot(datos1, aes(x = datos1$piso, y = datos1$preciom, group=datos1$piso)) +
geom_boxplot() +
labs(title = "Distribución precios por piso", x = "Piso", y = "Precio (Millones de Pesos)") +
theme_minimal()
boxplotPiso
Se podria decir que la variable piso es una variable de tipo
idenpendiente conrespecto a la variable preciom y se podria no
tomar encuenta esta variable para el analisis.
Al analizar la variable parquea de la misma forma la
variable piso encontramos que las variables parquea y
precio podrian tener una relacion de tipo dependiente, para
evitar agregar sesgos a la base de datos realizando imputacion con una
medida de tendencia central se prefiere no tener en cuenta estos datos
para el analisis.
datos3 = datos2
datos3$parquea[is.na(datos2$parquea)] = 0
boxplotParquea = ggplot(datos3, aes(x = datos3$parquea, y = datos3$preciom, group=datos3$parquea)) +
geom_boxplot() +
labs(title = "Distribución precios por Parqueadero", x = "No. Parqueaderos", y = "Precio (Millones de Pesos)") +
theme_minimal()
boxplotParqueaDespues de realizar la limpieza de datos faltantes, podriamos decir
que tenemos un 80.72% de los registros iniciales y 1 variable menos a
analizar.
porcentaje_datos_completos = length(datos3$id)*100/length(vivienda_faltantes$id)
porcentaje_datos_completos## [1] 80.72029
Id:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 2476 4478 4417 6433 8319
Esta variable no se considera como una variable estadistica debido que marca la posicion del registro aunque es numerica no se repite.
Zona:
## Length Class Mode
## 6724 character character
La variable Zona es considerada una variable de tipo string cualitativa con una escala nominal y no presenta datos faltantes o datos ambiguos por lo tanto no se modifica.
##
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## 64 1289 1103 163 4105
barrasZonas = ggplot(datos3, aes(x = datos3$zona)) +
geom_bar()+
labs(title = "Cantidad de Viviendas por Zonas", x = "Zonas", y = "Frecuencia") +
theme_minimal()
barrasZonasboxplotZona = ggplot(datos3, aes(x = datos3$zona, y = datos3$preciom)) +
geom_boxplot() +
labs(title = "Distribución precios por zonas", x = "Zona", y = "Precio (Millones de Pesos)") +
theme_minimal()
boxplotZona
Tipo:
## Length Class Mode
## 6724 character character
##
## Apartamento APARTAMENTO apto casa Casa CASA
## 4191 42 4 11 2469 7
es considerada una variable cualitativa con una escala ordinal,
los datos almacenados en esta variable deberian tener solo 2 valores
posibles “Apartamento” y “Casa” por lo tanto se realiza una
transformacion de datos
datos4 = datos3
datos4$tipo = case_when(
datos4$tipo %in% c("Apartamento","APARTAMENTO","apto") ~ "Apartamento",
datos4$tipo %in% c("casa","Casa","CASA") ~ "Casa"
)
table(datos4$tipo)##
## Apartamento Casa
## 4237 2487
barrasTipo = ggplot(datos4, aes(x = datos4$tipo)) +
geom_bar()+
labs(title = "Cantidad de Viviendas por Tipo", x = "Tipo de Vivienda", y = "Frecuencia") +
theme_minimal()
barrasTipoboxplotTipo = ggplot(datos4, aes(x = datos4$tipo, y = datos4$preciom)) +
geom_boxplot() +
labs(title = "Distribución de Precios por Tipo de Vivienda", x = "Tipo de Vivienda", y = "Precio (Millones de Pesos)") +
theme_minimal()
boxplotTipoEstrato:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.000 4.000 5.000 4.831 6.000 6.000
es considerada una variable cualitativa con una escala ordinal
datos4$estrato = as.factor(datos4$estrato)
boxplotEstrato = ggplot(datos4, aes(x = datos4$estrato, y = datos4$preciom, group=datos3$estrato)) +
geom_boxplot() +
labs(title = "Distribución de Precios por Estratos", x = "Estrato", y = "Precio (Millones de Pesos)") +
theme_minimal()
boxplotEstratoPreciom: es considerada una variable cuantitativa
continua
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 58.0 248.8 355.0 469.3 580.0 1999.0
hisPrecio = ggplot(datos4, aes(x = datos4$preciom)) +
geom_histogram(binwidth = 50, color = "black", fill = "gray") +
labs(title = "Histograma de Precios Viviendas",
x = "Precio (Millones)",
y = "Cantidad") +
theme_minimal()
hisPrecioAreaconst: es considerada una variable cuantitativa
continua
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 30.0 86.0 130.0 181.2 234.0 1745.0
hisArea = ggplot(datos4, aes(x = areaconst)) +
geom_histogram(binwidth = 25, color = "black", fill = "gray") +
labs(title = "Histograma de Area Construida",
x = "Area Construida (m²)",
y = "Cantidad") +
theme_minimal()
hisAreaggplot(datos4, aes(y = areaconst, x = preciom, color = estrato, shape = tipo)) +
geom_point() +
labs(title = "Dispersión de Precio vs. Área por Tipo de Casa y Estrato",
y = "Área (m2)",
x = "Precio (Millones)",
color = "Estrato",
shape = "Tipo de Casa") +
facet_wrap(~ estrato) +
theme_minimal() +
scale_color_brewer(palette = "Set1")Parquea:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.000 2.000 1.836 2.000 10.000
es considerada una variable cuantitativa discreta
datos4$parquea = as.factor(datos4$parquea)
boxplotParquea = ggplot(datos4, aes(x = datos4$parquea, y = datos4$preciom, group=datos3$parquea)) +
geom_boxplot() +
labs(title = "Distribución de Precios por No. Parqueaderos", x = "No. Parqueaderos", y = "Precio (Millones de Pesos)") +
theme_minimal()
boxplotParqueaBanios:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 2.000 3.000 3.257 4.000 10.000
es considerada una variable cuatitativa discreta
datos4$banios = as.factor(datos4$banios)
barrasBanios = ggplot(datos4, aes(x = datos4$banios)) +
geom_bar()+
labs(title = "Cantidad de Viviendas por No. Baños", x = "No. Baños", y = "Frecuencia") +
theme_minimal()
barrasBaniosboxplotBanios = ggplot(datos4, aes(x = datos4$banios, y = datos4$preciom, group=datos4$banios)) +
geom_boxplot() +
labs(title = "Distribución de Precios por No. Baños", x = "No. Baños", y = "Precio (Millones de Pesos)") +
theme_minimal()
boxplotBanios##
## 0 1 2 3 4 5 6 7 8 9 10
## 15 199 2230 1758 1292 805 279 93 36 12 5
boxplotBanios_estratos = ggplot(datos4, aes(y = datos4$banios, x = datos4$estrato, group=datos4$estrato)) +
geom_boxplot() +
labs(title = "Distribución de No. Baños por Estratos", y = "No. Baños", x = "Estrato") +
theme_minimal()
boxplotBanios_estratosdatos4$banios=as.character(datos4$banios)
datos4$banios=as.numeric(datos4$banios)
medianas_banios <- aggregate(banios ~ estrato, data = datos4, FUN = median)
medianas_baniosdatos5=datos4
datos5$banios = ifelse(datos5$banios == 0 & datos5$estrato == 3, 2,
ifelse(datos5$banios == 0 & datos5$estrato == 4, 2,
ifelse(datos5$banios == 0 & datos5$estrato == 5, 3,
ifelse(datos5$banios == 0 & datos5$estrato == 6, 4, datos5$banios))))
datos5datos5$banios = as.factor(datos5$banios)
boxplotBanios2 = ggplot(datos5, aes(x = datos5$banios, y = datos5$preciom, group=datos5$banios)) +
geom_boxplot() +
labs(title = "Distribución de Precios por No. Baños", x = "No. Baños", y = "Precio (Millones de Pesos)") +
theme_minimal()
boxplotBanios2Habitac:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 3.000 3.000 3.611 4.000 10.000
es considerada una variable cuatitativa discreta
barrasHabitac = ggplot(datos5, aes(x = datos5$habitac)) +
geom_bar()+
labs(title = "Cantidad de Viviendas por No. Habitciones", x = "No. Habitaciones", y = "Frecuencia") +
theme_minimal()
barrasHabitacdatos5$habitac = as.factor(datos5$habitac)
boxplotHabitac = ggplot(datos5, aes(x = datos5$habitac, y = datos5$preciom, group=datos5$habitac)) +
geom_boxplot() +
labs(title = "Distribución de Precios por No. Habitaciones", x = "No. Habitaciones", y = "Precio (Millones de Pesos)") +
theme_minimal()
boxplotHabitac##
## Apartamento Casa
## 0 12 11
## 1 40 4
## 2 609 39
## 3 2841 536
## 4 671 841
## 5 57 516
## 6 5 240
## 7 1 125
## 8 0 77
## 9 1 62
## 10 0 36
Barrio: es considerada una variable cualitativa con
una escala nominal
Longitud:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -76576.00 -76516.00 -76.54 -21691.54 -76.52 -76.46
esta variable indica la posicion con respecto al meridiano de
Greenwich y es considerada una variable cuantitativa continua, al
analizar los datos se puede observar que cuenta con un rango amplio y
esto lleva a indicar que hay un error de digitacion ya que esta variable
no puede variar signficativamente en la misma area de estudio, por lo
tanto se debe corregir este error dividiendo por 1000 los datos que
presentan anomalias.
datos5 = datos4
datos5$longitud <- ifelse(datos5$longitud < -1000, datos5$longitud/1000, datos5$longitud)
summary(datos5$longitud)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -76.59 -76.54 -76.53 -76.53 -76.52 -76.46
Latitud:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.333 3.387 3.448 967.862 3365.000 3494.000
esta variable indica la posicion con respecto al meridieje del
ecuador y es considerada una variable cuantitativa continua, al analizar
los datos se puede observar que presenta el mismo error detectado en la
Longitud, por lo tanto se debe corregir este error dividiendo
por 1000 los datos que presentan anomalias.
datos6=datos5
datos6$latitud <- ifelse(datos6$latitud > 1000, datos6$latitud/1000, datos6$latitud)
summary(datos6$latitud)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.333 3.379 3.412 3.415 3.451 3.498