Site icon R-bloggers

Cartografía Censo 2024 – PostgreSQL

[This article was first published on https://pacha.dev/blog, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
< !DOCTYPE html> < charset="utf-8"> < http-equiv="X-UA-Compatible" content="IE=edge"> < name="viewport" content="width=device-width, initial-scale=1.0"> pacha.dev/blog < !-- MathJax Configuration --> < !-- Smart header: libraries detected based on content --> < !-- File: /tmp/tmp.QyXkJM67UH/index.html -->
  • < !-- DEBUG: Found sourceCode --> < !-- Load custom CSS after any library CSS to ensure proper precedence -->
  • < header class="site-top">

    Mauricio “Pachá” Vargas Sepúlveda

    Blog with notes about R, Shiny, SQL, Python, Linux and C++. This blog is listed on R-Bloggers.

    HOME 🏠
    < !-- categories are printed below this--> < nav class="sidebar-nav">

    Categories

    < header id="title-block-header" class="quarto-title-block default">

    Cartografía Censo 2024 – PostgreSQL

    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.
    Author

    Mauricio “Pachá” Vargas S.

    Published

    December 21, 2025

    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.postgres

    Si 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:

    Razón de Hacinamiento por Manzana en la Región Metropolitana
    < footer>

    Loading…

  • < !-- Load shared sidebar -->
    To leave a comment for the author, please follow the link and comment on their blog: https://pacha.dev/blog.

    R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
    Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
    Exit mobile version