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.
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.
-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.
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)
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")
| 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")
| 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).
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")
| Apartamento | Casa | |
|---|---|---|
| Zona Centro | 4 | 32 |
| Zona Norte | 633 | 254 |
| Zona Oeste | 672 | 84 |
| Zona Oriente | 17 | 80 |
| Zona Sur | 1860 | 1176 |
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")
| 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")
| 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")
| Apartamento | Casa |
|---|---|
| 1749 | 534 |
| 1199 | 590 |
| 172 | 173 |
| 60 | 210 |
| 3 | 43 |
| 2 | 46 |
| 1 | 14 |
| 0 | 10 |
| 0 | 2 |
| 0 | 4 |
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.
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.
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