La empresa B&C (Bines y Casas) es una agencia de bienes raĆces con sede en la ciudad de Cali, Colombia. Fundada por Sandra Milena hace 10 aƱos, la empresa cuenta actualmente con ocho agentes de bienes raĆces. El mercado de bienes raĆces en Cali ha experimentado un crecimiento significativo en los Ćŗltimos aƱos debido al aumento de la población, la inversión extranjera directa y el desarrollo de nuevos proyectos inmobiliarios.
El objetivo de este informe es proporcionar a los directivos de la empresa B&C un anĆ”lisis descriptivo de los datos recopilados sobre viviendas en Cali. Se busca identificar tendencias y patrones en el mercado de bienes raĆces que sean relevantes para la toma de decisiones comerciales de la empresa.
Para llevar a cabo un anĆ”lisis descriptivo completo y exhaustivo de los datos recopilados por la empresa B&C sobre el mercado de bienes raĆces en Cali, Colombia, se utilizarĆ”n diversas herramientas y tĆ©cnicas de anĆ”lisis estadĆstico. A continuación se detallan los mĆ©todos que se emplearĆ”n:
La limpieza de datos es un proceso crucial en el anĆ”lisis de datos que implica la identificación, corrección y eliminación de errores, inconsistencias y valores atĆpicos. Este proceso es fundamental para garantizar la calidad y confiabilidad de los datos antes de realizar anĆ”lisis estadĆsticos o modelos predictivos.
Se utilizarÔ un enfoque descriptivo y exploratorio para examinar la distribución del precio de las viviendas en diferentes zonas de Cali. Se calcularÔn medidas de tendencia central (media, mediana, moda) y medidas de dispersión (rango, desviación estÔndar) para comprender la variabilidad de los precios en cada zona.
Se emplearĆ”n tablas de frecuencia y grĆ”ficos de barras para visualizar la composición de las viviendas mĆ”s ofertadas en Cali, incluyendo el tipo de vivienda (apartamento, casa), el nĆŗmero de habitaciones, baƱos, etc. Se calcularĆ”n medidas de resumen para cada variable categórica y se realizarĆ”n anĆ”lisis comparativos entre diferentes categorĆas.
Durante la exploración de datos, se identificaron valores
atĆpicos en el tipo de vivienda (casa o apartamento). Se observó que las
viviendas que carecĆan de habitaciones y baƱos podrĆan ser clasificadas
como āLoteā, mientras que aquellas con parqueadero y baƱos podrĆan ser
consideradas como locales comerciales. Se decidió crear una nueva
categorĆa denominada ārareā para analizar si estos casos atĆpicos
podrĆan tener un impacto significativo en el anĆ”lisis de los datos.
Podemos concluir que los valores clasificados como ārareā representan solo el 7,9% del total de los datos, lo que indica que no tienen un impacto significativo que pueda sesgar el anĆ”lisis. Por lo tanto, estos valores no serĆ”n tenidos en cuenta en el anĆ”lisis estadĆstico.
Tambien podemos afirmar que los apartamentos representan el tipo
de vivienda mÔs ofertado, con un 61% de la participación en el mercado.
Este hallazgo proporciona a la compaƱĆa B&C una clara dirección para
enfocar su estrategia de mercado y aprovechar las oportunidades de
crecimiento en el segmento de viviendas tipo casa, que representa el
38.1% del mercado.
Al observar los precios promedio por tipo de vivienda en diferentes zonas, podemos identificar patrones interesantes:
Zona con Mayor Demanda de Apartamentos: La Zona Oeste tiene el precio promedio mĆ”s alto para apartamentos, lo que sugiere una alta demanda en esta Ć”rea. Esto podrĆa deberse a factores como la ubicación, la infraestructura cercana o la exclusividad de la zona.
Variación de Precios entre Tipos de Vivienda: En general, los apartamentos tienden a tener precios promedio mĆ”s bajos que las casas en todas las zonas. Esto puede indicar que las casas son percibidas como propiedades mĆ”s exclusivas o tienen caracterĆsticas adicionales que las hacen mĆ”s costosas.
Oportunidades de Mercado: A pesar de que los
apartamentos son mƔs comunes, las casas tienen precios promedio mƔs
altos en la mayorĆa de las zonas. Esto sugiere que podrĆa haber
oportunidades de mercado para la compaƱĆa B&C en el segmento de
viviendas tipo casa, especialmente en Ɣreas donde los precios promedio
son mƔs altos, ejemplo la Zona Sur de Cali
La concentración de datos en Ôreas pequeñas y con costos bajos
podrĆa reflejar una demanda limitada en esa Ć”rea para propiedades mĆ”s
grandes o costosas. Esto puede deberse a factores como la ubicación, la
infraestructura disponible, o las caracterĆsticas socioeconómicas de la
población local.
BasÔndonos en la información de los cuartiles, podemos inferir lo siguiente:
Piso: El 25% mĆ”s bajo de las viviendas no tiene ningĆŗn piso, lo que indica que son propiedades de un solo nivel o terrenos sin construccione (Lotes) El 75% de las viviendas tienen hasta 4 pisos, lo que sugiere una mayorĆa de propiedades de pocos niveles.
Estrato: El estrato de las viviendas varĆa desde 3 hasta 6, con la mayorĆa concentrada entre 4 y 5, segĆŗn el 25% y el 75% de los datos, respectivamente. Esto sugiere que la mayorĆa de las viviendas se encuentran en estratos medios o medios-altos.
Parqueadero, BaƱos y Habitaciones: La mayorĆa de las viviendas tienen al menos un parqueadero, dos baƱos y tres habitaciones, segĆŗn los cuartiles. Esto indica que las viviendas en general tienden a tener estas caracterĆsticas mĆnimas, pero pueden variar en nĆŗmero segĆŗn el tamaƱo y tipo de propiedad.
CaracterĆsticas Inusuales de las Propiedades:
Valores outliers, como el número de habitaciones, baños, pisos, etc.,
pueden indicar propiedades con caracterĆsticas inusuales o excepcionales
en comparación con el resto de las propiedades. Por ejemplo, una
propiedad con un nĆŗmero excepcionalmente alto de baƱos podrĆa ser una
propiedad comercial convertida en vivienda, un numero alto de
parqueaderos podria ser un lote de uso de parqueadero.
El histograma del precio de la vivienda muestra una concentración de barras hacia la derecha y la media se encuentra a la derecha de la mediana, podemos concluir que la distribución del precio de la vivienda exhibe una asimetrĆa positiva, tambiĆ©n conocida como sesgo positivo o distribución sesgada hacia la derecha. Esto indica que hay mĆ”s viviendas con precios relativamente altos en comparación con las viviendas con precios relativamente bajos en el conjunto de datos.
AnƔlisis Detallado de Propiedades de Alta Gama: Dado que hay mƔs viviendas con precios relativamente altos, B&C puede enfocarse en realizar un anƔlisis detallado de propiedades de alta gama para identificar oportunidades de ventas y captar a clientes potenciales interesados en este segmento de mercado.
Segmentación de Mercado: AdemĆ”s de enfocarse en propiedades de alta gama, B&C podrĆa considerar la segmentación del mercado en función de las necesidades y preferencias especĆficas de diferentes grupos de clientes. Esto podrĆa incluir segmentos como compradores de primera vivienda, inversores, compradores extranjeros, entre otros, y desarrollar estrategias especĆficas para cada uno.
Desarrollo de Estrategias de Marketing EspecĆficas: B&C puede desarrollar estrategias de marketing especĆficas dirigidas a compradores potenciales que buscan propiedades de precio mĆ”s alto. Esto puede incluir la promoción de caracterĆsticas de lujo, servicios exclusivos y experiencias personalizadas para este segmento de mercado.
Diversificación de Portafolio: Considerando la presencia de valores atĆpicos con precios mĆ”s altos, B&C puede diversificar su portafolio de propiedades para incluir una variedad de opciones que satisfagan las necesidades y preferencias de diferentes segmentos de mercado, incluyendo propiedades de lujo.
Ofertas Especiales y Negociación Personalizada: B&C puede ofrecer incentivos especiales, como descuentos o paquetes adicionales, para propiedades de precio mÔs alto como una estrategia para atraer a compradores potenciales y cerrar negociaciones exitosas. AdemÔs, la negociación personalizada puede ser una herramienta efectiva para cerrar tratos con clientes interesados en propiedades de alta gama.
Impacto en la estrategia de precios: La presencia de valores atipicos el los precios de las viviendas puede influir en la estrategia de fijación de precios de la compaƱia B&C. Si estos valores son consistentes y representan una parte significativa del mercado, B&C puede considerar ajustar su estrategia para adaptarse a estos segmentos de mercado especĆficos.
Valor percibido: La presencia de outliers en los precios puede afectar la percepción del valor de las viviendas en general. Los compradores pueden interpretar la existencia de propiedades extremadamente caras como indicadores de la calidad o prestigio del Ôrea, lo que puede influir en sus decisiones de compra y negociación.
Al implementar estas sugerencias, B&C puede
aprovechar las oportunidades presentadas por el sesgo positivo en la
distribución de precios de la vivienda y maximizar su éxito en el
mercado inmobiliario.
# Importar Librerias
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
## Warning in fun(libname, pkgname): couldn't connect to display ":0"
## system might not have X11 capabilities; in case of errors when using dfSummary(), set st_options(use.x11 = FALSE)
## 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
library(dplyr)
library(naniar)
library(ggplot2)
library(leaflet)
library(tidyr)
# Importar Data
data(vivienda_faltantes)
# Explora el contenido de "vivienda_faltantes"
str(vivienda_faltantes)
## 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>
##### EDA ######
# Inspeccionar si "Vivienda Faltantes" tiene datos missing
# Conteo de valores NA por variable
DataNA <- vivienda_faltantes %>%
summarise_all(~sum(is.na(.))) %>%
gather(key = "variable", value = "n_missings")
DataNA
## # A tibble: 13 Ć 2
## variable n_missings
## <chr> <int>
## 1 id 3
## 2 zona 3
## 3 piso 2641
## 4 estrato 3
## 5 preciom 2
## 6 areaconst 3
## 7 parquea 1606
## 8 banios 3
## 9 habitac 3
## 10 tipo 3
## 11 barrio 3
## 12 longitud 3
## 13 latitud 3
# Graficar datos faltantes
gg_miss_var(vivienda_faltantes)
# Reemplazar NA con 0 en las columnas 'parquea' y 'piso'
vivienda_faltantes$parquea[is.na(vivienda_faltantes$parquea)] <- 0
vivienda_faltantes$piso[is.na(vivienda_faltantes$piso)] <- 0
# Eliminar filas con NA en algĆŗn lugar del conjunto de datos
datosSINA <- na.omit(vivienda_faltantes)
# Conteo de valores NA por variable
df <- datosSINA %>%
summarise_all(~sum(is.na(.))) %>%
gather(key = "variable", value = "n_missings")
df
## # A tibble: 13 Ć 2
## variable n_missings
## <chr> <int>
## 1 id 0
## 2 zona 0
## 3 piso 0
## 4 estrato 0
## 5 preciom 0
## 6 areaconst 0
## 7 parquea 0
## 8 banios 0
## 9 habitac 0
## 10 tipo 0
## 11 barrio 0
## 12 longitud 0
## 13 latitud 0
# Clasificar como "lote" cuando banios, piso, habitac son igual a cero
datosSINA $tipo[datosSINA$habitac == 0 ] <- "rare"
datosSINA
## # A tibble: 8,327 Ć 13
## id zona piso estrato preciom areaconst parquea banios habitac tipo
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 8312 Zona Oeste 4 6 1300 318 2 4 2 Aparā¦
## 2 8311 Zona Oeste 1 6 480 300 1 4 4 Casa
## 3 8307 Zona Oeste 0 5 1200 800 4 7 5 Casa
## 4 8296 Zona Sur 2 3 220 150 1 2 4 Casa
## 5 8297 Zona Oeste 0 5 330 112 2 4 3 Casa
## 6 8298 Zona Sur 0 5 1350 390 8 10 10 Casa
## 7 8299 Zona Sur 2 6 305 125 2 3 3 Aparā¦
## 8 8300 Zona Oeste 0 5 480 280 4 4 4 Aparā¦
## 9 8286 Zona Sur 0 5 275 74 1 2 3 Aparā¦
## 10 8287 Zona Sur 2 5 285 120 2 4 3 Aparā¦
## # ā¹ 8,317 more rows
## # ā¹ 3 more variables: barrio <chr>, longitud <dbl>, latitud <dbl>
# Extraer variables numƩricas
variables_numericas <- datosSINA %>%
select_if(is.numeric)
# Seleccionar columnas de tipo character
columnas_character <- datosSINA %>%
select_if(is.character)
# Verificar las variables extraĆdas
str(variables_numericas)
## spc_tbl_ [8,327 Ć 10] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ id : num [1:8327] 8312 8311 8307 8296 8297 ...
## $ piso : num [1:8327] 4 1 0 2 0 0 2 0 0 2 ...
## $ estrato : num [1:8327] 6 6 5 3 5 5 6 5 5 5 ...
## $ 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 ...
## $ longitud : num [1:8327] -76576 -76571 -76568 -76565 -76565 ...
## $ latitud : num [1:8327] 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>
## - attr(*, "na.action")= 'omit' Named int [1:3] 8320 8321 8322
## ..- attr(*, "names")= chr [1:3] "8320" "8321" "8322"
str(columnas_character)
## spc_tbl_ [8,327 Ć 3] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ zona : chr [1:8327] "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
## $ tipo : chr [1:8327] "Apartamento" "Casa" "Casa" "Casa" ...
## $ barrio: chr [1:8327] "arboleda" "normandĆa" "miraflores" "el guabal" ...
## - 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"
#### Analisis de variables Categoricas ####
# Mostrar los valores Ćŗnicos de tipo de casa
valores_unicos_tipo_casa <- unique(datosSINA$tipo)
# Contar la frecuencia de cada tipo de casa
frecuencia_tipo_casa <- table(datosSINA$tipo)
# Crear el grƔfico de barras
barplot(frecuencia_tipo_casa,
main = "Frecuencia de Tipo de Casa",
xlab = "Tipo de Casa",
ylab = "Frecuencia",
col = "lightblue",
border = "black",
las = 2) # Orientación de las etiquetas del eje x
# Convertir todos los valores de la columna "tipo" a minĆŗsculas
datosSINA$tipo <- tolower(datosSINA$tipo)
# Reemplazar los valores "casa" con "Casa"
datosSINA$tipo[datosSINA$tipo == "casa"] <- "casa"
# Reemplazar los valores "apto" con "Apartamento"
datosSINA$tipo[datosSINA$tipo == "apto"] <- "apartamento"
# Mostrar los valores Ćŗnicos
valores_unicos_tipo_casa <- unique(datosSINA$tipo)
valores_unicos_tipo_casa
## [1] "apartamento" "casa" "rare"
# Contar la frecuencia de cada tipo de casa
frecuencia_tipo_casa <- table(datosSINA$tipo)
# Crear el grƔfico de barras con la frecuencia de cada tipo de casa
barplot(frecuencia_tipo_casa,
main = "Frecuencia de Tipo de vivienda",
xlab = "Tipo de vivienda",
ylab = "Frecuencia",
col = "lightblue",
border = "black",
las = 2) # Orientación de las etiquetas del eje x
# Agregar el valor de cada barra
text(x = barplot(frecuencia_tipo_casa),
y = frecuencia_tipo_casa + 0.5,
labels = frecuencia_tipo_casa,
pos = 1,
col = "black")
#### Analsis varibles numericas continuas
# Calcular precio promedio por zona
precio_promedio_por_zona <- datosSINA %>%
group_by(zona) %>%
summarise(precio_promedio = mean(preciom))
# Crear el grƔfico de barras y almacenar las coordenadas x de las barras
coordenadas_x <- barplot(precio_promedio_por_zona$precio_promedio,
names.arg = precio_promedio_por_zona$zona,
main = "Precio Promedio por Zona",
xlab = "Zona",
ylab = "Precio Promedio",
col = "lightblue",
border = "black",
las = 1) # Orientación de las etiquetas del eje x
# Agregar los valores en las barras
text(x = coordenadas_x,
y = precio_promedio_por_zona$precio_promedio + 0.1,
labels = round(precio_promedio_por_zona$precio_promedio, 2),
pos = 1,
col = "black")
#### Analisis de variables numericas continuas ####
# Calcula la media de las variables numƩricas
media <- sapply(datosSINA[, sapply(datosSINA, is.numeric)], mean)
# Calcula la mediana de las variables numƩricas
mediana <- sapply(datosSINA[, sapply(datosSINA, is.numeric)], median)
# Calcula la desviación estÔndar de las variables numéricas
desviacion_estandar <- sapply(datosSINA[, sapply(datosSINA, is.numeric)], sd)
# Calcula los cuartiles (25%, 50%, 75%) de las variables numƩricas
cuartiles <- apply(datosSINA[, sapply(datosSINA, is.numeric)], 2, quantile)
# Resultados
media
## id piso estrato preciom areaconst
## 4163.990873 2.577279 4.634322 434.253152 174.987601
## parquea banios habitac longitud latitud
## 1.482527 3.112045 3.605140 -21845.127963 970.369902
mediana
## id piso estrato preciom areaconst parquea banios
## 4164.00000 2.00000 5.00000 330.00000 123.00000 1.00000 3.00000
## habitac longitud latitud
## 3.00000 -76.53931 3.44952
desviacion_estandar
## id piso estrato preciom areaconst parquea
## 2403.926404 2.784260 1.029327 329.033478 142.949848 1.243441
## banios habitac longitud latitud
## 1.428345 1.459095 34503.896690 1539.156058
cuartiles
## id piso estrato preciom areaconst parquea banios habitac longitud
## 0% 1.0 0 3 58 30 0 0 0 -76576.00000
## 25% 2082.5 0 4 220 80 1 2 3 -76506.00000
## 50% 4164.0 2 5 330 123 1 3 3 -76.53931
## 75% 6245.5 4 5 540 229 2 4 4 -76.52238
## 100% 8319.0 12 6 1999 1745 10 10 10 -76.46438
## latitud
## 0% 3.333080
## 25% 3.390445
## 50% 3.449520
## 75% 3367.000000
## 100% 3497.000000
# Seleccionar las variables de interƩs
variables_interes <- datosSINA[, c("banios", "habitac", "estrato", "piso", "parquea")]
# Crear el grƔfico de box plot
boxplot(variables_interes,
main = "Diagrama de Caja de Variables",
xlab = "Variables",
ylab = "Valores",
col = c("lightblue", "lightgreen", "lightyellow", "lightpink", "purple")) # Colores de las cajas
# Histograma del precio de la vivienda
hist(datosSINA$preciom, main = "Histograma del Precio de la Vivienda", xlab = "Precio de la Vivienda", ylab = "Frecuencia", col = "lightblue", border = "black")
# AƱadir una lĆnea vertical para la media
abline(v = mean(datosSINA$preciom), col = "red", lwd = 2)
# AƱadir una lĆnea vertical para la mediana
abline(v = median(datosSINA$preciom), col = "blue", lwd = 2)
# Leyenda
legend("topright", legend = c("Histograma", "Media", "Mediana"), fill = c("lightblue", "red", "blue"), lwd = c(NA, 2, 2))
## Aplicar la funcion Log para ver si mejora la distribucion
# Aplicar la función logarĆtmica al precio de la vivienda
log_precio <- log(datosSINA$preciom)
# Histograma del logaritmo del precio de la vivienda
hist(log_precio, main = "Histograma del Logaritmo del Precio de la Vivienda", xlab = "Logaritmo del Precio de la Vivienda")
# Calcular la media y la mediana del logaritmo del precio de la vivienda
media_log <- mean(log_precio)
mediana_log <- median(log_precio)
# AƱadir una lĆnea vertical para la media (rojo)
abline(v = media_log, col = "red", lwd = 2)
# AƱadir una lĆnea vertical para la mediana (azul)
abline(v = mediana_log, col = "blue", lwd = 2)
# Histograma del precio de la vivienda
hist(datosSINA$areaconst, main = "Histograma de Area construida", xlab = "Area Construida", ylab = "Frecuencia", col = "lightblue", border = "black")
# AƱadir una lĆnea vertical para la media
abline(v = mean(datosSINA$areaconst), col = "red", lwd = 2)
# AƱadir una lĆnea vertical para la mediana
abline(v = median(datosSINA$areaconst), col = "blue", lwd = 2)
# Leyenda
legend("topright", legend = c("Histograma", "Media", "Mediana"), fill = c("lightblue", "red", "blue"), lwd = c(NA, 2, 2))
# Aplicar la función logarĆtmica al area
log_area<- log(datosSINA$areaconst)
# Histograma del logaritmo del area
hist(log_area, main = "Histograma del Logaritmo al area", xlab = "Logaritmo del area vivienda")
# Calcular la media y la mediana del logaritmo al area vivienda
media_log_area <- mean(log_area)
mediana_log_area <- median(log_area)
# AƱadir una lĆnea vertical para la media (rojo)
abline(v = media_log_area, col = "red", lwd = 2)
# AƱadir una lĆnea vertical para la mediana (azul)
abline(v = mediana_log_area, col = "blue", lwd = 2)
# Crear el box plot
boxplot(datosSINA$preciom ~ datosSINA$tipo,
main = "Box Plot del Precio de la Vivienda por Tipo de Casa",
xlab = "Tipo de Casa",
ylab = "Precio de la Vivienda",
col = "lightblue",
border = "black")
# Calcular el precio promedio por tipo de casa o apartamento y por zonas
precio_promedio_por_tipo_y_zona <- datosSINA %>%
group_by(tipo, zona) %>%
summarise(precio_promedio = mean(preciom))
## `summarise()` has grouped output by 'tipo'. You can override using the
## `.groups` argument.
# Visualizar el resultado
precio_promedio_por_tipo_y_zona
## # A tibble: 15 Ć 3
## # Groups: tipo [3]
## tipo zona precio_promedio
## <chr> <chr> <dbl>
## 1 apartamento Zona Centro 187.
## 2 apartamento Zona Norte 284.
## 3 apartamento Zona Oeste 670.
## 4 apartamento Zona Oriente 150.
## 5 apartamento Zona Sur 297.
## 6 casa Zona Centro 337.
## 7 casa Zona Norte 444.
## 8 casa Zona Oeste 738.
## 9 casa Zona Oriente 242.
## 10 casa Zona Sur 612.
## 11 rare Zona Centro 397.
## 12 rare Zona Norte 471
## 13 rare Zona Oeste 642.
## 14 rare Zona Oriente 406.
## 15 rare Zona Sur 507.
# Filtrar los datos para incluir solo "casa" y "apartamento"
precio_promedio_por_tipo_y_zona_filtrado <- precio_promedio_por_tipo_y_zona %>%
filter(tipo %in% c("casa", "apartamento"))
# Crear el grƔfico de barras agrupado por zona y tipo de vivienda (casa y apartamento)
ggplot(precio_promedio_por_tipo_y_zona_filtrado, aes(x = zona, y = precio_promedio, fill = tipo)) +
geom_bar(stat = "identity", position = "dodge", color = "blue") +
labs(title = "Precio Promedio por Zona y Tipo de Vivienda",
x = "Zona",
y = "Precio Promedio",
fill = "Tipo de Vivienda") +
theme_minimal()
# Crear el grƔfico de barras agrupado por zona y tipo de vivienda (casa y apartamento)
ggplot(precio_promedio_por_tipo_y_zona_filtrado, aes(x = zona, y = precio_promedio, fill = tipo)) +
geom_bar(stat = "identity", position = "dodge", color = "blue") +
geom_text(aes(label = round(precio_promedio, 2)),
position = position_dodge(width = 0.9),
vjust = -0.5,
color = "black",
size = 3) +
labs(title = "Precio Promedio por Zona y Tipo de Vivienda",
x = "Zona",
y = "Precio Promedio",
fill = "Tipo de Vivienda") +
theme_minimal()