Introducción

Señores directivos B&C inmobiliaria, el siguiente informe presenta un analisis estadístico sobre el mercado de bienes raíces en diferentes zonas de Cali; ciudad donde ha crecido significativamente el sector inmobiliario y donde ustedes han funcionado desde hace 10 años.

Las cifras hablan por sí solas: en 2022, las ventas de vivienda en Cali llegarona a 6.700 millones y en 2023 a 6.100 mil millones de pesos colombianos; el panorama para este 2024 es esperanzador por lo que esperamos se le siga apostando a la ciudad, explotando positivamente el mercado de bienes raíces, generando un desarrollo dinámico en la economía regional.

Los siguientes datos servirán para tomar decisiones relevantes sobre su negocio y seguir expandiéndolo por muchos años más. Aquí, identificarán las tendencias y patrones en las bases de datos relacionadas a precios, tipos, zonas y demás características de la vivienda en la capital del Valle del Cauca.


Objetivos

El objetivo principal de este informe es indentificar y analizar las tendencias y patrones en los datos de las ventas de viviendas en cali, para la toma de decisiones en la inmobiliaria B&C.

Objetivos Específicos

-Comparar los precios de las viviendas en las zonas de Cali, para crear estrategias de mercado en la inmobiliaria B&C.

-Identificar los tipos de vivienda en diferentes sectores de la ciudad para entender las preferencias de la demanda.

-Analizar las particularidades de las viviendas ofertadas en Cali para detectar oportunidades de inversión y negocio.


Métodos

Para limpiar, preparar la base de datos y posterirormeste realizar el análisis estadístico descriptivo y dar respuesta a los interrogantes planteados. Se utilizó el software estadístico R y la IDE R studio para cargar la data llamada “viviendas faltantes”.En esta base conenia 8.330 registros y 13 variables. Se realizo estudio de los datos faltantes y se decidio eliminarlos con datos faltantes, pues no se poseia informacion suficiente para realizar una imputación de las variables, principalemnte parqueaderos y pisos.Con el fin de tener una base completa y realizar un analisis con las variables completas. El código para imputación de datos fue el siguiente:


datosSINA <- na.omit(vivienda_faltantes)  # elimina todos los valores con  NA
VIM::aggr(datosSINA, cex.axis = 0.4, cex.lab= 0.8)
cat("dimensión dataSINA : ", dim(datosSINA))

summary(vivienda_faltantes)


Resultados

Precios de las viviendas en las diferentes zonas de Cali

En este punto se presentarán los gráficos donde se observará más a detalle el precio de las viviendas en las diferentes zonas de Cali, los tipos de viviendas más ofertadas y las características más relevantes de estas.

ggplot(datosSINA, aes(x = zona, y = preciom)) +
  stat_boxplot(geom = "errorbar", width = 0.2) +
  geom_boxplot(fill = "#4271AE", colour = "#1F3552", alpha = 0.9, outlier.colour = "red") +
  scale_y_continuous(name = "Precio en millones de pesos") +  # Etiqueta del eje y
  scale_x_discrete(name = "Zonas de Cali") +  # Etiqueta del eje x
  ggtitle("Gráfica 1. Precios de viviendas por zonas") +  # Título del gráfico
  theme(axis.line = element_line(colour = "black", size = 0.25),  # Personalización del tema
        plot.title = element_text(hjust = 0.5))  # Centrar el título del gráfico

En el gráfico anterior, se evidencia que las zonas Oeste, Sur y Norte son las que tienen precios más dispersos en millones de pesos; pues las zonas Centro y Oriente se mantienten en rangos similares y son de los más bajos, por ejemplo, la zona Oeste tiene viviendas desde 98 millones de pesos hasta 1.999 millones de pesos; mientras que la zona Centro maneja un promedio más estable de 297 millones de pesos (como se observa en la grafica 1 y en la tabla 2).

library(knitr)

# Crear la tabla
tabla <- table(datosSINA$zona, datosSINA$estrato)

# Imprimir la tabla de manera más bonita
kable(tabla, caption = "Tabla 1. Estratos por zonas", align = "c")
Tabla 1. Estratos por zonas
3 4 5 6
Zona Centro 33 3 0 0
Zona Norte 141 184 483 79
Zona Oeste 19 51 181 505
Zona Oriente 94 2 1 0
Zona Sur 147 973 1195 721

En esta primera tabla se detecta que la zona Sur es la que comprende mayor oferta de vivienda en los estratos 4,5 y 6 ; la zona Centro sería, por el contrario, la que menos contiene. Por otra parte el estrato 5 en todas las zonas prevalece con el mayor número de viviendas ofertadas (1.860 viviendas); y el estrato 3 con 432 viviendas, se convierten en el estrato con menor oferta.

# Cargar la librería kableExtra
library(kableExtra)

# Calcular los resúmenes de precios
precio <- datosSINA %>%
  group_by(zona) %>%
  summarise(Maximo_Precio = max(preciom),Minimo_Precio = min(preciom),Promedio = mean(preciom),Mediana = median(preciom),
            DesviacionS. = sd(preciom), Max = max(preciom))

# Crear la tabla con kable y aplicar estilos con kable_styling
precio %>%
  kable(align = 'c', caption = "Tabla 2.Precios de viviendas por zonas") %>%
  kable_styling(latex_options = c("striped"), full_width = F) %>%
  row_spec(c(0), bold = T, color = "black")
Tabla 2.Precios de viviendas por zonas
zona Maximo_Precio Minimo_Precio Promedio Mediana DesviacionS. Max
Zona Centro 700 120 297.8889 275 122.1626 700
Zona Norte 1600 75 371.3348 320 224.3880 1600
Zona Oeste 1999 98 685.9114 580 390.5231 1999
Zona Oriente 700 58 248.8351 237 112.7991 700
Zona Sur 1900 78 434.5530 325 313.1426 1900

En la tabla anterior se detecta que la zona más costosa es la oeste, con un promedio de 685 millones de pesos por vivienda. Por un precio máximo de 700 millones de pesos, las zonas Centro y Oriente se convierten en los sectores con viviendas más económicas, no solo por su precio si no por los estratos que comprenden, pues estas dos predominan en el estrato tres (segùn la tabla 1).


Tipo de viviendas más ofertadas de Cali por zonas

t1=table(datosSINA$zona, datosSINA$tipo)

t1=t(t1)




# Definir los colores
colores <- c("#0d3b66", "#f4d35e")  # Colores para cada tipo de vivienda

# Crear el gráfico de barras con colores personalizados
barplot(t1, main = "Gráfica 2. Tipo de Viviendas por zonas",
        xlab = "Zonas", ylab = "Cantidad", col = c("#0d3b66", "#f4d35e"), las=1, ylim = c(0,3500))



# Agregar leyenda centrada
leyenda_etiquetas <- c("Apartamento", "Casa")
 legend("topright", legend = leyenda_etiquetas, fill = colores, title = "Tipos de Viviendas",
        x = "center", y = "center")

# Agregar rejilla al grafico


grid()


En el gráfico 2 y en la tabla 3 se puede observar que en toda la ciudad de Cali, independiente de la zona, el tipo de vivienda que más se ofrece son los apartamentos. En la zona Centro, con un total de 36 viviendas, las casas predominan por encima de los 4 apartamentos disponibles. En la zona norte el numero de apartamentos 633, supera más de la mitad de la cantidad de casas ofertadas, 254. En la zona Oeste con un total de 656, los apartamentos son ocho veces mayor a la cantidad de casas en este sector. La zona Oriente es otra de las más bajas en cantidad de viviendas, pues contiene sólo 17 apartamentos y 80 casas, para un total de 97 viviendas. Por último, la zona Sur lidera los valores presentados, ya que contiene 3.036 viviendas ofertadas distribuidas en 1.860 apartamentos y 1.176 casas, detectando también el tipo de vivienda con mayor disponibilidad.

library(knitr)

# Crear la tabla
tabla <- table(datosSINA$zona, datosSINA$tipo)

# Imprimir la tabla de manera más bonita
kable(tabla, caption = "Tabla 3. Tipos de viviendas por zonas", align = "c")
Tabla 3. Tipos de viviendas por zonas
Apartamento Casa
Zona Centro 4 32
Zona Norte 633 254
Zona Oeste 672 84
Zona Oriente 17 80
Zona Sur 1860 1176


Características

t3 <- table(datosSINA$banios, datosSINA$tipo)
t3 <- t(t3)



# Definir los colores
colores <- c("#0d3b66", "#f4d35e")  # Colores para cada tipo de vivienda

# Crear el gráfico de barras con colores personalizados
barplot(t3, main = "Gráfico 3. Cantidad de baños por tipo de viviendas",
        xlab = "Baños", ylab = "Cantidad", col = colores, ylim = c(0,2000))


# Agregar leyenda centrada
leyenda_etiquetas <- c("Apartamento", "Casa")
legend("topright", legend = leyenda_etiquetas, fill = colores, title = "Tipos de Viviendas")

# Agregar rejilla al grafico


grid()

En esta tabla y gráfico se evidencia que, los apartamentos, por ganar en mayoría, son los que más cuentan con baños. Sin embargo, en casas y apartamentos, predominan los inmuebles que tienen solo 2 baños, para un total de 1.664 viviendas con estas características. Solo 3 apartamentos y 4 casas del total no tienen ningún baño, y solo una casa cuenta con diez baños y nueve casas con nueve baños. La cantidad de baños que más predominan, además de la ya mencionada, son aquellos inmuebles que tienen 3, 4 y 5 baños.

library(knitr)

# Crear la tabla
tabla <- table(datosSINA$banios, datosSINA$tipo)

# Imprimir la tabla de manera más bonita
kable(tabla, caption = "Tabla 4. Cantidad de baños por tipo de viviendas", align = "c")
Tabla 4. Cantidad de baños por tipo de viviendas
Apartamento Casa
0 3 4
1 115 19
2 1526 138
3 854 402
4 437 472
5 215 345
6 30 158
7 6 56
8 0 22
9 0 9
10 0 1
t6 <- table(datosSINA$habitac, datosSINA$tipo)
t6 <- t(t6)



# Definir los colores
colores <- c("#0d3b66", "#f4d35e")  # Colores para cada tipo de vivienda

# Crear el gráfico de barras con colores personalizados
barplot(t6, main = "Gráfica 4. Cantidad de habitaciones por tipo de viviendas",
        xlab = "Habitaciònes", ylab = "Cantidad", col = colores)


# Agregar leyenda centrada
leyenda_etiquetas <- c("Apartamento", "Casa")
legend("topright", legend = leyenda_etiquetas, fill = colores, title = "Tipos de Viviendas")

# Agregar rejilla al grafico


grid()

Dentro de las viviendas ofertadas, predominan aquellas que tienen tres habitaciones, tanto en casas como en apartamentos. Solo un apartamento cuenta con siete habitaciones, mientras que son 25 las casas que tiene diez habitaciones. Las otras cantidades de habitaciones que predominan en ambos tipos de inmuebles son 2 y 4 cuartos.

library(knitr)

# Crear la tabla
tabla <- table(datosSINA$habitac, datosSINA$tipo)

# Imprimir la tabla de manera más bonita
kable(tabla, caption = "Tabla 5. Cantidad de habitaciones por tipo de viviendas", align = "c")
Tabla 5. Cantidad de habitaciones por tipo de viviendas
Apartamento Casa
0 9 8
1 32 3
2 455 22
3 2121 340
4 525 567
5 39 333
6 4 159
7 1 80
8 0 45
9 0 44
10 0 25
t7 <- table(datosSINA$parquea, datosSINA$tipo)
t7 <- t(t7)



# Definir los colores
colores <- c("#0d3b66", "#f4d35e")  # Colores para cada tipo de vivienda

# Crear el gráfico de barras con colores personalizados
barplot(t7, main = "Gráfico 5. Cantidad de Parqueaderos por tipo de viviendas",
        xlab = "Parqueaderos", ylab = "Cantidad", col = colores)


# Agregar leyenda centrada
leyenda_etiquetas <- c("Apartamento", "Casa")
legend("topright", legend = leyenda_etiquetas, fill = colores, title = "Tipos de Viviendas")

# Agregar rejilla al grafico


grid()

La mayoría de inmuebles, 1.749 apartamentos y 534 casas, se relacionan con que todos tienen de a un solo parqueadero. Seguidos de 1.199 apartamentos y 590 casas con dos parqueaderos. Son solo apenas 4 casas las que tienen de a diez parqueaderos. De estos resultados también se evidencia que son más las casas las que cuentan con parqueaderos.

library(knitr)

# Crear la tabla
tabla3 <- table(datosSINA$parquea, datosSINA$tipo)

# Imprimir la tabla de manera más bonita
kable(tabla3,format = "simple", caption = "Tabla 6.  Cantidad de Parqueaderos por tipo de viviendas", align = "c")
Tabla 6. Cantidad de Parqueaderos por tipo de viviendas
Apartamento Casa
1749 534
1199 590
172 173
60 210
3 43
2 46
1 14
0 10
0 2
0 4

Discusión

De los resultados se deduce que las zonas Sur y Oeste son, no solo las que viviendas más costosas tienen, sino donde más prevalecen inmuebles disponibles; la zona norte es otra que se les asemeja por sus características, ubicación y precios. Gracias a los datos recolectados de estratos y valor, se entiende que lo más apetecible en el mercado inmobilirario de la ciudad de Cali son los apartamentos; aunque hay gran número de casas ofertadas, no se iguala al porcentaje de apartamentos.

Otra de las características que se destacan es el grán cambio que ha tenido el sector inmobiliario en la capital del Valle, pues ya son más los inmuebles pequeños apetecidos que los grandes para muchas personas. Es decir, dada la cantidad de baños, habitaciones y parqueaderos, los màs atractivos y los que màs abundan dentro de estas ofertas, son los que contemplan menor cantidad de estos.

Por último, y no menos importante, se detecta una restricción en estos registros, pues hay una grán ausencia de datos en los estratos 1 y 2 que aunque pudieran no ser el público de la inmbibliaria, es importante conocerlos para la toma de decisiones y balances del sector inmobiliario de la ciudad.

Conclusiones

La base de datos extraída fue un gran insumo para las necesidades de la inmobiliaria B&C, pues brinda las características necesarias para identificar las tendencias y patrones de la oferta de vivienda en Cali. Con esta información se pudo detectar la mejor ruta para que los directivos de esta inmobiliaria tomen las decisiones correctas para expandir su negocio, enfocándose en el nicho de mercado más favorable, los precios más ofertados, las zonas más concurridas y otros servicios que deseen sus clientes.

Conociendo ya los precios, tamaños, distribuciones, estratos y zonas de las viviendas, la imobiliaria B&C puede estructurar un plan de acción mucho más completo y con las estrategias de marketing ideales para captar a su público, expandir su mercado y lograr procesos de ventas exitosos.

Anexos

install.packages("learnr")          # solo una vez
install.packages("devtools")     # solo una vez
devtools::install_github("dgonxalex80/paqueteMETODOS") #descarga paquete paqueteMETODOS
learnr::run_tutorial("Tutorial101", "paqueteMETODOS")  # carga Tutorial101
install.packages("devtools") # solo una vez
devtools::install_github("dgonxalex80/paqueteMETODOS")
library(paqueteMETODOS)
data(vivienda_faltantes)
#######################################################
str(vivienda_faltantes)
colSums(is.na(vivienda_faltantes))
#######################################################

library(naniar)
gg_miss_var(vivienda_faltantes) # grafico de datos faltantes

VIM::aggr(vivienda_faltantes, cex.axis = 0.5, cex.lab= 0.8)  # graficos de datos faltantes

############################################ se limpia la base de datos

datosSINA <- na.omit(vivienda_faltantes)  # elimina todos los valores con  NA
VIM::aggr(datosSINA, cex.axis = 0.4, cex.lab= 0.8)
cat("dimensión dataSINA : ", dim(datosSINA))

summary(vivienda_faltantes)

###  PUNTO 1###########################################grafico de cajas

ggplot(datosSINA, aes(x = zona, y = preciom)) +
  stat_boxplot(geom = "errorbar", width = 0.2) +
  geom_boxplot(fill = "#4271AE", colour = "#1F3552", alpha = 0.9, outlier.colour = "red") +
  scale_y_continuous(name = "Precio en millones de pesos") +  # Etiqueta del eje y
  scale_x_discrete(name = "Zonas de Cali") +  # Etiqueta del eje x
  ggtitle("Precio de las viviendas en las diferentes zonas de Cali") +  # Título del gráfico
  theme(axis.line = element_line(colour = "black", size = 0.25),  # Personalización del tema
        plot.title = element_text(hjust = 0.5))  # Centrar el título del gráfico



###  PUNTO 1###########################################tabla de precios




###  PUNTO 1###########################################tabla de precios zona oeste
# Cargar la librería kableExtra
library(kableExtra)

# Calcular los resúmenes de precios
precio <- datosSINA %>%
  group_by(zona) %>%
  summarise(Maximo_Precio = max(preciom),Minimo_Precio = min(preciom),Promedio = mean(preciom),Mediana = median(preciom),
            DesviacionS. = sd(preciom), Max = max(preciom))

# Crear la tabla con kable y aplicar estilos con kable_styling
precio %>%
  kable(align = 'c', caption = "Tabla de resumen de la zona oeste de cali") %>%
  kable_styling(latex_options = c("striped"), full_width = F) %>%
  row_spec(c(0), bold = T, color = "black")


###  PUNTO 1###########################################tabla de precios


summarytools::descr(datosSINA$preciom)


###  PUNTO 1###########################################tabla de area construida


summarytools::descr(datosSINA$areaconst)

##########PUNTO 2#################################### se organizo los datos porque tenian diferentes nombres

table(is.na(datosSINA))
table(datosSINA$zona)
table(datosSINA$tipo)
table(datosSINA$barrio)

datosSINA$tipo[datosSINA$tipo=="APARTAMENTO"]="Apartamento"
datosSINA$tipo[datosSINA$tipo=="apto"]="Apartamento"
datosSINA$tipo[datosSINA$tipo=="casa"]="Casa"
datosSINA$tipo[datosSINA$tipo=="CASA"]="Casa"

table(datosSINA$zona)
table(datosSINA$tipo)
table(datosSINA$barrio)


######################################### dentro de los datos se hizo una tabla por zonas de los datos


datossur=subset(datosSINA,datosSINA$zona=="Zona Sur")
datosnorte=subset(datosSINA,datosSINA$zona=="Zona Norte")
datoscentro=subset(datosSINA,datosSINA$zona=="Zona Centro")
datosoeste=subset(datosSINA,datosSINA$zona=="Zona Oeste")
datosoriente=subset(datosSINA,datosSINA$zona=="Zona Oriente")



######################################### Se guardo los datos en una tabla para graficar y se traspuso

ggplot(datosSINA, aes(x = zona, y = preciom)) +
  stat_boxplot(geom = "errorbar", width = 0.2) +
  geom_boxplot(fill = "#4271AE", colour = "#1F3552", alpha = 0.9, outlier.colour = "red") +
  scale_y_continuous(name = "Precio en millones de pesos") +  # Etiqueta del eje y
  scale_x_discrete(name = "Zonas de Cali") +  # Etiqueta del eje x
  ggtitle("Precio de las viviendas en las diferentes zonas de Cali") +  # Título del gráfico
  theme(axis.line = element_line(colour = "black", size = 0.25),  # Personalización del tema
        plot.title = element_text(hjust = 0.5))  # Centrar el título del gráfico
















t1=table(datosSINA$zona, datosSINA$tipo)

t1=t(t1)

t1



# Definir los colores
colores <- c("#0d3b66", "#f4d35e")  # Colores para cada tipo de vivienda

# Crear el gráfico de barras con colores personalizados
barplot(t1, main = "Tipo de Viviendas más ofertadas de Cali por Zonas",
        xlab = "Zonas", ylab = "Frecuencia", col = colores, las=1, ylim = c(0,3500))



# Agregar leyenda centrada
leyenda_etiquetas <- c("Apartamento", "Casa")
legend("topright", legend = leyenda_etiquetas, fill = colores, title = "Tipos de Viviendas",
       x = "center", y = "center")

# Agregar rejilla al grafico


grid()

######################################################################## punto 2 grafico de zonas en cali






###########################################################



library(kableExtra)

# Calcular los resúmenes de precios
precio <- datosSINA %>%
  group_by(tipo) %>%
  summarise(Maximo_Precio = max(preciom),Minimo_Precio = min(preciom),Promedio = mean(preciom),Mediana = median(preciom),
            DesviacionS. = sd(preciom), Max = max(preciom))

# Crear la tabla con kable y aplicar estilos con kable_styling
precio %>%
  kable(align = 'c', caption = "Tabla de tipo de viviendas en general") %>%
  kable_styling(latex_options = c("striped"), full_width = F) %>%
  row_spec(c(0), bold = T, color = "black")





#################################Punto 3 caracteristicas as relevantes de la oferta de vivienda en cali


##############grafico de barras parqueaderos
###  PUNTO 1###########################################

t2 <- table(datosSINA$parquea, datosSINA$tipo)
t2 <- t(t2)



# Definir los colores
colores <- c("#0d3b66", "#f4d35e")  # Colores para cada tipo de vivienda

# Crear el gráfico de barras con colores personalizados
barplot(t2, main = "Cantidad de paqrqueaderos en Cali",
        xlab = "Zonas", ylab = "Frecuencia", col = colores)


# Agregar leyenda centrada
leyenda_etiquetas <- c("Apartamento", "Casa")
legend("topright", legend = leyenda_etiquetas, fill = colores, title = "Tipos de Viviendas",
       x = "center", y = "center")

# Agregar rejilla al grafico


grid()

############################################################Tabla de resumen baños

t3 <- table(datosSINA$banios, datosSINA$tipo)
t3 <- t(t3)



# Definir los colores
colores <- c("#0d3b66", "#f4d35e")  # Colores para cada tipo de vivienda

# Crear el gráfico de barras con colores personalizados
barplot(t3, main = "Cantidad de baños en la ciudad de cali",
        xlab = "Zonas", ylab = "Frecuencia", col = colores)


# Agregar leyenda centrada
leyenda_etiquetas <- c("Apartamento", "Casa")
legend("topright", legend = leyenda_etiquetas, fill = colores, title = "Tipos de Viviendas",
       x = "center", y = "center")

# Agregar rejilla al grafico


grid()






############################################################


# Cargar la librería kableExtra
library(kableExtra)

# Calcular los resúmenes de precios
precio <- datosSINA %>%
  group_by(zona) %>%
  summarise(Maximo_Precio = max(banios),Minimo_Precio = min(banios),Promedio = mean(banios),Mediana = median(banios),
            DesviacionS. = sd(banios), Max = max(banios))






# Crear la tabla con kable y aplicar estilos con kable_styling
precio %>%
  kable(align = 'c', caption = "Tabla de resumen de zonas en cali con baños ") %>%
  kable_styling(latex_options = c("striped"), full_width = F) %>%
  row_spec(c(0), bold = T, color = "black")




library(ggplot2)

data(datosSINA)

t2 <- subset(datosSINA, (datosSINA$parquea == "Mujer" & datosSINA$tipo == "4. Veteranos B"))

######################################################################################################



#Elaboración de mapa

#datos1 es mi conjunto de datos limpio

library(leaflet)
df <- data.frame(
  longitud = datosSINA$longitud,
  latitud = datosSINA$latitud,
  preciom = datosSINA$preciom,
  zona = datosSINA$zona
)


# Identificar observaciones sin decimales en la columna "longitud"
sin_decimales <- df$longitud[!grepl("\\.", as.character(df$longitud))]

sin_decimales_divididos <- sin_decimales / 1000

df$longitud[!grepl("\\.", as.character(df$longitud))] <- sin_decimales_divididos


sin_decimales <- df$latitud[!grepl("\\.", as.character(df$latitud))]

sin_decimales_divididos <- sin_decimales / 100

df$latitud[!grepl("\\.", as.character(df$latitud))] <- sin_decimales_divididos


precio_promedio_por_ubicacion <- df %>%
  group_by(longitud, latitud) %>%
  summarise(precio_promedio = mean(preciom, na.rm = TRUE))

mapa <- leaflet(precio_promedio_por_ubicacion) %>%
  addTiles() %>%
  addCircleMarkers(
    ~longitud, ~latitud,
    radius = 1,
    color = "red",
    fill = TRUE,
    fillOpacity = 0.7,
    popup = ~paste("Precio Promedio: $", round(precio_promedio, 2))
  )

mapa

############## grafico cajas zona y area construida 

ggplot(datosSINA, aes(x = zona, y = areaconst)) +
  stat_boxplot(geom = "errorbar", width = 0.2) +
  geom_boxplot(fill = "#4271AE", colour = "#1F3552", alpha = 0.9, outlier.colour = "red") +
  scale_y_continuous(name = "Precio en millones de pesos") +  # Etiqueta del eje y
  scale_x_discrete(name = "Zonas de Cali") +  # Etiqueta del eje x
  ggtitle("Precio de las viviendas en las diferentes zonas de Cali") +  # Título del gráfico
  theme(axis.line = element_line(colour = "black", size = 0.25),  # Personalización del tema
        plot.title = element_text(hjust = 0.5))  # Centrar el título del gráfico


############################

t1=table(datosSINA$zona, datosSINA$tipo)

t1=t(t1)

t1


# Definir los colores
colores <- c("#0d3b66", "#f4d35e")  # Colores para cada tipo de vivienda

# Crear el gráfico de barras con colores personalizados
barplot(t1, main = "Tipo de Viviendas más ofertadas de Cali por Zonas",
        xlab = "Zonas", ylab = "Frecuencia", col = c("#0d3b66", "#f4d35e"), las=1, ylim = c(0,3500))



# Agregar leyenda centrada
leyenda_etiquetas <- c("Apartamento", "Casa")
legend("topright", legend = leyenda_etiquetas, fill = colores, title = "Tipos de Viviendas",
       x = "center", y = "center")

Mapa:

datosSINA1 = subset(datosSINA, datosSINA$latitud<=4)

#Elaboración de mapa

#datos1 es mi conjunto de datos limpio

library(leaflet)
df <- data.frame(
  longitud = datosSINA1$longitud,
  latitud = datosSINA1$latitud,
  preciom = datosSINA1$preciom,
  zona = datosSINA1$zona
)


# Identificar observaciones sin decimales en la columna "longitud"
sin_decimales <- df$longitud[!grepl("\\.", as.character(df$longitud))]

sin_decimales_divididos <- sin_decimales / 1000

df$longitud[!grepl("\\.", as.character(df$longitud))] <- sin_decimales_divididos


sin_decimales <- df$latitud[!grepl("\\.", as.character(df$latitud))]

sin_decimales_divididos <- sin_decimales / 100

df$latitud[!grepl("\\.", as.character(df$latitud))] <- sin_decimales_divididos

library(dplyr)
precio_promedio_por_ubicacion <- df %>%
  group_by(longitud, latitud) %>%
  summarise(precio_promedio = mean(preciom, na.rm = TRUE))
`summarise()` has grouped output by 'longitud'. You can override using the
`.groups` argument.
mapa <- leaflet(precio_promedio_por_ubicacion) %>%
  addTiles() %>%
  addCircleMarkers(
    ~longitud, ~latitud,
    radius = 1,
    color = "red",
    fill = TRUE,
    fillOpacity = 0.7,
    popup = ~paste("Precio Promedio: $", round(precio_promedio, 2))
  )

mapa