A short description of the post.
Para graficar el mapa de Santiago tomaremos los geojson y los pasaremos a Simple Feature.
library(tidyverse)
geourl <- "https://raw.githubusercontent.com/robsalasco/precenso_2016_geojson_chile/master/Zonas/R13.geojson"
zonas <- jsonlite::fromJSON(geourl, simplifyVector = FALSE)
zonas <- geojsonio::as.json(zonas)
zonas <- geojsonsf::geojson_sf(zonas)
glimpse(zonas)
Observations: 1,843
Variables: 10
$ REGION <chr> "13", "13", "13", "13", "13", "13", "13", "13"...
$ PROVINCIA <chr> "131", "131", "131", "131", "131", "131", "131...
$ COMUNA <chr> "13123", "13123", "13123", "13123", "13123", "...
$ NOM_PROVIN <chr> "SANTIAGO", "SANTIAGO", "SANTIAGO", "SANTIAGO"...
$ COD_DIS <dbl> 7, 8, 3, 3, 3, 3, 7, 3, 8, 3, 8, 2, 3, 3, 3, 2...
$ COD_ZONA <dbl> 2, 2, 9, 3, 6, 2, 1, 1, 4, 11, 1, 2, 10, 7, 4,...
$ NOM_COMUNA <chr> "PROVIDENCIA", "PROVIDENCIA", "PROVIDENCIA", "...
$ NOM_URBANO <chr> "PROVIDENCIA", "PROVIDENCIA", "PROVIDENCIA", "...
$ NOM_REGION <chr> "REGIÓN METROPOLITANA DE SANTIAGO", "REGIÓN ...
$ geometry <POLYGON [°]> POLYGON ((-70.60773 -33.416..., POLYG...
Todo bien hasta ahora. Grafiquemos y exploremos el contenido del geojson.
ggplot(zonas) +
geom_sf(size = .2, fill = NA, colour = "gray80")
Vemos que hay zonas que estás dispersas. La verdad, al no ser experto en SIGs no se me ocurre otra forma mejor que obtener los centroides y filtrar a mano.
zonas <- zonas %>%
mutate(centro = sf::st_centroid(geometry))
centros_coords <- zonas %>%
pull(centro) %>%
sf::st_coordinates()
zonas <- zonas %>%
mutate(
x = centros_coords[, 1],
y = centros_coords[, 2]
)
zonas <- zonas %>%
filter(y <= -33.30) %>%
filter(y >= -33.70) %>%
filter(x >= -70.85) %>%
filter(x <= -70.40)
ggplot(zonas) +
geom_sf(size = .2, fill = "gray95", colour = "gray80") +
coord_sf(ndiscr = 0) # https://stackoverflow.com/a/52426976/829971
No quedaron las mismas zonas que la versión original pero servirá para nuestros propósitos.
Acá debo enfatizar que no se mucho de representaciones geográficas y todas esas artes, ni menos el origen de datos y transformaciones se realizaron, así que con todo el empeño intentaré obtener algo similar para que sigamos con el post
Leeremos la información desde un servidor que, nuevamente, Don Rob me ayudó a levantar con los datos del CENSO, usaremos obviamente la tabla personas pues contiene las respuesta de la pregunta sobre el grado alcanzado.
con <- DBI::dbConnect(
RMySQL::MySQL(),
dbname = "censo2017",
host = "142.93.20.188",
port = 3306,
user = "test",
password = "HFW9KYZBnEYr!"
)
DBI::dbListTables(con)
[1] "hogar" "idgeo" "personas" "vivienda"
tbl(con, "idgeo") %>%
collect(n = 10) %>%
rmarkdown::paged_table()
tbl(con, "personas") %>%
collect(n = 10) %>%
rmarkdown::paged_table()
A la tabla filtraremos por P07 = 1 que corresponden a los jefes de hogares, y luego por la region metropolitana (13) y obtendremos los conteos de cada respuesta segun región, provincia, comuna, dc, area, zc_loc.
dta_jefe_educ <- tbl(con, "personas") %>%
filter(P07 == 1) %>%
filter(REGION == 13) %>%
group_by(REGION, PROVINCIA, COMUNA, DC, AREA, ZC_LOC, ID_ZONA_LOC) %>%
count(P15, P15A) %>%
collect()
dta_jefe_educ <- dta_jefe_educ %>%
ungroup() %>%
mutate(
P15_label = case_when(
P15 %in% c(5, 6) & P15A == 1 ~ "Ed. Básica Completa",
P15 %in% c(7:10) & P15A == 2 ~ "Ed. Media Incompleta",
P15 %in% c(7:10) & P15A == 1 ~ "Ed. Media Completa",
P15 == 11 ~ "Ed. Técnico Superior",
P15 == 12 ~ "Ed. Superior",
P15 %in% c(13, 14) ~ "Ed. Posgrado",
TRUE ~ "Otra/Missing"
)
) %>%
arrange(P15, P15A) %>%
mutate(P15_label = fct_inorder(P15_label))
dta_jefe_educ %>%
count(P15_label) %>%
knitr::kable()
| P15_label | n |
|---|---|
| Otra/Missing | 13392 |
| Ed. Básica Completa | 4520 |
| Ed. Media Completa | 8803 |
| Ed. Media Incompleta | 8677 |
| Ed. Técnico Superior | 5301 |
| Ed. Superior | 5842 |
| Ed. Posgrado | 5387 |
dta_jefe_educ <- dta_jefe_educ %>%
group_by(REGION, PROVINCIA, COMUNA, DC, AREA, ZC_LOC, ID_ZONA_LOC) %>%
count(P15_label) %>%
mutate(porcentaje = n/sum(n)) %>%
ungroup()
dta_jefe_educ <- dta_jefe_educ %>%
mutate(id = paste(
COMUNA,
sprintf("%02d", DC),
# AREA,
sprintf("%03d", ID_ZONA_LOC),
sep = ""
))
zonas <- zonas %>%
mutate(id = paste(
COMUNA,
sprintf("%02d", COD_DIS),
# AREA,
sprintf("%03d", COD_ZONA),
sep = ""
))
zonas %>%
left_join(dta_jefe_educ %>% select(P15_label , porcentaje, id), by = "id") %>%
filter(!is.na(porcentaje)) %>%
ggplot() +
geom_sf(data = zonas, size = .2, fill = "gray95", colour = "gray80") +
geom_sf(aes(fill = porcentaje)) +
facet_wrap(vars(P15_label), ncol = 4)