Cargar las librerias necesarias para el ejercicio

require(raster)
require(sp)
require(leaflet)
require(sf)
require(ggplot2)
require(rgdal)

La libreria rgdal presenta errores por la version de Rstudio, sin embargo, se puede reemplazar por otras librerias para que funcione.

Importar los datos

comunas = shapefile ("C:/Users/juand/OneDrive - PUJ Cali/Javeriana/5° semestre/Estadistica aplicada/Datos Geograficos/Comuna.shp")

Visualización

Visualización inicial

plot (comunas) 

tabla=comunas@data #tabla con los datos del shape file

Visualizar unicamente la comuna 2

comuna22 = comunas [22,] #Estoy consultando unicamente la comuna 222
plot (comuna22)

plot (comunas)
plot (comuna22,add=TRUE,col="red") #Aquí señalo la comuna 22 dentro del mapa

Visualizar varias comunas

comuna202122=comunas[comunas$comuna>=20,]
plot(comunas)
plot(comuna202122,col="blue",add=TRUE)

Oferta de vivienda en Cali

Archivo Shape File

Crear un Shape File a partir de un archivo de coordenadas de puntos que estan en un documento de excel

library(readxl)
Datos_Vivienda <- read_excel("C:/Users/juand/OneDrive - PUJ Cali/Javeriana/5° semestre/Estadistica aplicada/Datos Geograficos/Datos_Vivienda.xlsx")

#Crear un archivo de puntos a partir de la base de datos, eliminando los NA para no tener problemas
Datos_Vivienda2=na.omit(Datos_Vivienda)
vivienda_map=SpatialPointsDataFrame(coords = Datos_Vivienda2[,11:12],
                                    data = Datos_Vivienda2,
                                    proj4string =crs(comunas))

plot(vivienda_map)

Filtrar por estratos

En este caso se visualizan unicamente las casas estrato 6

pos_casas=which(vivienda_map@data$Tipo=="Casa"&
                  vivienda_map@data$Estrato==6)

vivienda_casas=vivienda_map[pos_casas,]
plot(vivienda_casas)

Mejorar la estetica del mapa

Aquí estamos viendo todas las casas estrato 6 en Cali, podemos agruparlo así como habiamos hecho con el ejercicio de movilidad, para visualizar los sectores donde hay más concentración de casas estrato 6

leaflet() %>% addTiles() %>% 
  addCircleMarkers(lng = vivienda_casas$cordenada_longitud,
                   lat =vivienda_casas$Cordenada_latitud ,
                   radius = 0.1)
leaflet() %>% addTiles() %>% 
  addCircleMarkers(lng = vivienda_casas$cordenada_longitud,
                   lat =vivienda_casas$Cordenada_latitud ,
                   radius = 0.1,clusterOptions = markerClusterOptions() )

Mapa de calor

Con los mismos datos de las ofertas de vivienda en Cali podemos construir un mapa de calor que muestre las zonas de Cali donde hay mayor numero de oferta, diviendolo por comunas.

Primera opción

  comunas2 <- spTransform(comunas, CRS("+proj=longlat +ellps=WGS84 +datum=WGS84"))
vivienda_map2 <- spTransform(vivienda_map, CRS("+proj=longlat +ellps=WGS84 +datum=WGS84"))

total_ofertas <- over(x = comunas2, y = vivienda_map2[, 1], fn = length)
comunas2$ofertas <- total_ofertas[, 1]

spplot(comunas2, "ofertas", 
       col.regions = viridisLite::viridis(20), 
       main = "Ofertas por comuna")

Segunda opción

Esta segunda opción permite una visualización más agradable a la vista por el tipo de colores y ofrece la posibilidad de ver las coordenadas

comunas_sf <- st_as_sf(comunas) %>% st_transform(4326)
viviendas_sf <- st_as_sf(vivienda_map) %>% st_transform(4326)

comunas_sf$ofertas <- lengths(st_intersects(comunas_sf, viviendas_sf))

library(ggplot2)
ggplot(comunas_sf) + 
  geom_sf(aes(fill = ofertas)) + 
  scale_fill_viridis_c(name = "Ofertas") + 
  ggtitle("Ofertas de vivienda por comuna")