Usando la información generada por el CONEVAL y, publicada en su sitio de internet, generar lo siguiente.
EJERCICIO 1
Utilizando el reporte “ANEXO ESTADÍSTICO DE POBREZA A NIVEL MUNICIPIO 2010 Y 2015”, elegir un estado (y sus municipios), y representar el nivel de pobreza y pobreza extrema para los años 2010 y 2015. Esto es:
# Librerías
library(dplyr)
library(stringr)
library(rgdal)
library(leaflet)
# Lectura ----
# Se crea un archivo temporal
temp <- tempfile()
# Descarga del archivo .zip
download.file("https://www.coneval.org.mx/Medicion/Documents/Pobreza_municipal/Concentrado_indicadores_de_pobreza.zip",
temp)
# Extracción y lectura del archivo .xlsx
pobreza_coneval_raw <- readxl::read_xlsx(unzip(temp), skip = 3) %>%
janitor::clean_names()
# Se elimina el archivo temporal
unlink(temp)
# Limpieza ----
## Coneval ----
### Variables de interés ----
pobreza_coneval_clean <- pobreza_coneval_raw %>%
select(1:18) %>% # La columna 18 es la última de pobreza extrema
filter(!is.na(entidad_federativa))
### Nombres de variables ----
# Se corrigen los nombres de las columnas de interés
nombres_columnas <- names(pobreza_coneval_raw[ , 1:6])
columnas_pobreza <- paste0("pobreza_", pobreza_coneval_raw[1 , 7:12])
columnas_pobreza_extrema <- paste0("pobreza_extrema_", pobreza_coneval_raw[1, 13:18])
# Se expande el vector de nombres
nombres_columnas <- c(nombres_columnas, columnas_pobreza, columnas_pobreza_extrema)
# Se elimina "leer_nota_al_final..." y se reemplaza "\r\n" por "_"
nombres_columnas <- str_replace(nombres_columnas, "_leer_nota_al_final_del_cuadro", "")
nombres_columnas <- str_replace(nombres_columnas, "\r\n|\\s", "_")
# Se agregan los nombres a las columnas
names(pobreza_coneval_clean) <- nombres_columnas
head(pobreza_coneval_clean)## # A tibble: 6 x 18
## clave_de_entidad entidad_federati~ clave_de_munici~ municipio poblacion_2010
## <chr> <chr> <chr> <chr> <dbl>
## 1 01 Aguascalientes 01001 Aguascalie~ 801807
## 2 01 Aguascalientes 01002 Asientos 48358
## 3 01 Aguascalientes 01003 Calvillo 57627
## 4 01 Aguascalientes 01004 Cosío 14929
## 5 01 Aguascalientes 01005 Jesús María 102211
## 6 01 Aguascalientes 01006 Pabellón d~ 40659
## # ... with 13 more variables: poblacion_2015 <chr>,
## # pobreza_Porcentaje_2010 <chr>, pobreza_Porcentaje_2015 <chr>,
## # pobreza_Personas_2010 <chr>, pobreza_Personas_2015 <chr>,
## # pobreza_Carencias_promedio
## 2010 <chr>,
## # pobreza_Carencias_promedio
## 2015 <chr>,
## # pobreza_extrema_Porcentaje_2010 <chr>,
## # pobreza_extrema_Porcentaje_2015 <chr>, ...
# Estados con 20 municipios o más
pobreza_coneval_clean %>%
group_by(entidad_federativa) %>%
summarise(cantidad_municipios = n()) %>%
filter(cantidad_municipios >= 20)## # A tibble: 22 x 2
## entidad_federativa cantidad_municipios
## <chr> <int>
## 1 Chiapas 118
## 2 Chihuahua 67
## 3 Coahuila 38
## 4 Durango 39
## 5 Guanajuato 46
## 6 Guerrero 81
## 7 Hidalgo 84
## 8 Jalisco 125
## 9 México 125
## 10 Michoacán 113
## # ... with 12 more rows
# Se selecciona Yucatán
yucatan_pobreza <- pobreza_coneval_clean %>%
filter(entidad_federativa == "Yucatán") %>%
mutate(clave_de_municipio = str_replace(clave_de_municipio, "31", ""),
across(contains("Porcentaje"), ~ round(as.numeric(.), 2)))
## Mapa ----
yucatan_mapa <- readOGR(dsn = here::here("./maps/yucatan_qgis"), layer = "municipios_yucatan", encoding = "UTF-8")## OGR data source with driver: ESRI Shapefile
## Source: "C:\Users\Erick\Documents\projects\programacion\maps\yucatan_qgis", layer: "municipios_yucatan"
## with 106 features
## It has 4 fields
### Merge ----
yucatan_mapa@data <- merge(x = yucatan_mapa@data,
y = yucatan_pobreza,
by.x = "CVE_MUN",
by.y = "clave_de_municipio",
sort = FALSE)
### Información para los popups ----
yucatan_mapa@data <- yucatan_mapa@data %>%
mutate(popup_info_pobreza_2010 = paste0(sep = "",
"<br> <b>Municipio: </b>", municipio,
"<br> <b>Población en 2010: </b>", poblacion_2010,
"<br> <b>Porcentaje de pobreza en 2010: </b>", pobreza_Porcentaje_2010),
popup_info_pobreza_2015 = paste0(sep = "",
"<br> <b>Municipio: </b>", municipio,
"<br> <b>Población en 2010: </b>", poblacion_2015,
"<br> <b>Porcentaje de pobreza en 2015: </b>", pobreza_Porcentaje_2015),
popup_info_pobreza_extrema_2010 = paste0(sep = "",
"<br> <b>Municipio: </b>", municipio,
"<br> <b>Población en 2010: </b>", poblacion_2010,
"<br> <b>Porcentaje de pobreza extrema en 2010: </b>", pobreza_extrema_Porcentaje_2010),
popup_info_pobreza_extrema_2015 = paste0(sep = "",
"<br> <b>Municipio: </b>", municipio,
"<br> <b>Población en 2010: </b>", poblacion_2015,
"<br> <b>Porcentaje de pobreza extrema en 2015: </b>", pobreza_extrema_Porcentaje_2015)
)1. (10%) Para el año 2010, considerando la división (cut) por cuantiles, representar en un mapa la distribución de la pobreza de los municipios.
# Función para obtener los valores de los cuantiles con base en la función cut
cut_values <- function(vector, breaks = 5){
na.omit(
unique(
as.numeric(
unlist(
str_extract_all(
levels(
cut(vector, 5) # función cut
),
"[0-9]*\\.?\\d*")
)
)
)
)
}
# Cortes
cortes <- cut_values(yucatan_mapa@data$pobreza_Porcentaje_2010)
colores <- colorBin(palette = "YlOrRd",
domain = as.numeric(yucatan_mapa@data$pobreza_Porcentaje_2010),
na.color = "transparent",
bins = cut_values(yucatan_mapa@data$pobreza_Porcentaje_2010)
)
leaflet(yucatan_mapa) %>%
addTiles() %>%
addPolygons(label = yucatan_mapa@data$municipio,
popup = yucatan_mapa@data$popup_info_pobreza_2010,
fillColor = colores(yucatan_mapa@data$pobreza_Porcentaje_2010),
fillOpacity = 0.9)2. (10%) Para el año 2015, considerando la división (cut) por cuantiles, representar en un mapa la distribución de la pobreza de los municipios.
cortes <- cut_values(yucatan_mapa@data$pobreza_Porcentaje_2015)
colores <- colorBin(palette = "YlGnBu",
domain = as.numeric(yucatan_mapa@data$pobreza_Porcentaje_2015),
na.color = "transparent",
bins = cortes
)
leaflet(yucatan_mapa) %>%
addTiles() %>%
addPolygons(label = yucatan_mapa@data$municipio,
popup = yucatan_mapa@data$popup_info_pobreza_2015,
fillColor = colores(yucatan_mapa@data$pobreza_Porcentaje_2015),
fillOpacity = 0.9)3. (10%) Para el año 2010, considerando la división (cut) por cuantiles, representar en un mapa la distribución de la pobreza extrema de los municipios.
cortes <- cut_values(yucatan_mapa@data$pobreza_extrema_Porcentaje_2010)
colores <- colorBin(palette = "YlOrRd",
domain = as.numeric(yucatan_mapa@data$pobreza_extrema_Porcentaje_2010),
na.color = "transparent",
bins = cortes
)
leaflet(yucatan_mapa) %>%
addTiles() %>%
addPolygons(label = yucatan_mapa@data$municipio,
popup = yucatan_mapa@data$popup_info_pobreza_extrema_2010,
fillColor = colores(yucatan_mapa@data$pobreza_extrema_Porcentaje_2010),
fillOpacity = 0.9)4. (10%) Para el año 2015, considerando la división (cut) por cuantiles, representar en un mapa la distribución de la pobreza extrema de los municipios del estado elegido.
cortes <- cut_values(yucatan_mapa@data$pobreza_extrema_Porcentaje_2015)
colores <- colorBin(palette = "YlGnBu",
domain = as.numeric(yucatan_mapa@data$pobreza_extrema_Porcentaje_2015),
na.color = "transparent",
bins = cortes
)
leaflet(yucatan_mapa) %>%
addTiles() %>%
addPolygons(label = yucatan_mapa@data$municipio,
popup = yucatan_mapa@data$popup_info_pobreza_extrema_2015,
fillColor = colores(yucatan_mapa@data$pobreza_extrema_Porcentaje_2015),
fillOpacity = 0.9)5. (10%) ¿La pobreza extrema se distribuye de manera aleatoria en los municipios? Es decir, ¿hay grupos o zonas específicas del estado elegido donde se concentran porcentajes mayores de la pobreza extrema?
Los municipios del estado de Yucatán muestran un concentrado de pobreza distribuido principalmente en las zonas Sur y Este, sobretodo esta última zona. Los municipios de Chemax, Chichimilá, Tixcacalcupu, Chikindzonot son los que presentan un mayor porcentaje de sus poblaciones que se encuentran en situación de pobreza e incluso pobreza extrema. Coincidentemente, la capital, en ninguno de los casos para ambos años presenta un porcentaje alto o medio de su población.