Cartografía Censo 2024 - PostgreSQL
Puedes enviarme preguntas para el blog utilizando este formulario y suscribirse para recibir un correo electrónico cuando haya una nueva publicación.
Organicé los archivos Parquet que proporciona el INE para el Censo 2024 en una base de datos PostgreSQL con la extensión PostGIS, facilitando así su consulta y análisis espacial.
Las llaves primarias y foráneas se han definido según las relaciones establecidas en la documentación oficial del INE, asegurando la integridad referencial entre las tablas.
Tablas procesadas:
- Comunas
- Límites Urbanos
- Manzanas
- Provincias
- Regiones
En donde corresponde (e.g., comunas), usé la notación oficial de la Subsecretaría de Desarrollo Regional(SUBDERE) para los códigos geográficos, es decir que “05” es “Región de Valparaíso”, “051” es “Provincia de Valparaíso” y “05101” es “Comuna de Valparaíso” en lugar de “5”, “51” y “5101” para evitar cualquier tipo de ambiguedad.
Para cargar los datos en PostgreSQL, se debe contar con PostgreSQL version 15 o más reciente, junto con la extensión PostGIS instalada. Los siguientes comandos permiten crear las tablas desde el dump SQL:
createdb censo2024_cartografia
pg_restore -d new_censo2024_cartografia /path/to/censo2024_cartografia.postgresSi estos datos son de utilidad para tu proyecto, por favor abre un issue para saber cómo mejorar o expandir este repositorio.
En el siguiente enlace puedes donar de forma voluntaria para apoyar mis proyectos de código abierto:
Ejemplo de uso con ggplot2 para mostrar la proporción de hogares con hacinamiento a nivel de manzanas:
hacinamiento_por_comuna <- tbl(con, "manzanas") |>
filter(cod_region == "13") |>
select(
n_viviendas = n_vp,
n_viviendas_hacinadas = n_viv_hacinadas,
cod_comuna,
cod_manzana,
geometry
) |>
filter(n_viviendas > 0) |>
mutate(
razon_hacinamiento = n_viviendas_hacinadas / n_viviendas
) |>
inner_join(tbl(con, "cod_comuna")) |>
collect()
# conver pq_gmtry to sf
# see page 12 in Manual_uso_cartografia_CPV2024.pdf, it says EPSG - 4674
hacinamiento_por_comuna$geometry <- st_as_sfc(
hacinamiento_por_comuna$geometry,
crs = 4674
)
# add comunas as borders to see the limits
comunas <- tbl(con, "comunas") |>
filter(cod_region == "13") |>
select(cod_comuna, geometry) |>
collect()
comunas$geometry <- st_as_sfc(
comunas$geometry,
crs = 4674
)
# subset to Gran Santiago
gran_santiago <- c("131", "132")
hacinamiento_por_comuna <- hacinamiento_por_comuna |>
filter(
str_sub(cod_comuna, 1, 3) %in% gran_santiago
)
comunas <- comunas |>
filter(
str_sub(cod_comuna, 1, 3) %in% gran_santiago
)
g <- ggplot(data = hacinamiento_por_comuna) +
geom_sf(
aes(fill = razon_hacinamiento, geometry = geometry),
color = NA
) +
geom_sf(
data = comunas,
aes(geometry = geometry),
fill = NA,
color = "black",
size = 1
) +
scale_fill_gradientn(
colors = c("#ffffff", "#ff7e66", "#ff2800"),
values = scales::rescale(c(0, 0.3, 0.6)),
na.value = "grey90",
name = "Razón de Hacinamiento",
limits = c(0, 0.6),
breaks = seq(0, 0.6, by = 0.2),
labels = scales::percent_format(accuracy = 1L)
) +
theme_minimal() +
labs(
title = "Razón de Hacinamiento por Manzana en la Región Metropolitana",
subtitle = "Censo 2024 - Chile",
caption = "Fuente: INE - Censo 2024. Procesado por pacha.cl"
) +
theme(
plot.title = element_text(size = 16, face = "bold"),
plot.subtitle = element_text(size = 12),
plot.caption = element_text(size = 8),
legend.position = "right"
) +
# limits by geo coordinates of Gran Santiago
coord_sf(xlim = c(-70.9, -70.5), ylim = c(-33.7, -33.3))Resultado: