gramática de gráficos ejemplificada con datos de mortalidad de inegi




     Este código fue escrito con el objetivo de demostrar lo rápido y sencillo que puede ser usar R para conseguir datos a través de internet y hacer un análisis exploratorio de la información, la cual no se escogió por ningún motivo en especial; graficar directamente por estado a nivel nacional habría tomado unas 10 o 15 líneas de código. La mayor parte del código fue escrita para filtrar, relacionar las distintas bases de datos... y unas 15 líneas para corregir la codificación, pues inegi insiste en usar codificaciones que ni ellos mismos saben y en seguir usando el formato dbf.
    En la misma liga de descarga hay un pdf que contiene los catálogos de variables de la base de datos.
    Ya teniendo la visualización se pueden detectar ciertos patrones y ciertas anomalías, como la barra más amplia del capítulo 14 (problemas renales) en tierra blanca, que los municipios costeros tienen mayor proporción del capítulo 1 (infecciones) que el resto, pero una más salta a la vista.
    Habiendo visto la anomalía de Chicontepec, se hace un zoom al municipio, sólo para ver que hay miles de reportes como "otros síntomas y signos generales". Quién sabe qué quiere decir esto.
    El código:

library(forcats)
library(foreign)
library(dplyr) 
library(tibble)
library(magrittr)
library(ggplot2)
library(ochRe)

## temporal al cual se descarga un zip, se establece una conexion y se leen los dbf ####
temp <- tempfile()
download.file("http://www.beta.inegi.org.mx/contenidos/proyectos/registros/vitales/mortalidad/microdatos/defunciones/2016/defunciones_base_datos_2016_dbf.zip",
              temp)
data <- read.dbf(unzip(temp, "DEFUN16.dbf")) # system.time() = 12 segundos
categorias <- read.dbf(unzip(temp, "CATMINDE.dbf"))
grupos <- read.dbf(unzip(temp, "CAPGPO.dbf"))
geo <- read.dbf(unzip(temp,"CATEMLDE16.dbf"))
unlink(temp)

# proceso veracruz ####
veracruz <- filter(data, ENT_RESID == "30") %>% as.tibble()
geo %<>% filter(CVE_ENT=="30" & CVE_LOC=="0000") %>% as.tibble()

# para ordenar por los principales municipios
por_municipio <- veracruz %>% group_by(MUN_RESID)
%>%
  count(.)
%>% arrange(desc(n))

veracruz <- veracruz
%>% filter(MUN_RESID %in% por_municipio$MUN_RESID[1:30]) %>%  left_join(geo, by=c("MUN_RESID"="CVE_MUN"))
veracruz$NOM_LOC <- factor(veracruz$NOM_LOC)
grupos$CAP <- as.integer(grupos$CAP)

# misteriosos son los designios de locale del inegi
# y misterioso por qué en 2016 siguen usando dbf

veracruz <- left_join(veracruz, grupos, by=c("CAPITULO"="CAP"))
encodeador <- tibble(code_malo=c("\xa0","\x82","\xa1","\xa2","\xa3","\xb5"),
                     buena=c("á","é","í","ó","ú","Á") )
 

for(i in 1:dim(encodeador)[1]){
  veracruz$NOM_LOC <- gsub(encodeador$code_malo[i], encodeador$buena[i], veracruz$NOM_LOC)
}

# graficar veracruz con apoyo de las funciones de forcats #####
ggplot(veracruz, aes(fct_rev(fct_infreq(NOM_LOC)), fill=factor(CAPITULO))) + geom_bar(position="fill") +
  coord_flip()  + scale_fill_manual(values=ochre_palettes$emu_woman_paired) +
  ggtitle("Categorías de defunción municipios de Veracruz") +
  xlab("") + ylab("") +
  guides(fill=guide_legend(title="Capítulo"))

# qué pasa con chicontepec? ####
chicontepec <- filter(veracruz, NOM_LOC=="Chicontepec")
%>%
    group_by(CAUSA_DEF, NOM_LOC, CAPITULO)
%>%    count(CAUSA_DEF) %>% arrange(desc(n))
chicontepec <- left_join(chicontepec, categorias, by=c("CAUSA_DEF"="CLAVE"))
grupos
%<>%  filter(is.na(GPO)) 
for(i in 1:dim(encodeador)[1]){
  grupos$DESCRIP <- gsub(encodeador$code_malo[i], encodeador$buena[i], grupos$DESCRIP)
}
grupos$CAP <- as.integer(grupos$CAP)
chicontepec <- left_join(chicontepec, grupos, by=c("CAPITULO"="CAP"))
 
for(i in 1:dim(encodeador)[1]){
  chicontepec$NOMBRE <- gsub(encodeador$code_malo[i], encodeador$buena[i], chicontepec$NOMBRE)
}
chicontepec
# graficar chicontepec ####
ggplot(chicontepec[1:15,], aes(reorder(NOMBRE,n),n,fill=factor(CAPITULO))) +
  geom_bar(stat="identity") +
  scale_fill_manual(values=ochre_palettes$emu_woman_paired) +
  coord_flip() + xlab("")  +
  ggtitle("principales causas de defunción, Chicontepec") +
  guides(fill=guide_legend(title="Capítulo"))


Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Comentarios

  1. Casinos that Accept Crypto: Slots, Roulette & More
    Best Casinos with Crypto: Slots, Roulette & More · 1. Ignition Casino · 사다리사이트 2. InterTops bet365 코리아 Casino · 3. 강원랜드 떡 Ignition 바카라추천사이트 Casino · 하하 포커 4. Bovegas Casino.

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Construyendo sobre otro post y la conjetura de Collatz y Escher, Gödel, Bach...

El estado de las cosas: QGIS vs ArcGIS

datos socioeconómicos y resultados electorales.