Uso basico del paquete censo2017

Mauricio Vargas S.

2020-11-05

Introduccion

Este paquete se integra perfectamente con el tidyverse y se dara un ejemplo muy basico para mostrar las principales funciones.

Aproximacion de la poblacion con el grado de doctor en la Region del Bio Bio

Se procedera a obtener una aproximacion usando dplyr ya que puede haber personas que no son de la comuna y aparecen censadas. Sin embargo no se hara el filtro que corrige esto para mantener el ejemplo lo mas simple posible.

Primero se cargan los paquetes necesarios.

library(censo2017)
library(dplyr)
library(ggplot2)
library(chilemapas)

Hay que realizar algunos cruces de tablas de manera de filtrar la region que nos interesa. Comienzo con la tabla zonas, genero la provincia a partir del geocodigo y luego filtro para unir hasta llegar a la tabla personas. La v variable p15, cuya descripcion esta en el repositorio, que interesa para este ejemplo.

nivel_educacional_biobio <- tbl(censo_bbdd(), "zonas") %>% 
  mutate(
    region = substr(as.character(geocodigo), 0, 2),
    comuna = substr(as.character(geocodigo), 1, 5)
  ) %>% 
  filter(region == "08") %>% 
  select(comuna, geocodigo, zonaloc_ref_id) %>%
  
  inner_join(select(tbl(censo_bbdd(), "viviendas"), zonaloc_ref_id, vivienda_ref_id), by = "zonaloc_ref_id") %>%
  inner_join(select(tbl(censo_bbdd(), "hogares"), vivienda_ref_id, hogar_ref_id), by = "vivienda_ref_id") %>%
  inner_join(select(tbl(censo_bbdd(), "personas"), hogar_ref_id, nivel_educ = p15), by = "hogar_ref_id") %>%
  collect()

Con lo anterior se puede agrupar por o comuna y obtener la cuenta.

nivel_educacional_biobio <- nivel_educacional_biobio %>% 
  group_by(comuna, nivel_educ) %>%
  summarise(cuenta = n()) %>%
  group_by(comuna) %>%
  mutate(proporcion = cuenta / sum(cuenta))

Veo los datos antes de seguir.

nivel_educacional_biobio
#> # A tibble: 860 x 4
#> # Groups:   comuna [54]
#>    comuna nivel_educ cuenta proporcion
#>    <chr>       <int>  <int>      <dbl>
#>  1 08101           1   4851    0.0217 
#>  2 08101           2   2701    0.0121 
#>  3 08101           3   3579    0.0160 
#>  4 08101           4    831    0.00372
#>  5 08101           5  37538    0.168  
#>  6 08101           6   5687    0.0254 
#>  7 08101           7  47356    0.212  
#>  8 08101           8  18641    0.0834 
#>  9 08101           9   5854    0.0262 
#> 10 08101          10   2653    0.0119 
#> # … with 850 more rows

Ahora obtengo el mapa de la provincia y procedo a pegar los datos a la tabla del mapa. Se usara chilemapas para simplificar al limite.

mapa_biobio <- mapa_comunas %>% 
  filter(codigo_region == "08") %>% 
  left_join(nivel_educacional_biobio, by = c("codigo_comuna" = "comuna"))

Ahora que cargue toda la informacion necesaria en R desde la base de datos, debo cerrar la conexion SQL (importante).

censo_desconectar_base()

Finalmente procedo a generar el mapa.

colors <- c("#DCA761","#C6C16D","#8B9C94","#628CA5","#5A6C7A")

g <- ggplot() +
  geom_sf(data = mapa_biobio %>% 
            select(codigo_comuna, geometry) %>% 
            left_join(
              mapa_biobio %>% 
                filter(nivel_educ == 14) %>% 
                select(codigo_comuna, nivel_educ, proporcion),
              by = "codigo_comuna"
            ),
          aes(fill = proporcion, geometry = geometry),
          size = 0.1) +
  scale_fill_gradientn(colours = rev(colors), name = "Porcentaje") +
  labs(title = "Porcentaje de habitantes con el grado de doctor\npor comuna en la Region del Bio Bio") +
  theme_minimal(base_size = 13)

g

Notas:

Ejercicios para el usuario

  1. Realizar un grafico similar al del ejemplo pero a nivel de zona censal.
  2. Explorar la columna p10 en la tabla personas y realizar un grafico que de cuenta de la poblacion efectiva de la comuna (e.g. mejorando el problema de personas que podrian no ser de la comuna en el ejemplo).
  3. Agregar datos al mapa sin usar chilemapas. Una forma de hacerlo es la siguiente
mapa_biobio <- censo_tabla("mapa_comunas") %>%
  filter(region == "08") %>% 
  left_join(nivel_educacional_biobio, by = "comuna")