Página PROADESS: www.proadess.icict.fiocruz.br

Início:

Limpa resultados aneriores:

source("apaga_resultados_anteriores.R", encoding = "UTF-8", verbose = F, echo = F)

Pacotes usados:

#rm(list=ls()) ; invisible(gc())
# função cran fiocruz ---------------------------------------------------
loadlibrary <- function(x){
  if (!require(x,character.only = TRUE)) {
    install.packages(x, repos='http://cran.fiocruz.br/', dependencies = TRUE, type = "source")
    if(!require(x,character.only = TRUE)) stop("Package not found")
  }}
pacotes <- c("readr","dplyr","data.table","tidyr","lubridate","digest", "elastic")

for (i in 1:length(pacotes)) {
  suppressPackageStartupMessages(loadlibrary(pacotes[i]))
}
# options(warn=1)
# options(tz="America/Bahia")
# options(scipen = 999)
# options(stringsAsFactors = F)
options(scipen = 999)
options(stringsAsFactors = F)
INICIO <- Sys.time()

Geracao_Indicadores

Nota Geracao_Selecoes.R:

  • Este script traz os objetos “Ficha_Selecao_Filtrada”(Ficha com os indicadores possíveis de serem feitos) e “Resultado_Selecoes”(Base com resultado das queries)
  • Em sua forma final, o script deverá gerar uma base com resultado das consultas
  • de cada base de dados(sim, sinasc, pop…) para futuro RBIND.
  • Esta base final será consultada pela ficha dos indicadores, com as indicações dos dados a serem utilizados.
  • Script de origem:1_Geracao_indicadores.R
  • Objeto Final1: Ficha_Selecao_Filtrada
  • Objeto FInal2: Resultado_Selecao
#source("./1.1.0_Geracao_Selecoes.R", verbose = F, echo = F)

Funcao_Tabela_Ano_Mun

  • 1 - Primeira funcao que transforma as saidas do elastic em dataframes, com identificacao do indicador, ano e mun
  • 2 - Segunda funcao que recodifica municípios
source("./1.1.1_Funcao_Tabela_Ano_Mun.R", verbose = F, echo = F)

Conecta nos servidores elastic:

  • Geracao de um banco de dados com os indicadores de cada base(SIM,SINASC…)
  • Um loop repete as queries e armazena os resultados das buscas em um único dataframe
suppressMessages(suppressPackageStartupMessages(library("elastic")))
es_url <- elastic::connect(host = "dados-pcdas.icict.fiocruz.br", port = 443, user = "caio.peixoto", pwd = "sigmund$", transport_schema = "https")

Seleções dos diferentes sistemas devem ser agregadas aqui

  • Selecoes_SIM-queries traz o objeto Selecoes_SIM
  • Selecoes_SVS-queries traz o objeto Selecoes_SVS
  • Igual pras demais bases …
# source('./Sistemas/1.1.2_Selecoes_SIM.R', encoding = "UTF-8", verbose = F, echo = F)
source("./Sistemas/1.1.2_Selecoes_SVS.R", encoding = "UTF-8", verbose = F, echo = F)
source("./Sistemas/1.1.2_Selecoes_elastic_queries.R", encoding = "UTF-8", verbose = F, echo = F)

Nota

  • Futuramente as bases de selecao dos diferentes sistemas podem ser reunidas em um unico arquivo, com identificacao adequada.
  • No momento, os testes serao feitos em cima do SIM e no objeto “Selecoes_SIM”
#Selecoes <- Selecoes_SVS
Selecoes <- rbind(Selecoes_elastic_queries, Selecoes_SVS)

Objetos usados para filtrar as selecoes necessárias

  • Objeto Final1: Ficha_Selecao_Filtrada
  • Objeto FInal2: Ficha_Selecao_Filtrada_Nome
source("./1.1.3_Ficha_Filtro.R", verbose = F, echo = F)
###################################################
### Ficha possui um total de '290' indicadores 

### Indicadores que serão tabulados: 'L41,L58,M01,M02,M03,M04,M05,M06,M07,M08,M09,M15'

### Indicadores que NÃO serão tabulados: 'A10,A11,A12,A13,A15,A20,A22,A26,A28,A29,A34,A35,A36,A37,A38,A39,A40,A41,A42,A43,A44,A45,A46,A47,A51,A52,A53,A54,A55,B01,B06,B07,B09,B11,B12,B13,B14,B15,B16,B17,B18,B20,B21,B22,B23,B24,C04,C05,C06,C08,D01,D02,G01,G02,G03,G04,G08,G10,G13,H01,H02,H03,H04,K21,K36,K38,K40,K42,K43,K51,L06,L09,L10,L11,L13,L14,L15,L40,L41,L51,L57,M10,M11,M12,M13,M14,O04,O05,O07,R51,R52,R53,U06,U07,Z01,Z02,Z03,Z04,Z05,Z06,Z07,Z08,Z09,Z10,Z11,Z12,Z13,Z14,Z15,Z16'

Objeto “Seleções” filtrado

Selecoes <- Selecoes[Selecoes[[1]] %in% Ficha_Selecao_Filtrada_Nome[[1]], ]
Resultado_Selecao <- NULL
Resultado_Selecao_SINASC <- NULL
Resultado_Selecao_SVS <- NULL
Resultado_Selecao_SIM <- NULL
ANO_POP <- 2000:2017

sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
cat(sprintf("\n## Conectado ao servidor elastic!\n"))
print(es_url)
#es_url
cat(sprintf("\n## Início das queries ao servidor:\n"))
sink()
## Conectado ao servidor elastic!
<Elasticsearch Connection> 
  transport:  https 
  host:       dados-pcdas.icict.fiocruz.br 
  port:       443 
  path:       NULL 
  username:   caio.peixoto 
  password:   <secret> 
  errors:     simple 
  headers (names):   
  cainfo:  NULL 

## Início das queries ao servidor:

Loop de consultas das queries ao servidor elastic:

  • SINASC
  • SIM
  • POP
  • SIH
for (i in 1:dim(Selecoes)[[1]]) {
  Sistema <- Selecoes[i, 3]
  q_body <- NULL
  ano <- NULL
  query <- NULL

  if (Sistema == "SIM") { # datasus-sim_2019_12_06
    q_body <- Selecoes[i, 2]
    indicador <- Selecoes[i, 1]
    sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
    cat(sprintf("\n## query do indicador '%s' da base %s ####", indicador, Sistema))
    sink()
    Resultado_Query_SIM <- elastic::Search(conn = es_url, index = "datasus-sim_2019_12_06", body = q_body, asdf = TRUE)
    try(Resultado_Selecao_SIM <- rbind(Resultado_Selecao_SIM, cbind(tabela_ano_mun(Resultado_Query_SIM), "Ind" = indicador)))
  }

  if (Sistema == "SINASC") { # datasus-sinasc_2019_12_06
    q_body <- Selecoes[i, 2]
    indicador <- Selecoes[i, 1]
    sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
    cat(sprintf("\n## query do indicador '%s' da base %s ####", indicador, Sistema))
    sink()
    Resultado_Query_SINASC <- elastic::Search(conn = es_url, index = "datasus-sinasc_2019_12_06", body = q_body, asdf = TRUE)
    try(Resultado_Selecao_SINASC <- rbind(Resultado_Selecao_SINASC, cbind(tabela_ano_mun(Resultado_Query_SINASC), "Ind" = indicador)))
  }

  if (Sistema == "SVS") {
    q_body <- Selecoes[i, 2]
    indicador <- Selecoes[i, 1]
    sexo <- Selecoes[i, 4]
    sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
    cat(sprintf("\n## query do indicador '%s' da base %s ####", indicador, Sistema))
sink()
    for (j in 1:length(ANO_POP)) {
      ano <- ANO_POP[j]
      query <- paste0("ANO:", ano)
      Resultado_Query_SVS <- elastic::Search(conn = es_url, index = "svs-pop-dss", body = q_body, q = ano, asdf = TRUE)

      if (sexo == 1) {
        try(Resultado_Selecao_SVS <- rbind(Resultado_Selecao_SVS, tabela_mun_pop_sexo(Resultado_Query_SVS, ano, indicador)))
      } else {
        try(Resultado_Selecao_SVS <- rbind(Resultado_Selecao_SVS, cbind(tabela_mun_pop(Resultado_Query_SVS, ano), "Ind" = indicador)))
      }
    }
  }

  Resultado_Selecao <- rbind(Resultado_Selecao_SIM, Resultado_Selecao_SVS, Resultado_Selecao_SINASC)
  #Resultado_Selecao <- rbind(Resultado_Selecao, Resultado_Selecao_SVS)
  #Resultado_Selecao <- rbind(Resultado_Selecao,Resultado_Selecao_SIM, Resultado_Selecao_SVS, Resultado_Selecao_SINASC)

}

sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
cat(sprintf("\n\n## Terminado as consultas ao servidor elastic ####\n"))
sink()
## query do indicador 'M01_N_SIM' da base SIM ####
## query do indicador 'M02_N_SIM' da base SIM ####
## query do indicador 'M03_N_SIM' da base SIM ####
## query do indicador 'M04_N_SIM' da base SIM ####
## query do indicador 'M05_N_SIM' da base SIM ####
## query do indicador 'M05_D_SIM' da base SIM ####
## query do indicador 'M06_N_SIM' da base SIM ####
## query do indicador 'M07_N_SIM' da base SIM ####
## query do indicador 'M08_N_SIM' da base SIM ####
## query do indicador 'M09_N_SIM' da base SIM ####
## query do indicador 'D_Nascidos_SINASC' da base SINASC ####
## query do indicador 'POP_TOTAL' da base SVS ####
## query do indicador 'POP_MULHER' da base SVS ####
## query do indicador 'POP_HOMEM' da base SVS ####

## Terminado as consultas ao servidor elastic ####

Finaliza com uma ordenacao das colunas do dataframe resultado

setcolorder(Resultado_Selecao, c("Munic_res", "Ano", "Ind", "Freq"))
#Resultado_Selecao <- data.frame(Resultado_Selecao, stringsAsFactors = F)
Resultado_Selecao <- data.frame(Resultado_Selecao)
Resultado_Selecao$Freq <- as.numeric(Resultado_Selecao$Freq)
Resultado_Selecao$Ano <- as.character(Resultado_Selecao$Ano)

Aplica a função “Regrasum”

Resultado_Selecao$Munic_res <- substring(Resultado_Selecao$Munic_res,1,6)
Resultado_Selecao$Munic_res <- Regrasmun(Resultado_Selecao$Munic_res)

# Aplica a função "extras"
Resultado_Selecao$Munic_res <- Municipios_Extintos(Resultado_Selecao$Munic_res, Resultado_Selecao$Ano)
Resultado_Selecao$Munic_res <- Ignorado_para_capitais(Resultado_Selecao$Munic_res)

Resultado_Selecao <- data.table(Resultado_Selecao)
Resultado_Selecao <- Resultado_Selecao %>% group_by(Munic_res, Ano, Ind) %>% summarise(Freq = sum(Freq))
Resultado_Selecao <- data.frame(Resultado_Selecao)

#Resultado_Selecao <- Resultado_Selecao[!duplicated(lapply(Resultado_Selecao, digest))]

lista de seleções que foram realizadas no sistema

Selecoes_finalizadas <- unique(Resultado_Selecao$Ind)

Salva em disco:

  • Salva a lista
  • Salva a base resultado(com as Ficha_Selecao_Filtrada_Nomeconsultas no sistema)
write.csv2(Selecoes_finalizadas, "./Base_Selecao_Mun/Selecoes_Finalizadas.csv", row.names = F)
write.csv2(Resultado_Selecao, "./Base_Selecao_Mun/Base_Selecao.csv", row.names = F)

Monta os indicadores:

######################################################
# Remoção de objetos não necessários nas próximas etapas
rm(Selecoes_elastic_queries, Selecoes_SVS)
rm(q_body)
rm(indicador, Sistema)
rm(i)
rm(Resultado_Query_SIM, Resultado_Query_SINASC, Resultado_Query_SVS)
#rm(Selecoes_SVS,Resultado_Query_SVS)
rm(Selecoes_finalizadas)
rm(Ficha_Selecao_Filtrada_Nome)
rm(Selecoes)
######################################################

Nota:

  • Essas listas serão usadas para ditar uma lista padrão, pois a tabulação só trará municípios que possuem algum caso, deixando de fora municípios que não possuem casos.
  • A nossa estrutura exibe, por padrão, todas os entes das abrangências.
sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
cat(sprintf("\n## Início do cálculo dos indicadores: ####\n"))
sink()

Cirs <- read.csv2("./Tabelas_Auxiliares/Lista_Cirs.csv", stringsAsFactors = F,colClasses = c("Mun"="character","Cgr"="character"),header = T, sep=";",dec=",", check.names = F)
#str(Cirs)
Cirs <- Cirs[,-(3:7)]

UF <- c(11,12,13,14,15,16,17,21,22,23,24,25,26,27,28,29,31,32,33,35,41,42,43,50,51,52,53)
RG <- c(1,2,3,4,5)
BR <- 555

Resultado_Selecao$Munic_res <- as.character(Resultado_Selecao$Munic_res)
## Início do cálculo dos indicadores: ####

Adiciona a identificação de abrangência na base das seleções

Resultado_Selecao <- merge(Resultado_Selecao, Cirs, by.x = "Munic_res", by.y = "Mun", all.x = T)
Resultado_Selecao <- cbind(Resultado_Selecao,"UF" = substring(Resultado_Selecao$Munic_res,1,2), "RG" = substring(Resultado_Selecao$Munic_res,1,1),"BR" = 555)
Resultado_Selecao <- as.data.frame(Resultado_Selecao)

Nota:

  • O loop passa por cada indicador buscando e somando as seleções em cada um dos campos de numerador e denominador
  • A proposta é sempre fazer uma razão (Numerador/Denominador) * multiplicador
  • Às vezes é necessário fazer uma simples contagem, nestes casos o Denominador é igual a 1.

As bases que acumularão os diferentes indicadores

Final_Num_UF <- NULL
Final_Num_RG <- NULL
Final_Num_BR <- NULL
Final_Num_CGR <- NULL

Ficha_Selecao_Filtrada <- as.data.frame(Ficha_Selecao_Filtrada)

Nota:

  • Verifica se o ag_numerador e ag_denominador estão preenchidos.
  • Os anos iniciais são definidos na ficha. Atualmente(2018), os indicadores começam no ano 2000.
  • Os NUM e os DEN serão usados para gerar as agregações para região, UF, RG e BR.
  • Neste passo, contamos o número de seleções que o indicador usa, se mais de uma, ocorre uma soma, no numerador e denominador.
  • As seleções, na ficha, são separadas por “;”

Loop principal:

for (i in 1:length(Ficha_Selecao_Filtrada[[1]])) {

    #Verifica se o ag_numerador e ag_denominador estão preenchidos.
    if(Ficha_Selecao_Filtrada[[6]][[i]] != "" & Ficha_Selecao_Filtrada[[7]][[i]] != "") {


    #Os anos iniciais sdependencies = finidos na ficha. Atualmente(2018), os indicadores começam no ano 2000.
    ANOI <- Ficha_Selecao_Filtrada$Ag_ANOI[i]

    #Os NUM e os DEN serão usados para gerar as agregações para região, UF, RG e BR.
    Num_MUN <- NULL
    Num_CGR<-NULL
    Num_UF <- NULL
    Num_RG <- NULL
    Num_BR <- NULL

    Den_MUN <-NULL
    Den_CGR<-NULL
    Den_UF <-NULL
    Den_RG<-NULL
    Den_BR <-NULL


    #Neste passo, contamos o número de seleções que o indicador usa, se mais de uma, ocorre uma soma, no numerador e denominador.
    #As seleções, na ficha, são separadas por ";"
    NNum <- length(strsplit(Ficha_Selecao_Filtrada[[6]][[i]], ";")[[1]])
    NDen <- length(strsplit(Ficha_Selecao_Filtrada[[7]][[i]], ";")[[1]])

    #Juntamos as diferentes seleções para posterior soma - NUMERADOR
    for(k in 1:NNum) {
# ORIGINAL:
#  Num_MUN <-rbindlist(list(Resultado_Selecao,subset(Resultado_Selecao, toupper(Resultado_Selecao$Ind) ==toupper(strsplit(Ficha_Selecao_Filtrada$Ag_Numerador[[i]], ";")[[1]])[k])))

# CORRIGIDO:
Num_MUN <- rbindlist(list(Num_MUN,subset(Resultado_Selecao, toupper(Resultado_Selecao$Ind) == toupper(strsplit(Ficha_Selecao_Filtrada$Ag_Numerador[[i]], ";")[[1]])[k])))
#Num_MUN <- rbind(Num_MUN,subset(Resultado_Selecao, toupper(Resultado_Selecao$Ind)==toupper(strsplit(Ficha_Selecao_Filtrada$Ag_Numerador[[i]], ";")[[1]])[k]))
    }

    Num_MUN <- data.table(Num_MUN)

    #Filtro para o Ano inicial
    Num_MUN <- Num_MUN[Ano >= ANOI,]

    #SOMA UF
    Num_UF <- Num_MUN[, list("Freq" = sum(Freq)), by = c("UF","Ano")]
    #Num_UF <- Num_MUN[, list("Freq" = sum(Freq)), by = c("UF","Ano")]

    Num_UF <- Num_UF[!is.na(Num_UF[[1]]) & !is.na(Num_UF[[2]]) & !is.na(Num_UF[[3]]),]
    names(Num_UF)[3] <- "Freq_Num"


    #SOMA RG
    Num_RG <- Num_MUN[, list("Freq" = sum(Freq)), by = c("RG","Ano")]
        #Num_RG <- Num_MUN[, list("Freq" = sum(Freq)), by = c("RG","Ano")]
    Num_RG <- Num_RG[!is.na(Num_RG[[1]]) & !is.na(Num_RG[[2]]) & !is.na(Num_RG[[3]]),]
    names(Num_RG)[3] <- "Freq_Num"


    #SOMA BR
    Num_BR <- Num_MUN[, list("Freq" = sum(Freq)), by = c("BR","Ano")]
    Num_BR <- Num_BR[!is.na(Num_BR[[1]]) & !is.na(Num_BR[[2]]) & !is.na(Num_BR[[3]]),]
    names(Num_BR)[3] <- "Freq_Num"


    #SOMA CGR
    Num_CGR <- Num_MUN[, list("Freq" = sum(Freq)), by = c("Cgr","Ano")]
    Num_CGR <- Num_CGR[!is.na(Num_CGR[[1]]) & !is.na(Num_CGR[[2]]) & !is.na(Num_CGR[[3]]),]

    #Num_CGR <- Num_CGR[!Num_CGR[[1]] == 99999,]
    Num_CGR <- Num_CGR[Num_CGR[[1]] != 99999,]

    names(Num_CGR)[3] <- "Freq_Num"


    #Checa se o Denominador é 1.
    if(strsplit(Ficha_Selecao_Filtrada[[7]][[i]], ";")[[1]][1] != 1) {

      #Juntamos as diferentes seleções para posterior soma - DENOMINADOR
      for(z in 1:NDen) {
        Den_MUN <- rbindlist(list(Resultado_Selecao,subset(Resultado_Selecao,toupper(Resultado_Selecao$Ind) == toupper(strsplit(Ficha_Selecao_Filtrada$Ag_Denominador[[i]], ";")[[1]])[z])))
      }

      Den_MUN <- data.table(Den_MUN)
      #Filtro para o Ano inicial
      Den_MUN <- Den_MUN[Ano >= ANOI,]


      #SOMA UF
      Den_UF <- Den_MUN[, list("Freq" = sum(Freq)), by = c("UF","Ano")]
      Den_UF <- Den_UF[!is.na(Den_UF[[1]]) & !is.na(Den_UF[[2]]) & !is.na(Den_UF[[3]]),]
      names(Den_UF)[3] <- "Freq_Den"


      #SOMA RG
      Den_RG <- Den_MUN[, list("Freq" = sum(Freq)), by = c("RG","Ano")]
      Den_RG<-Den_RG[!is.na(Den_RG[[1]]) & !is.na(Den_RG[[2]]) & !is.na(Den_RG[[3]]),]
      names(Den_RG)[3] <- "Freq_Den"

      #SOMA BR
      Den_BR <- Den_MUN[, list("Freq" = sum(Freq)), by = c("BR","Ano")]
      Den_BR <-Den_BR[!is.na(Den_BR[[1]]) & !is.na(Den_BR[[2]]) & !is.na(Den_BR[[3]]),]
      names(Den_BR)[3] <- "Freq_Den"

      #SOMA CGR
      Den_CGR <- Den_MUN[, list("Freq" = sum(Freq)), by = c("Cgr","Ano")]
      Den_CGR <- Den_CGR[!is.na(Den_CGR[[1]]) & !is.na(Den_CGR[[2]]) & !is.na(Den_CGR[[3]]),]

      #Den_CGR <- Den_CGR[!Den_CGR[[1]]==99999,]
      Den_CGR <- Den_CGR[Den_CGR[[1]] != 99999,]

      names(Den_CGR)[3] <- "Freq_Den"


      Den_UF <- data.frame(Den_UF)
      Den_RG <- data.frame(Den_RG)
      Den_BR <- data.frame(Den_BR)
      Den_CGR <- data.frame(Den_CGR)

    } else {

      #Se o denominador for 1, seguimos com esta proposta
      Den_UF <- cbind(Num_UF[,1:2],"Freq_Den" = 1)
      Den_RG <- cbind(Num_RG[,1:2],"Freq_Den" = 1)
      Den_BR <- cbind(Num_BR[,1:2],"Freq_Den" = 1)
      Den_CGR <- cbind(Num_CGR[,1:2],"Freq_Den" = 1)


    }

    #Junta Numerador e Denominador num único objeto
    Num_UF <- merge(Num_UF, Den_UF, by=c("UF","Ano"), all = TRUE)
    Num_RG <- merge(Num_RG, Den_RG, by=c("RG","Ano"), all = TRUE)
    Num_BR <- merge(Num_BR, Den_BR, by=c("BR","Ano"), all = TRUE)
    Num_CGR <- merge(Num_CGR, Den_CGR, by=c("Cgr","Ano"), all = TRUE)



    #Realiza a operação Numerador/Denominador * Multiplicador
    sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
    cat(sprintf("\n### Indicador: '%s', Fonte: '%s'\n### Numerador: '%s' ### Denominador: '%s'\n### Período: de '%d' até '%d'\n",
                Ficha_Selecao_Filtrada$cod_ind_p[i],
                Ficha_Selecao_Filtrada$Ag_fonte_p[i],
                Ficha_Selecao_Filtrada$Ag_Numerador[i],
                Ficha_Selecao_Filtrada$Ag_Denominador[i],
                Ficha_Selecao_Filtrada$Ag_ANOI[i],
                Ficha_Selecao_Filtrada$Ag_ANOF[i]))
sink()

    Num_UF <- cbind(Num_UF,"Res_Ind"=Ficha_Selecao_Filtrada$Ag_Multiplicador[[i]] * Num_UF$Freq_Num/Num_UF$Freq_Den)
    Num_RG <- cbind(Num_RG,"Res_Ind"=Ficha_Selecao_Filtrada$Ag_Multiplicador[[i]] * Num_RG$Freq_Num/Num_RG$Freq_Den)
    Num_BR <- cbind(Num_BR,"Res_Ind"=Ficha_Selecao_Filtrada$Ag_Multiplicador[[i]] * Num_BR$Freq_Num/Num_BR$Freq_Den)
    Num_CGR <- cbind(Num_CGR,"Res_Ind"=Ficha_Selecao_Filtrada$Ag_Multiplicador[[i]] * Num_CGR$Freq_Num/Num_CGR$Freq_Den)


    #Gera a tabela padrão com as combinações das UF, RG, BR e CGR, com os anos iniciais e finais
    #Aproveita o ano inicial e final dos indicadores.
    MaxNum <- max(unique(Num_BR[[2]], na.rm=T), na.rm=T)
    MaxDen <- max(unique(Den_BR[[2]], na.rm=T), na.rm=T)
    MaxND <- min(c(MaxNum,MaxDen), na.rm=T)
    # MaxNum = max(unique(Num_BR[[2]]), na.rm=T)
    # MaxDen = max(unique(Den_BR[[2]]), na.rm=T)
    # MaxND = min(c(MaxNum,MaxDen), na.rm=T)



    #Gera a tabela padrão para as abrangências.
    Tab_Padrao_UF <- expand.grid(UF,c(ANOI:MaxND))
    names(Tab_Padrao_UF)[1] <- "UF"
    names(Tab_Padrao_UF)[2] <- "Ano"

    Tab_Padrao_RG<-expand.grid(RG,c(ANOI:MaxND))
    names(Tab_Padrao_RG)[1] <- "RG"
    names(Tab_Padrao_RG)[2] <- "Ano"

    Tab_Padrao_BR<-expand.grid(BR,c(ANOI:MaxND))
    names(Tab_Padrao_BR)[1] <- "BR"
    names(Tab_Padrao_BR)[2] <- "Ano"

    #Tab_Padrao_CGR <- expand.grid(unique(Cirs[2]),c(ANOI:MaxND))
    Tab_Padrao_CGR<-expand.grid(unique(Cirs[2][Cirs[2]!=99999]),c(ANOI:MaxND))
    names(Tab_Padrao_CGR)[1] <- "Cgr"
    names(Tab_Padrao_CGR)[2] <- "Ano"


    #Une os resultados a tabela padrão
    Num_UF <- data.table(merge(Tab_Padrao_UF,Num_UF,all.x=T))
    Num_RG <- data.table(merge(Tab_Padrao_RG,Num_RG,all.x=T))
    Num_BR <- data.table(merge(Tab_Padrao_BR,Num_BR,all.x=T))
    Num_CGR <- data.table(merge(Tab_Padrao_CGR,Num_CGR,all.x=T))


    #O Código do indicador para a página do proadess segue a orientação da ficha.
    #Está dividido em 2 partes
    Cod_Indicador_Parte1 <- paste(Ficha_Selecao_Filtrada[i,c(2,9:11)],collapse="")
    Cod_Indicador_Parte2 <- paste(Ficha_Selecao_Filtrada[i,c(13:19)],collapse="")


    Num_UF <- cbind(Num_UF,"Cod_indicador"=paste0(Cod_Indicador_Parte1,substring(Num_UF$Ano,3,4),Cod_Indicador_Parte2))
    Num_RG <- cbind(Num_RG,"Cod_indicador"=paste0(Cod_Indicador_Parte1,substring(Num_RG$Ano,3,4),Cod_Indicador_Parte2))
    Num_BR <- cbind(Num_BR,"Cod_indicador"=paste0(Cod_Indicador_Parte1,substring(Num_BR$Ano,3,4),Cod_Indicador_Parte2))
    Num_CGR <- cbind(Num_CGR,"Cod_indicador"=paste0(Cod_Indicador_Parte1,substring(Num_CGR$Ano,3,4),Cod_Indicador_Parte2))

    #Imputa valor zero se houver informação no Denominador e não houver no numerador
    if(Ficha_Selecao_Filtrada$Ag_NA[[i]] == 0) {

      Num_UF$Res_Ind[is.na(Num_UF$Freq_Num) & !is.na(Num_UF$Freq_Den)] <- 0
      Num_RG$Res_Ind[is.na(Num_RG$Freq_Num) & !is.na(Num_RG$Freq_Den)] <- 0
      Num_BR$Res_Ind[is.na(Num_BR$Freq_Num) & !is.na(Num_BR$Freq_Den)] <- 0
      Num_CGR$Res_Ind[is.na(Num_CGR$Freq_Num) & !is.na(Num_CGR$Freq_Den)] <- 0

    }

    #Imputa valor zero  se a variável "Zeros" for igual a 1.
    if(!is.na(Ficha_Selecao_Filtrada$Zeros[i]) & Ficha_Selecao_Filtrada$Zeros[i] == 1) {

      Num_UF$Res_Ind[is.na(Num_UF$Res_Ind)] <- 0
      Num_RG$Res_Ind[is.na(Num_RG$Res_Ind)] <- 0
      Num_BR$Res_Ind[is.na(Num_BR$Res_Ind)] <- 0
      Num_CGR$Res_Ind[is.na(Num_CGR$Res_Ind)] <- 0

    }

    #Imputa NA se ocorrer um infinito
    Num_UF$Res_Ind[!is.finite(Num_UF$Res_Ind)] <- 0
    Num_RG$Res_Ind[!is.finite(Num_RG$Res_Ind)] <- 0
    Num_BR$Res_Ind[!is.finite(Num_BR$Res_Ind)] <- 0
    Num_CGR$Res_Ind[!is.finite(Num_CGR$Res_Ind)] <- 0



  }

  Final_Num_UF <- data.table::rbindlist(list(Num_UF, Final_Num_UF))
  Final_Num_RG <- data.table::rbindlist(list(Num_RG, Final_Num_RG))
  Final_Num_BR <- data.table::rbindlist(list(Num_BR, Final_Num_BR))
  Final_Num_CGR <- data.table::rbindlist(list(Num_CGR, Final_Num_CGR))
}
sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
cat(sprintf("\n\n##### Fim do cálculo de todos Indicadores #####\n##############\n"))
sink()
### Indicador: 'L41', Fonte: 'IBGE'
### Numerador: 'POP_HOMEM' ### Denominador: '1'
### Período: de '2000' até '2017'

### Indicador: 'L41', Fonte: 'IBGE'
### Numerador: 'POP_TOTAL' ### Denominador: '1'
### Período: de '2000' até '2017'

### Indicador: 'L41', Fonte: 'IBGE'
### Numerador: 'POP_MULHER' ### Denominador: '1'
### Período: de '2000' até '2017'

### Indicador: 'L58', Fonte: 'SINASC'
### Numerador: 'D_Nascidos_SINASC' ### Denominador: '1'
### Período: de '2000' até '2017'

### Indicador: 'M01', Fonte: 'SIM e SINASC'
### Numerador: 'M01_N_SIM' ### Denominador: 'D_Nascidos_SINASC'
### Período: de '2000' até '2017'

### Indicador: 'M02', Fonte: 'SIM e SINASC'
### Numerador: 'M02_N_SIM' ### Denominador: 'D_Nascidos_SINASC'
### Período: de '2000' até '2017'

### Indicador: 'M03', Fonte: 'SIM e SINASC'
### Numerador: 'M03_N_SIM' ### Denominador: 'D_Nascidos_SINASC'
### Período: de '2000' até '2017'

### Indicador: 'M04', Fonte: 'SIM e SINASC'
### Numerador: 'M04_N_SIM' ### Denominador: 'D_Nascidos_SINASC'
### Período: de '2000' até '2017'

### Indicador: 'M05', Fonte: 'SIM'
### Numerador: 'M05_N_SIM' ### Denominador: 'M05_D_SIM'
### Período: de '2000' até '2017'

### Indicador: 'M06', Fonte: 'SIM e IBGE'
### Numerador: 'M06_N_SIM' ### Denominador: 'POP_TOTAL'
### Período: de '2000' até '2017'

### Indicador: 'M07', Fonte: 'SIM e IBGE'
### Numerador: 'M07_N_SIM' ### Denominador: 'POP_TOTAL'
### Período: de '2000' até '2017'

### Indicador: 'M08', Fonte: 'SIM e IBGE'
### Numerador: 'M08_N_SIM' ### Denominador: 'POP_TOTAL'
### Período: de '2000' até '2017'

### Indicador: 'M09', Fonte: 'SIM e IBGE'
### Numerador: 'M09_N_SIM' ### Denominador: 'POP_TOTAL'
### Período: de '2000' até '2017'

### Indicador: 'M15', Fonte: 'SIM e SINASC'
### Numerador: 'M02_N_SIM;M03_N_SIM' ### Denominador: 'D_Nascidos_SINASC'
### Período: de '2000' até '2017'


##### Fim do cálculo de todos Indicadores #####
##############

Salva as bases produzidas:

#write.csv2(Num_BR,"./Base_Final_Proadess/Base_teste_BR.csv", row.names=F)

write.csv2(Final_Num_UF,"./Base_Final_Proadess/Base_completa_LONG_UF.csv", row.names=F)
write.csv2(Final_Num_RG,"./Base_Final_Proadess/Base_completa_LONG_RG.csv", row.names=F)
write.csv2(Final_Num_BR,"./Base_Final_Proadess/Base_completa_LONG_BR.csv", row.names=F)
write.csv2(Final_Num_CGR,"./Base_Final_Proadess/Base_completa_LONG_CGR.csv", row.names=F)

Dicionários

Organiza bases e dicionários no padrão de importação da página * Salva uma nova base com os padrões de importação da página do PROADESS * Formata a base para a página do Proadess e gera as suas fichas * Basicamente, passa do formato long para colunas

Script de origem: Geracao_indicadores.R

  • Objetos de entrada
    • Objeto1:Final_Num_CGR
    • Objeto2:Final_Num_UF
    • Objeto1:Final_Num_RG
    • Objeto1:Final_Num_BR
  • Objetos de Saída
    • Objeto1:Final_Num_CGR_PAGINA
    • Objeto2:Final_Num_UF_PAGINA
    • Objeto3:Final_Num_RG_PAGINA
    • Objeto4:Final_Num_BR_PAGINA
    • Objeto5:Ficha_Primaria_UF_RG_BR
    • Objeto6:Ficha_Secundaria_UF_RG_BR
    • Objeto7:Ficha_Primaria_CGR
    • Objeto8:Ficha_Secundaria_CGR
suppressMessages(suppressPackageStartupMessages(library("reshape2")))
options(scipen = 999)
options(stringsAsFactors = F)

sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
cat(sprintf("\n##############\n##### Início geração das Fichas primárias e secundárias  #####\n\n"))
sink()
Final_Num_CGR$Res_Ind <- as.numeric(Final_Num_CGR$Res_Ind)
##############
##### Início geração das Fichas primárias e secundárias  #####

Na Cgr trazemos os nomes dos das regiões

  • Passa as bases para o formato coluna:
  • São adicionados os estados e uma coluna “Nome_municipio” só para atender aos padrões de importação
  • Nomes também são alterados (das variáveis)
#CGR
Final_Num_CGR_PAGINA <- reshape2::dcast(Final_Num_CGR, Cgr ~ Cod_indicador, value.var="Res_Ind")

Cirs_Nomes <- read.csv2('./Tabelas_Auxiliares/Lista_Cirs.csv',stringsAsFactors = F,colClasses = c("Mun"="character","Cgr"="character"),  header = T, sep=";",dec=",", check.names = F)
#str(Cirs_Nomes)

Cirs_Nomes <- unique(Cirs_Nomes[,1:7])

Retira regiões não encontradas

Cirs_Nomes <- Cirs_Nomes[Cirs_Nomes[[2]] != "99999",]
Cirs_Nomes <- Cirs_Nomes[Cirs_Nomes[[2]] != 99999,]


Cirs_Nomes <- cbind(Cirs_Nomes ,"Cod_regiao" = substring(Cirs_Nomes[[1]],1,1))
Cirs_Nomes <- Cirs_Nomes [,c(2,3,8,4,1,6,7)]

#Alterar pra regiao
names(Cirs_Nomes)[1] <- "REGIAO"
names(Cirs_Nomes)[2] <- "Cod_estado"
names(Cirs_Nomes)[3] <- "Cod_regiao"
names(Cirs_Nomes)[4] <- "Estado"
names(Cirs_Nomes)[5] <- "Municipio"
names(Cirs_Nomes)[6] <- "Nome_cgr"
names(Cirs_Nomes)[7] <- "Nome_municipio"


# Cirs_Nomes <- unique(Cirs_Nomes [,2:6])
#
# #Retira regiões não encontradas
# Cirs_Nomes <- Cirs_Nomes[Cirs_Nomes[[1]] != "99999",]
# #Cirs_Nomes <- Cirs_Nomes[Cirs_Nomes[[1]] != 99999,]
#
# Cirs_Nomes <- cbind(Cirs_Nomes ,"Municipio"="","Nome_municipio"="")
# Cirs_Nomes <- cbind(Cirs_Nomes ,"Cod_regiao" = substring(Cirs_Nomes[[1]],1,1))
# Cirs_Nomes <- Cirs_Nomes [,c(1,2,8,3,6,5,7)]
#
# #Alterar pra regiao
# names(Cirs_Nomes)[1] <- "REGIAO"
# names(Cirs_Nomes)[2] <- "Cod_estado"
# names(Cirs_Nomes)[3] <- "Cod_regiao"
# names(Cirs_Nomes)[4] <- "Estado"
# names(Cirs_Nomes)[5] <- "Municipio"
# names(Cirs_Nomes)[6] <- "Nome_cgr"
# names(Cirs_Nomes)[7] <- "Nome_municipio"

#str(Final_Num_CGR_PAGINA$Cgr) ;str(Cirs_Nomes)

Merge com os nomes das regiões

  • Ao final, é adicionado uma coluna para indicar o fim da base
  • Salva uma nova base com os padrões de importação da página do PROADESS - CGR
Final_Num_CGR_PAGINA$Cgr <- as.character(Final_Num_CGR_PAGINA$Cgr)

Final_Num_CGR_PAGINA <- merge(Cirs_Nomes,Final_Num_CGR_PAGINA, by.x = "REGIAO", by.y = "Cgr", all.x = T)

Final_Num_CGR_PAGINA <- cbind(Final_Num_CGR_PAGINA,"Falso"=1)


write.csv2(Final_Num_CGR_PAGINA,"./Base_Final_Proadess/Base_Pagina_COLUNA_CGR.csv",row.names=F, na = "-1")

#######################################################################################################

Passa as bases para o formato coluna

#UF
#RG
#BR

Final_Num_UF$Res_Ind <- as.numeric(Final_Num_UF$Res_Ind)
Final_Num_RG$Res_Ind <- as.numeric(Final_Num_RG$Res_Ind)
Final_Num_BR$Res_Ind <- as.numeric(Final_Num_BR$Res_Ind)

Final_Num_UF_PAGINA <- reshape2::dcast(Final_Num_UF, UF ~ Cod_indicador, value.var="Res_Ind")
Final_Num_UF_PAGINA <- cbind(Final_Num_UF_PAGINA,"Falso"=1)

Final_Num_RG_PAGINA <- reshape2::dcast(Final_Num_RG, RG ~ Cod_indicador, value.var="Res_Ind")
Final_Num_RG_PAGINA <- cbind(Final_Num_RG_PAGINA,"Falso"=1)

Final_Num_BR_PAGINA <- reshape2::dcast(Final_Num_BR, BR ~ Cod_indicador, value.var="Res_Ind")
Final_Num_BR_PAGINA <- cbind(Final_Num_BR_PAGINA,"Falso"=1)

Salva uma nova base com os padrões de importação da página do PROADESS - UF RG BR

write.csv2(Final_Num_UF_PAGINA,"./Base_Final_Proadess/Base_Pagina_COLUNA_UF.csv",row.names=F,na="-1")
write.csv2(Final_Num_RG_PAGINA,"./Base_Final_Proadess/Base_Pagina_COLUNA_RG.csv",row.names=F,na="-1")
write.csv2(Final_Num_BR_PAGINA,"./Base_Final_Proadess/Base_Pagina_COLUNA_BR.csv",row.names=F,na="-1")
#####################################################################################################

Geração de fichas - UF RG BR CGR

Ficha primária - UF RG BR

  • Importação da ficha primária UF RG BR
Ficha_UF_RG_BR <- read.csv2("./Tabelas_Auxiliares/Fichas/Primario/Primario_UF_RG_BR.csv", stringsAsFactors = F, colClasses = c("periodo_inic" = "numeric","periodo_fin" = "numeric"),  header = T, sep=";",dec=",", check.names = F, na.strings = "")
#str(Ficha_UF_RG_BR)

Finalização chamando a função que gera a ficha primária

  • Essa ficha, contém uma atualização da ficha de entrada, com anos iniciais e finas
  • Além de ser filtrada por indicadores que foram calculados
Ficha_UF_RG_BR <- Ficha_primaria(Final_Num_BR,Ficha_UF_RG_BR)
#str(Ficha_UF_RG_BR)
write.csv2(Ficha_UF_RG_BR,"./Base_Final_Proadess/Ficha_Primaria_UF_RG_BR_ANOI_ANOF.csv",row.names=F,na="")
#####################################################################################################

Ficha primária - CGR

  • Importação da ficha primária CGR
Ficha_CGR <- read.csv2("./Tabelas_Auxiliares/Fichas/Primario/Primario_CGR.csv", colClasses = c("periodo_inic" = "numeric","periodo_fin" = "numeric"),  header = T, sep=";",dec=",", check.names = F)
#str(Ficha_CGR)

Finalização chamando a função que gera a ficha primária

  • Essa ficha, contém uma atualização da ficha de entrada, com anos iniciais e finas
  • Além de ser filtrada por indicadores que foram calculados
Ficha_CGR <- Ficha_primaria(Final_Num_CGR,Ficha_CGR)
write.csv2(Ficha_CGR,"./Base_Final_Proadess/Ficha_Primaria_CGR_ANOI_ANOF.csv",row.names=F,na="")
######################################################################################################

Ficha Secundária - UF RG BR CGR

  • Importação dos textos das tabelas UF RG BR CGR
Textos_Tabelas_Secundario <- read.csv2("./Tabelas_Auxiliares/Fichas/Secundario/Textos_Tabelas_Secundario.csv",stringsAsFactors = F, header = TRUE, colClasses = c("ano"="numeric"), sep=";",dec=",", check.names = F)
#str(Textos_Tabelas_Secundario)

Executa a função Ficha_Secundária para UF, RG, BR e CGR

Ficha_Secundaria_UF_RG_BR <- Ficha_secundaria(Final_Num_BR,Textos_Tabelas_Secundario,Ficha_UF_RG_BR)
Ficha_Secundaria_CGR <- Ficha_secundaria(Final_Num_CGR,Textos_Tabelas_Secundario,Ficha_CGR)
write.csv2(Ficha_Secundaria_UF_RG_BR,"./Base_Final_Proadess/Ficha_Secundaria_UF_RG_BR.csv",row.names=F,na="")
write.csv2(Ficha_Secundaria_CGR,"./Base_Final_Proadess/Ficha_Secundaria_CGR.csv",row.names=F,na="")
#####################################################################################################

Remoção de objetos

#rm(list = c('Cirs','Cirs_Nomes','Ficha_Selecao_Filtrada'))
#rm(list = c('Final_Num_BR','Final_Num_UF','Final_Num_RG','Final_Num_CGR'))
rm(list = c('Final_Num_BR_PAGINA','Final_Num_UF_PAGINA','Final_Num_RG_PAGINA','Final_Num_CGR_PAGINA'))
rm(Textos_Tabelas_Secundario)
######################################################

sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
cat(sprintf("\n\n##### Fim da geração das Fichas primárias e secundárias #####\n##############\n"))
sink()
######################################################
#source("./1.2.0_Base_formato_pagina.R",encoding = "UTF-8", verbose = F, echo = F)
##### Fim da geração das Fichas primárias e secundárias #####
##############

FIM do programa

Mostra tempo de execução:

FIM <- Sys.time()
#INICIO <- Sys.time()
# cat(sprintf("\n##Tempo levado:\n"))
tempo3 <- lubridate::interval(lubridate::ymd_hms(INICIO),lubridate::ymd_hms(FIM))
#print(lubridate::as.duration(tempo3))
sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
cat(sprintf("\n\n###############################\n###############################\n#### Fim de todos os scripts!\n#### Tempo levado: '%s'\n###############################\n###############################\n",lubridate::as.duration(tempo3)))
sink()
#rm(list = ls()[!ls() %in% c("INICIO","FIM")]); invisible(gc())
######################################################
rm(list=ls()) ; invisible(gc())
###############################
###############################
#### Fim de todos os scripts!
#### Tempo levado: '0s'
###############################
###############################

Mostra Arquivos Gerados:

  • gerado arquivo de log ‘agregacao.txt’
  • Enviar lista abaixo para a página PROADESS:
sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
cat(sprintf("\n## Resultados Gerados (ENVIAR p/ PÁG):\nBase UF/GR/BR:\n"))
print(list.files("./Base_Final_Proadess", pattern = "*.csv", full.names = TRUE))
cat(sprintf("\nBase Mun/RS:\n"))
print(list.files("./Base_Selecao_Mun", pattern = "*.csv", full.names = TRUE))
cat(sprintf("\nLogs:\n"))
print(list.files("./logs", pattern = "*.txt", full.names = TRUE))
sink()
## Resultados Gerados (ENVIAR p/ PÁG):
Base UF/GR/BR:
 [1] "./Base_Final_Proadess/Base_completa_LONG_BR.csv"            
 [2] "./Base_Final_Proadess/Base_completa_LONG_CGR.csv"           
 [3] "./Base_Final_Proadess/Base_completa_LONG_RG.csv"            
 [4] "./Base_Final_Proadess/Base_completa_LONG_UF.csv"            
 [5] "./Base_Final_Proadess/Base_Pagina_COLUNA_BR.csv"            
 [6] "./Base_Final_Proadess/Base_Pagina_COLUNA_CGR.csv"           
 [7] "./Base_Final_Proadess/Base_Pagina_COLUNA_RG.csv"            
 [8] "./Base_Final_Proadess/Base_Pagina_COLUNA_UF.csv"            
 [9] "./Base_Final_Proadess/Ficha_Primaria_CGR_ANOI_ANOF.csv"     
[10] "./Base_Final_Proadess/Ficha_Primaria_UF_RG_BR_ANOI_ANOF.csv"
[11] "./Base_Final_Proadess/Ficha_Secundaria_CGR.csv"             
[12] "./Base_Final_Proadess/Ficha_Secundaria_UF_RG_BR.csv"        

Base Mun/RS:
[1] "./Base_Selecao_Mun/Base_Selecao.csv"        
[2] "./Base_Selecao_Mun/Selecoes_Finalizadas.csv"

Logs:
[1] "./logs/agregacao.txt"

arquivos compactados em ‘PAG.ZIP’

suppressMessages(suppressPackageStartupMessages(library("zip")))
zip::zipr("./PAG.zip",c("Base_Final_Proadess/","Base_Selecao_Mun/"))
sink("./logs/agregacao.txt", append = TRUE, split = TRUE)
cat(sprintf("\n## arquivos compactados em 'PAG.zip':\n"))
print(list.files(".", pattern = "*.zip", full.names = TRUE))
cat(sprintf("\n## Tamanho final do arquivo 'PAG.zip':\n"))
print(format(object.size("PAG.zip"),units = "auto"))
sink()
## arquivos compactados em 'PAG.zip':
[1] "./PAG.zip"

## Tamanho final do arquivo 'PAG.zip':
[1] "112 bytes"

Análise dos resultados:

source("imprime.resultado3.R", encoding = "UTF-8", echo = F)
##Resultados Salvos:
 [1] "Base_completa_LONG_BR.csv"            
 [2] "Base_completa_LONG_CGR.csv"           
 [3] "Base_completa_LONG_RG.csv"            
 [4] "Base_completa_LONG_UF.csv"            
 [5] "Base_Pagina_COLUNA_BR.csv"            
 [6] "Base_Pagina_COLUNA_CGR.csv"           
 [7] "Base_Pagina_COLUNA_RG.csv"            
 [8] "Base_Pagina_COLUNA_UF.csv"            
 [9] "Ficha_Primaria_CGR_ANOI_ANOF.csv"     
[10] "Ficha_Primaria_UF_RG_BR_ANOI_ANOF.csv"
[11] "Ficha_Secundaria_CGR.csv"             
[12] "Ficha_Secundaria_UF_RG_BR.csv"        
character(0)

## Lista Indicadores calculados :
 [1] "D_Nascidos_SINASC" "M01_N_SIM"         "M02_N_SIM"        
 [4] "M03_N_SIM"         "M04_N_SIM"         "M05_D_SIM"        
 [7] "M05_N_SIM"         "M06_N_SIM"         "M07_N_SIM"        
[10] "M08_N_SIM"         "M09_N_SIM"         "POP_HOMEM"        
[13] "POP_MULHER"        "POP_TOTAL"        

## período em Anos:
 [1] 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
[16] 2015 2016 2017
'data.frame':   1135689 obs. of  4 variables:
 $ Munic_res: chr  "110001" "110001" "110001" "110001" ...
 $ Ano      : int  2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 ...
 $ Ind      : chr  "D_Nascidos_SINASC" "M01_N_SIM" "M02_N_SIM" "M03_N_SIM" ...
 $ Freq     : num  617 10 3 2 13 13 15 18 7 7 ...
 Munic_res  Ano               Ind Freq
    110001 2000 D_Nascidos_SINASC  617
    110001 2000         M01_N_SIM   10
    110001 2000         M02_N_SIM    3
    110001 2000         M03_N_SIM    2
    110001 2000         M05_D_SIM   13
    110001 2000         M05_N_SIM   13

##Nascidos Vivos - L58 - Brasil:
   Ano               Ind      Freq
 2,000 D_Nascidos_SINASC 3,206,761
 2,001 D_Nascidos_SINASC 3,115,474
 2,002 D_Nascidos_SINASC 3,059,402
 2,003 D_Nascidos_SINASC 3,038,251
 2,004 D_Nascidos_SINASC 3,026,548
 2,005 D_Nascidos_SINASC 3,035,096
 2,006 D_Nascidos_SINASC 2,944,928
 2,007 D_Nascidos_SINASC 2,891,328
 2,008 D_Nascidos_SINASC 2,934,828
 2,009 D_Nascidos_SINASC 2,881,581
 2,010 D_Nascidos_SINASC 2,861,868
 2,011 D_Nascidos_SINASC 2,913,160
 2,012 D_Nascidos_SINASC 2,905,789
 2,013 D_Nascidos_SINASC 2,904,027
 2,014 D_Nascidos_SINASC 2,979,259
 2,015 D_Nascidos_SINASC 3,017,668
 2,016 D_Nascidos_SINASC 2,857,800
 2,017 D_Nascidos_SINASC 2,923,535

##Nascidos Vivos - L58 - UFs, Ano 2017:
   Ano UF    Freq
 2,017 11  27,503
 2,017 12  16,358
 2,017 13  78,066
 2,017 14  11,737
 2,017 15 138,684
 2,017 16  15,399
 2,017 17  24,935
 2,017 21 112,985
 2,017 22  48,551
 2,017 23 127,797
 2,017 24  46,222
 2,017 25  57,493
 2,017 26 135,932
 2,017 27  50,368
 2,017 28  33,867
 2,017 29 204,096
 2,017 31 260,959
 2,017 32  55,846
 2,017 33 223,224
 2,017 35 611,803
 2,017 41 157,701
 2,017 42  98,335
 2,017 43 141,568
 2,017 50  44,747
 2,017 51  57,271
 2,017 52  97,520
 2,017 53  44,568

##População total - L41:
   Ano       Ind        Freq
 2,000 POP_TOTAL 173,716,354
 2,001 POP_TOTAL 176,113,298
 2,002 POP_TOTAL 178,538,376
 2,003 POP_TOTAL 180,859,436
 2,004 POP_TOTAL 183,119,924
 2,005 POP_TOTAL 185,441,547
 2,006 POP_TOTAL 187,581,859
 2,007 POP_TOTAL 189,745,716
 2,008 POP_TOTAL 191,789,444
 2,009 POP_TOTAL 193,789,087
 2,010 POP_TOTAL 195,708,841
 2,011 POP_TOTAL 197,602,140
 2,012 POP_TOTAL 199,465,794
 2,013 POP_TOTAL 201,272,261
 2,014 POP_TOTAL 203,005,989
 2,015 POP_TOTAL 204,684,120
 2,016 POP_TOTAL 206,361,656
 2,017 POP_TOTAL 207,961,462

##População total - L41 - UFs, Ano 2017:
 UF   Ano       Freq
 11 2,017  1,811,839
 12 2,017    831,636
 13 2,017  4,085,801
 14 2,017    522,636
 15 2,017  8,382,764
 16 2,017    797,722
 17 2,017  1,554,228
 21 2,017  7,014,348
 22 2,017  3,231,359
 23 2,017  9,040,630
 24 2,017  3,507,003
 25 2,017  4,037,660
 26 2,017  9,485,368
 27 2,017  3,383,891
 28 2,017  2,292,150
 29 2,017 15,370,668
 31 2,017 21,137,689
 32 2,017  4,016,356
 33 2,017 16,725,007
 35 2,017 45,145,291
 41 2,017 11,337,028
 42 2,017  7,009,229
 43 2,017 11,341,048
 50 2,017  2,717,181
 51 2,017  3,352,612
 52 2,017  6,790,874
 53 2,017  3,039,444

##População total HOMENS - L41:
   Ano       Ind        Freq
 2,000 POP_HOMEM  86,305,651
 2,001 POP_HOMEM  87,472,207
 2,002 POP_HOMEM  88,612,655
 2,003 POP_HOMEM  89,723,946
 2,004 POP_HOMEM  90,802,705
 2,005 POP_HOMEM  91,917,657
 2,006 POP_HOMEM  92,949,566
 2,007 POP_HOMEM  93,981,777
 2,008 POP_HOMEM  94,953,501
 2,009 POP_HOMEM  95,916,690
 2,010 POP_HOMEM  98,901,646
 2,011 POP_HOMEM  99,899,325
 2,012 POP_HOMEM  98,599,934
 2,013 POP_HOMEM  99,465,694
 2,014 POP_HOMEM 102,735,669
 2,015 POP_HOMEM 101,082,398
 2,016 POP_HOMEM 104,464,735
 2,017 POP_HOMEM 102,701,983

##População total MULHERES - L41:
   Ano        Ind        Freq
 2,000 POP_MULHER  87,410,703
 2,001 POP_MULHER  88,641,091
 2,002 POP_MULHER  89,925,721
 2,003 POP_MULHER  91,135,490
 2,004 POP_MULHER  92,317,219
 2,005 POP_MULHER  93,523,890
 2,006 POP_MULHER  94,632,293
 2,007 POP_MULHER  95,763,939
 2,008 POP_MULHER  96,835,943
 2,009 POP_MULHER  97,872,397
 2,010 POP_MULHER  96,807,195
 2,011 POP_MULHER  97,702,815
 2,012 POP_MULHER 100,865,860
 2,013 POP_MULHER 101,806,567
 2,014 POP_MULHER 100,270,320
 2,015 POP_MULHER 103,601,722
 2,016 POP_MULHER 101,896,921
 2,017 POP_MULHER 105,259,480

##População total - L41:
   Ano      homens    mulheres       total      total2
 2,000  86,305,651  87,410,703 173,716,354 173,716,354
 2,001  87,472,207  88,641,091 176,113,298 176,113,298
 2,002  88,612,655  89,925,721 178,538,376 178,538,376
 2,003  89,723,946  91,135,490 180,859,436 180,859,436
 2,004  90,802,705  92,317,219 183,119,924 183,119,924
 2,005  91,917,657  93,523,890 185,441,547 185,441,547
 2,006  92,949,566  94,632,293 187,581,859 187,581,859
 2,007  93,981,777  95,763,939 189,745,716 189,745,716
 2,008  94,953,501  96,835,943 191,789,444 191,789,444
 2,009  95,916,690  97,872,397 193,789,087 193,789,087
 2,010  98,901,646  96,807,195 195,708,841 195,708,841
 2,011  99,899,325  97,702,815 197,602,140 197,602,140
 2,012  98,599,934 100,865,860 199,465,794 199,465,794
 2,013  99,465,694 101,806,567 201,272,261 201,272,261
 2,014 102,735,669 100,270,320 203,005,989 203,005,989
 2,015 101,082,398 103,601,722 204,684,120 204,684,120
 2,016 104,464,735 101,896,921 206,361,656 206,361,656
 2,017 102,701,983 105,259,480 207,961,462 207,961,462

##População total - L41 - UFs, Ano 2017:
 UF   Ano       Freq
 11 2,017  1,811,839
 12 2,017    831,636
 13 2,017  4,085,801
 14 2,017    522,636
 15 2,017  8,382,764
 16 2,017    797,722
 17 2,017  1,554,228
 21 2,017  7,014,348
 22 2,017  3,231,359
 23 2,017  9,040,630
 24 2,017  3,507,003
 25 2,017  4,037,660
 26 2,017  9,485,368
 27 2,017  3,383,891
 28 2,017  2,292,150
 29 2,017 15,370,668
 31 2,017 21,137,689
 32 2,017  4,016,356
 33 2,017 16,725,007
 35 2,017 45,145,291
 41 2,017 11,337,028
 42 2,017  7,009,229
 43 2,017 11,341,048
 50 2,017  2,717,181
 51 2,017  3,352,612
 52 2,017  6,790,874
 53 2,017  3,039,444

##Número de óbitos infantis - N_M01 - Brasil:
   Ano       Ind   Freq
 2,000 M01_N_SIM 68,211
 2,001 M01_N_SIM 62,010
 2,002 M01_N_SIM 59,137
 2,003 M01_N_SIM 57,764
 2,004 M01_N_SIM 54,343
 2,005 M01_N_SIM 51,780
 2,006 M01_N_SIM 48,341
 2,007 M01_N_SIM 45,372
 2,008 M01_N_SIM 44,100
 2,009 M01_N_SIM 42,664
 2,010 M01_N_SIM 39,874
 2,011 M01_N_SIM 39,759
 2,012 M01_N_SIM 39,123
 2,013 M01_N_SIM 38,966
 2,014 M01_N_SIM 38,432
 2,015 M01_N_SIM 37,503
 2,016 M01_N_SIM 36,352
 2,017 M01_N_SIM 36,223

##Número de óbitos infantis - N_M01 - UFs, Ano 2017:
 UF   Ano  Freq
 11 2,017   353
 12 2,017   223
 13 2,017 1,292
 14 2,017   210
 15 2,017 2,136
 16 2,017   302
 17 2,017   309
 21 2,017 1,787
 22 2,017   757
 23 2,017 1,688
 24 2,017   569
 25 2,017   764
 26 2,017 1,648
 27 2,017   675
 28 2,017   521
 29 2,017 3,081
 31 2,017 2,982
 32 2,017   596
 33 2,017 2,770
 35 2,017 6,680
 41 2,017 1,633
 42 2,017   976
 43 2,017 1,425
 50 2,017   473
 51 2,017   720
 52 2,017 1,159
 53 2,017   494

##Taxa Mortalidade infantil - M01 - UF, ano 2017:
  Ano UF N_obitos_0_anos D_nascidos_vivos taxa_M01
 2017 11             353            27503     12.8
 2017 12             223            16358     13.6
 2017 13            1292            78066     16.6
 2017 14             210            11737     17.9
 2017 15            2136           138684     15.4
 2017 16             302            15399     19.6
 2017 17             309            24935     12.4
 2017 21            1787           112985     15.8
 2017 22             757            48551     15.6
 2017 23            1688           127797     13.2
 2017 24             569            46222     12.3
 2017 25             764            57493     13.3
 2017 26            1648           135932     12.1
 2017 27             675            50368     13.4
 2017 28             521            33867     15.4
 2017 29            3081           204096     15.1
 2017 31            2982           260959     11.4
 2017 32             596            55846     10.7
 2017 33            2770           223224     12.4
 2017 35            6680           611803     10.9
 2017 41            1633           157701     10.4
 2017 42             976            98335      9.9
 2017 43            1425           141568     10.1
 2017 50             473            44747     10.6
 2017 51             720            57271     12.6
 2017 52            1159            97520     11.9
 2017 53             494            44568     11.1

##Taxa Mortalidade infantil - M01 - Brasil:
  Ano N_obitos_0_anos D_nascidos_vivos taxa_M01
 2000           68211          3206761     21.3
 2001           62010          3115474     19.9
 2002           59137          3059402     19.3
 2003           57764          3038251     19.0
 2004           54343          3026548     18.0
 2005           51780          3035096     17.1
 2006           48341          2944928     16.4
 2007           45372          2891328     15.7
 2008           44100          2934828     15.0
 2009           42664          2881581     14.8
 2010           39874          2861868     13.9
 2011           39759          2913160     13.6
 2012           39123          2905789     13.5
 2013           38966          2904027     13.4
 2014           38432          2979259     12.9
 2015           37503          3017668     12.4
 2016           36352          2857800     12.7
 2017           36223          2923535     12.4

##### FIM ######