Informe EstadĆ­stico para la compania B&C sobre el Mercado de Bienes RaĆ­ces en Cali, Colombia.


Frecuencia


1. Introduccion

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.

2. Objetivos

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.

3. Metodos

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:

3.1 Limpieza de datos:

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.

3.2 AnÔlisis de Distribución y Variabilidad del Precio de las Viviendas:

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.

3.3 AnÔlisis de Composición y Características de las Viviendas:

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.

4. Resultados y discusiones

4.1 Hallazgos:

  • 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.

    Frecuencia


    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.

Frecuencia


  • Al observar los precios promedio por tipo de vivienda en diferentes zonas, podemos identificar patrones interesantes:

    1. 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.

    2. 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.

    3. 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

      Frecuencia


  • 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.

Frecuencia


  • La presencia de outliers o valores atipicos sugiere una alta variabilidad en los precios de las viviendas, lo que puede ser una caracterĆ­stica comĆŗn en el mercado inmobiliario. La presencia de estos valores pueden reflejar la existencia de segmentos de mercado especĆ­ficos con propiedades de alto valor, como propiedades de lujo, que estĆ”n influenciando significativamente los precios medios. Tambien pueden representar propiedades con caracterĆ­sticas Ćŗnicas o excepcionales que las hacen significativamente mĆ”s caras que la mayorĆ­a de las propiedades en su categorĆ­a. Esto podrĆ­a incluir ubicaciones privilegiadas, caracterĆ­sticas arquitectónicas Ćŗnicas, o propiedades con amplias comodidades y servicios.

Frecuencia


  • 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.

      Frecuencia


  • 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.


Frecuencia


  • Al igual que el Histograma de Precio de Viviendas, la grafica muestra una asimetria positiva, este patrón sugiere que hay mĆ”s viviendas con Ć”reas relativamente grandes en comparación con las viviendas con Ć”reas mĆ”s pequeƱas en el conjunto de datos. En otras palabras, la mayorĆ­a de las viviendas tienden a tener Ć”reas mĆ”s grandes, pero hay algunas viviendas con Ć”reas excepcionalmente grandes que tiran la media hacia la derecha.

5. Conclusiones

  • 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.



6. Anexos

Codigo R para el Analisis Exploratorio

6.1 Limpieza de datos
# 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"
6.2 Analisis de variables Numericas y categoricas
#### 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()