Punições

Estrutura de análise

Neste capítulo, vamos investigar as punições aplicadas aos cadastrados no CNIA. Os sete tipos de condenação da base são:

Em vários momentos a análise separará os casos em que a condenação foi proferida por um órgão colegiado ou se o processo já transitou em julgado. Essa separação é importante por dois motivos: (i) sentenças que transitaram em julgado são mais "definitivas", uma vez que não podem ser anuladas em recurso, e (ii) sentenças que transitaram em julgado provavelmente foram, serão ou estão sendo cumpridas.

Os padrões de aplicação dos sete tipos de punição mencionados acima serão analisados nas subseções seguintes, levando em conta as questões norteadoras no capítulo de estratégia de análise.

# tidy_cnc %>%
#   filter(!assunto_penal_any) %>% 
#   gather(key, val, starts_with('teve_')) %>% 
#   filter(val) %>% 
#   count(tipo_pessoa, key) %>% 
#   mutate(prop = n / sum(n)) %>%
#   ungroup() %>% 
#   mutate(key = str_to_title(str_extract(key, '[a-z]+$'))) %>% 
#   arrange(tipo_pessoa, desc(prop)) %>% 
#   mutate(key = fct_reorder(key, prop, first, .desc = TRUE)) %>% {
#     ggplot(., aes(x = key, y = prop)) +
#       geom_col(aes(fill = tipo_pessoa), 
#                position = 'dodge') +
#       scale_fill_hue(name = 'Tipo de pessoa') +
#       scale_y_continuous(labels = scales::percent) +
#       theme_bw(14) +
#       theme(axis.text.x = element_text(angle = 45, hjust = 1))
#   }

Análises

Frequência

As punições mais frequentes do CNIA são a inelegibilidade à cargos públicos e a pena privativa de liberdade. Essas duas punições aparecem em 80% e 50% dos casos, respectivamente. As outras punições estão próximas ao patamar de 20%, com exceção da perda do cargo público e obrigação de devolver os bens ilicitamente obtidos.

tidy_cnc %>% 
  ungroup() %>% 
  select(dplyr::contains("teve")) %>% 
  gather(tipo_pena, teve) %>% 
  group_by(tipo_pena) %>% 
  count(teve) %>% 
  group_by(tipo_pena) %>% 
  arrange(tipo_pena, teve) %>% 
  summarise(prop = n[2]/sum(n)) %>% 
  mutate(tipo_pena2 = str_to_title(str_extract(tipo_pena,"[a-z]+$"))) %>% 
  ungroup() %>% 
  mutate(tipo_pena2 = fct_reorder(tipo_pena2, -prop)) %>% 
  ggplot(aes(x = tipo_pena2, y = prop)) +
  geom_bar(stat = 'identity', fill = 'royalblue', color = 'black') +
  theme_bw(15) +
  theme(axis.text.x = element_text(angle = 45, vjust = 0.65)) +
  scale_y_continuous(labels = scales::percent)

Tipos de dano

As proporções dos tipos de condenação são diferentes quando consideramos processos criminais e cíveis. Nos dois casos, as condenações de maior frequência relativa são Inelegiblidade e Penas privativas de liberdade, mas nas condenações cíveis há uma maior pulverização nas demais categorias.

O impacto dos tipos de processo nas penas que são aplicadas é diferente dependendo da situação da pena. Nos processos cíveis, comparando os processos que transitaram em julgado e os demais, verifica-se há uma queda de cerca de 10% em todas as condenações. Já nos processos criminais a situação é mais dramática. Em praticamente todos os processos a inelegibilidade é uma das sanções aplicadas, entretanto, há um aumento na proporção de multas e suspensões quando comparamos os processos que transitaram em julgado e os demais.

tidy_cnc %>%
  gather(key, teve, starts_with('teve_')) %>% 
  group_by(tipo_pena, assunto_penal_any, key) %>% 
  count(teve) %>% 
  group_by(tipo_pena, assunto_penal_any, key) %>% 
  summarise(prop = n[2]/sum(n, na.rm = T)) %>%   
  ungroup() %>% 
  mutate(key = str_to_title(str_extract(key, '[a-z]+$')),
         assunto_penal_any = ifelse(assunto_penal_any, "Penal","Cível")) %>% 
  arrange(assunto_penal_any, desc(prop)) %>% 
  mutate(key = fct_reorder(key, prop, first, .desc = TRUE)) %>% {
    ggplot(., aes(x = assunto_penal_any, y = prop)) +
      geom_col(aes(fill = key), 
               position = 'dodge') +
      scale_fill_hue(name = 'Punição') +
      scale_y_continuous(labels = scales::percent) +
      theme_bw(14) +
      theme(axis.text.x = element_text(angle = 45, hjust = 1),
            legend.position = 'bottom') +
      facet_wrap(~tipo_pena) +
      xlab("Tipo de processo") +
      ylab("Proporção de\ncondenações")
   }
#é o mesmo gráfico de cima, mas separado por instancia. só tem um quadro que vale a pena comentar: os processos que transitam em julgado direto da primeira instância são mais uniformes nas penas. provavelmente por issso que terminaram transitando em julgado logo de cara...
# tidy_cnc %>%
#   distinct(n_processo, .keep_all = T) %>% 
#   gather(key, val, starts_with('teve_')) %>% 
#   filter(val) %>% 
#   group_by(tipo_pena, instancia) %>% 
#   count(assunto_penal_any, key) %>% 
#   mutate(prop = n / sum(n)) %>%
#   ungroup() %>% 
#   mutate(key = str_to_title(str_extract(key, '[a-z]+$'))) %>% 
#   arrange(assunto_penal_any, desc(prop)) %>% 
#   mutate(key = fct_reorder(key, prop, first, .desc = TRUE)) %>% {
#     ggplot(., aes(x = key, y = prop)) +
#       geom_col(aes(fill = assunto_penal_any), 
#                position = 'dodge') +
#       scale_fill_hue(name = 'Classificação criminal') +
#       scale_y_continuous(labels = scales::percent) +
#       theme_bw(14) +
#       theme(axis.text.x = element_text(angle = 45, hjust = 1),
#             legend.position = 'bottom') +
#       facet_grid(instancia~tipo_pena)
#   }

A intensidade das punições varia de acordo com a intensidade dano causado. Na base do CNIA, estamos considerando a existência de dois tipos de ano, o patrimonial e o moral, ocasionado por contravenções penais dos representantes do estado.

A mensuração da intensidade do danos nesses dois casos é feita de maneiras diferentes. No caso dos danos patrimoniais, a intensidade do dano é medida pelo valor exigido como ressarcimento. Já no caso dos processos criminais, a intensidade é medida pelo tipo de crime cometido.

No caso das condenações causadas por danos patrimoniais, verificam-se variações nas proporções de cada tipo de punição que dependem da magnitude do dano. Nos processo com os maiores 10% em valor de ressarcimento, verifica-se que a proporção de Suspensões, Proibições e Inelegibilidade chegam a 80%. Nos processos com os menores 10% de valor de ressarcimento, essas mesmas proporções estão no patamar de 50%.

tidy_cnc %>%
  ungroup() %>% 
  distinct(n_processo, .keep_all = T) %>%
  filter(vl_ressarcimento > 0, teve_ressarcimento) %>%
  mutate(vl_ressarcimento_class = cut(vl_ressarcimento, quantile(vl_ressarcimento,cumsum(c(0,rep(0.1,10)))), labels = F)) %>%
  gather(key, val, starts_with('teve_')) %>%
  filter(val) %>%
  group_by(vl_ressarcimento_class) %>%
  mutate(total = sum(key=="teve_ressarcimento")) %>%
  group_by(vl_ressarcimento_class, key) %>%
  summarise(n = n(), total = total[1]) %>% 
  mutate(prop = n / total) %>%
  ungroup() %>%
  mutate(vl_ressarcimento_class = as.numeric(vl_ressarcimento_class),
         key = str_to_title(str_extract(key, "[a-z]+$")),
         key = fct_reorder(key,-prop,mean)) %>%
  filter(prop < 1) %>% 
  ggplot(aes(x = vl_ressarcimento_class, y = prop, col = key)) +
  geom_smooth(alpha = 0) +
  theme_bw(15) +
  xlab("Quantil do ressarcimento") +
  ylab("Proporção de condenações") +
  scale_y_continuous(labels = scales::percent) +
  scale_x_continuous(breaks = 1:10) +
  scale_colour_hue(name = 'Punição')
# dentro dos casos em que tem ressarcimento a coisa não muda  
# tidy_cnc %>%
#   distinct(n_processo, .keep_all = T) %>% 
#   filter(vl_ressarcimento > 0, teve_ressarcimento) %>% 
#   mutate(vl_ressarcimento_class = cut(vl_ressarcimento, quantile(vl_ressarcimento,cumsum(c(0,rep(0.1,10)))), labels = F)) %>% 
#   gather(key, val, starts_with('teve_')) %>% 
#   filter(val) %>% 
#   group_by(tipo_pena, vl_ressarcimento_class) %>% 
#   count(key) %>% 
#   mutate(prop = n / sum(n, na.rm = T)) %>%
#   ungroup() %>% 
#   mutate(vl_ressarcimento_class = as.numeric(vl_ressarcimento_class)) %>% 
#   ggplot(aes(x = vl_ressarcimento_class, y = prop, col = key)) +
#   geom_point() +
#   facet_wrap(~tipo_pena) +
#   theme_bw(15) +
#   scale_x_continuous(breaks = 1:10)

Nas condenações criminais, não é possível identificar variações desse tipo.

joga_resto_no_outros <- function(string, N, labell = 'outros'){

d <- data_frame(coluna = string)

left_join(d, y = d %>% count(coluna), by = 'coluna') %>% 
  mutate(coluna = ifelse(n < N, labell, coluna)) %>% 
  with(coluna)
}

lista_de_regex <- list(regex_roubo = regex("roubo", ignore_case = T),
regex_homicidio = regex("homic[íi]dio|Crimes conta a vida", ignore_case = T),
regex_estupro = regex("estupro|dignidade sexual", ignore_case = T),
regex_trafico = regex("tr[áa]fico", ignore_case = T),
regex_quadrila = regex("quadrilha", ignore_case = T),
regex_chaci = regex("Adulteração de Sinal Identificador de Veículo", ignore_case = T),
regex_receptacao = regex("Receptação", ignore_case = T),
regex_furto = regex("Furto", ignore_case  = T),
regex_patrimonio = regex("Crimes contra o Patrimônio|Crimes contra a Ordem Tributária|Crimes Praticados por Particular Contra a Administração em Geral|Crimes Praticados por Funcionários Públicos Contra a Administração em Geral|Crimes Praticados por Particular Contra a Administração Pública Estrangeira|Crimes contra a Economia Popular|Crimes Contra as Finanças Públicas|Crimes previstos na legislação extravagante", ignore_case = T))

troca_string_por_regex <- function(vetor, regexes){
map_chr(vetor, function(x){
       pareamentos <- map(regexes, str_detect, string = x) %>% 
       keep(~.x) %>% 
       names %>% 
       paste(collapse = ', ')

       if(pareamentos == ''){pareamentos <- x}
       return(pareamentos)
      })}

tidy_cnc %>%
  distinct(n_processo, .keep_all = T) %>%
  filter(assunto_penal_any) %>%
  gather(key, val, starts_with('teve_')) %>%
  filter(val) %>%
  #mutate(assunto_nm_1 = str_extract(assunto_nm_1, regex("^[a-zçãéíéóúâêúá]+", ignore_case = T))) %>% 
  mutate(assunto_nm_1 = troca_string_por_regex(assunto_nm_1, lista_de_regex),
         assunto_nm_1 = joga_resto_no_outros(assunto_nm_1, 400),
         assunto_nm_1 = str_to_title(str_replace(assunto_nm_1, "regex_","")), 
         assunto_nm_1 = fct_relevel(assunto_nm_1,
                                    'Outros',
                                    'Direito Penal',
                                    'Patrimonio',
                                    'Receptacao',
                                    'Estelionato',
                                    'Roubo',
                                    'Trafico',
                                    'Estupro',
                                    'Homicidio')) %>% 
  group_by(assunto_nm_1) %>%
  count(key) %>%
  mutate(prop = n / sum(n, na.rm = T)) %>% 
  ungroup() %>%
  mutate(key = str_to_title(str_extract(key, "[a-z]+$"))) %>%
  filter(key %in% c("Inelegivel","Pena","Suspensao","Multa")) %>% 
  ggplot(aes(x = assunto_nm_1, y = prop, fill = assunto_nm_1)) +
  geom_bar(stat = 'identity', position = 'dodge') +
  theme_bw(15) +
  xlab("Assunto processual") +
  ylab("Proporção de condenações") +
  scale_colour_hue(name = 'Punição') +
  facet_wrap(~key) +
  scale_y_continuous(labels = scales::percent) + 
  theme(axis.text.x = element_text(angle = 90),
        legend.position = 'none') 

Tempo

Identifica-se uma diminuição nas proporções de condenação dos processos criminais. Nos processos cíveis, entretanto, essa variação não é identificada.

tidy_cnc %>%
  filter(dt_pena > min(dt_cadastro)) %>% 
  distinct(n_processo, .keep_all = T) %>% 
  mutate(ano = year(dt_pena)) %>% 
  filter(ano <= 2015) %>% 
  gather(key, val, starts_with('teve_')) %>% 
  group_by(ano, key, assunto_penal_any) %>% 
  mutate(peso = 1/n()) %>% 
  count(val, wt = peso) %>% 
  rename(prop = n) %>% 
  ungroup() %>% 
  filter(val) %>% 
  mutate(key = str_to_title(str_extract(key, "[a-z]+$")),
         assunto_penal_any = ifelse(assunto_penal_any, "Processos\ncriminais","Processos\ncíveis")) %>% 
  ggplot(aes(x = ano, y = prop, color = key)) +
  geom_line() +
  theme_bw(15) +
  scale_color_hue(name = 'Punições') +
  theme(legend.position = 'bottom',
        axis.text.x = element_text(angle = 45, vjust = 0.5)) +
  scale_x_continuous(breaks = 2008:2015) +
  scale_y_continuous(labels = scales::percent, breaks = seq(0,.9,.1)) +
  ylab("Propoção de processos") +
  xlab("Ano da condenação") +
  facet_wrap(~assunto_penal_any)

Órgãos

Na análise por órgão público, não verifica-se muita variação nas proporções de cada tipo de condenação. Os destaques ficam apenas nos processos relacionados à Secretaria de Segurança Pública do Estado de São Paulo e às condenações sem cargo, com alto número de condenações à inelegibilidade e penas privativas de liberdade.

regexes_orgao <- list(regex_vereadores = regex("vereadores|c[aâ]mara", ignore_case = T),
regex_secretaria = regex("secretaria", ignore_case = T),
regex_municipio = regex("^munic[íi]pio", ignore_case = T),
regex_prefeitura = regex("prefeitura", ignore_case = T),
regex_assembleia_legislativa = regex("assembl[ée]ia legis", ignore_case = T),
regex_policia = regex("pol[íi]cia", ignore_case = T),
regex_poder_executivo = regex("executivo|poder executivo", ignore_case = T),
regex_poder_legislativo = regex("(poder )?legislativo", ignore_case = T),
regex_hospital = regex("hospitais", ignore_case = T),
regex_correios = regex("correio|ect|ebct", ignore_case = T),
regex_caixa = regex("CAIXA ECON[Ôo]MICA FEDERAL|cef", ignore_case = T),
regex_inss = regex("INSTITUTO NACIONAL DO SEGURO|INSS", ignore_case = T))

troca_string_por_regex <- function(vetor, regexes){
map_chr(vetor, function(x){
       pareamentos <- map(regexes, str_detect, string = x) %>% 
       keep(~.x) %>% 
       names %>% 
       paste(collapse = ', ')

       if(pareamentos == ''){pareamentos <- x}
       return(pareamentos)
})}

joga_resto_no_outros <- function(string, N, labell = 'outros'){

d <- data_frame(coluna = string)

left_join(d, y = d %>% count(coluna), by = 'coluna') %>% 
  mutate(coluna = ifelse(n < N, labell, coluna)) %>% 
  with(coluna)
}

# tidy_cnc %>% 
#   mutate(classe_orgao = troca_string_por_regex(orgao, regexes_orgao),
#          classe_orgao = joga_resto_no_outros(classe_orgao, 20),
#          classe_orgao = str_replace_all(classe_orgao,"regex_","")) %>% 
#   filter(dt_pena > min(dt_cadastro)) %>% 
#   distinct(n_processo, .keep_all = T) %>% 
#   gather(key, val, starts_with('teve_')) %>% 
#   filter(val) %>%
#   count(classe_orgao, key, assunto_penal_any) %>% 
#   group_by(classe_orgao, assunto_penal_any) %>% 
#   mutate(prop = n / sum(n),
#          key = str_to_title(str_extract(key, "[a-z]+$"))) %>% 
#   ggplot(aes(x = classe_orgao, y = prop)) +
#   geom_bar(stat = 'identity') +
#   facet_grid(key~assunto_penal_any) +
#   scale_y_continuous(labels = scales::percent, breaks = c(0,.5,.15,.30,.45,.50))
#   theme(axis.text.x = element_text(angle = 90))

tidy_cnc %>% 
  mutate(classe_orgao = troca_string_por_regex(orgao, regexes_orgao),
         classe_orgao = joga_resto_no_outros(classe_orgao, 20),
         classe_orgao = str_replace_all(classe_orgao,"regex_|_",""),
         classe_orgao = str_to_title(classe_orgao)) %>% 
  filter(dt_pena > min(dt_cadastro)) %>% 
  distinct(n_processo, .keep_all = T) %>% 
  gather(key, val, starts_with('teve_')) %>% 
  filter(val) %>%
  count(classe_orgao, key) %>% 
  group_by(classe_orgao) %>% 
  mutate(prop = n / sum(n),
         key = str_to_title(str_extract(key, "[a-z]+$"))) %>% 
  ggplot(aes(x = classe_orgao, y = prop)) +
  geom_bar(stat = 'identity') +
  facet_wrap(~key) +
  theme_bw(15) +
  scale_y_continuous(labels = scales::percent, breaks = c(0,.5,.15,.30,.45,.50)) +
  theme(axis.text.x = element_text(angle = 90))

Instância

As punições aplicadas são diferentes dependendo da instância em que a decisão foi proferida. Essa diferença está associada ao estado da pena no momento da análise. Isso quer dizer que as decisões proferidas em primeira instância que não transitaram em julgado são diferentes das que ainda não transitaram.

As condenações proferidas em primeira instância que transitaram em julgado são muito mais brandas do que as que ainda aguardam recursos. A proporção de sentenças de Inelegibilidade e Penas privativas de liberdade caem de aproximadamente 40% para 20%.

As condenações proferidas em segunda instância punem com inelegibilidade os condenados, e isso independe do status da decisão. Entretanto, as penas privativas de liberdade tendem a desaparecer quando analisamos os processos de segunda instância que transitaram em julgado. Isso pode indicar que as sentenças de pena privativa de liberdade proferidas em segunda instância são revistas antes do trânsito em julgado do processo.

tidy_cnc %>%
  filter(dt_pena > min(dt_cadastro), instancia %in% c("1 grau","2 grau")) %>%
  distinct(n_processo, .keep_all = T) %>%
  gather(key, val, starts_with('teve_')) %>%
  filter(val) %>%
  count(instancia, key) %>%
  group_by(instancia) %>%
  mutate(prop = n / sum(n),
         key = str_to_title(str_extract(key, "[a-z]+$"))) %>%
  ggplot(aes(x = instancia, y = prop)) +
  geom_bar(stat = 'identity', aes(fill = key), position = 'dodge') +
  theme_bw(15) +
  scale_y_continuous(labels = scales::percent, breaks = c(0,.5,.15,.30,.45,.50)) +
  theme(axis.text.x = element_text(angle = 90))

tidy_cnc %>% 
  filter(dt_pena > min(dt_cadastro), instancia %in% c("1 grau","2 grau")) %>%
  distinct(n_processo, .keep_all = T) %>% 
  gather(key, val, starts_with('teve_')) %>% 
  filter(val) %>%
  count(instancia, key, tipo_pena) %>% 
  group_by(instancia, tipo_pena) %>% 
  mutate(prop = n / sum(n),
         key = str_to_title(str_extract(key, "[a-z]+$"))) %>% 
  ggplot(aes(x = instancia, y = prop)) +
  geom_bar(stat = 'identity', aes(fill = key), position = 'dodge') +
  theme_bw(15) +
  scale_y_continuous(labels = scales::percent, breaks = c(0,.5,.15,.30,.45,.50)) +
  theme(axis.text.x = element_text(angle = 90)) +
  facet_wrap(~tipo_pena)

Esfera

Cortes estaduais punem os condenados com maior severidade do que cortes federais. Além disso

tidy_cnc %>% 
  distinct(n_processo, .keep_all = T) %>% 
  gather(key, val, starts_with('teve_')) %>% 
  filter(val) %>%
  count(esfera_processo, key) %>% 
  group_by(esfera_processo) %>% 
  mutate(prop = n / sum(n),
         key = str_to_title(str_extract(key, "[a-z]+$"))) %>% 
  filter(esfera_processo != "Superior") %>% 
  ggplot(aes(x = esfera_processo, y = prop)) +
  geom_bar(stat = 'identity', aes(fill = key), position = 'dodge') +
  theme_bw(15) +
  scale_y_continuous(labels = scales::percent, breaks = c(0,.5,.15,.30,.45,.50)) +
  theme(axis.text.x = element_text(angle = 90))

Tipo de Pessoa

tidy_cnc %>%
  gather(key, val, starts_with('teve_')) %>% 
  mutate(key = str_to_title(str_extract(key, '[a-z]+$'))) %>% 
  filter(val) %>% 
  count(tipo_pena, tipo_pessoa, key) %>% 
  mutate(prop = n / sum(n)) %>%
  ungroup() %>% 
  arrange(tipo_pessoa, desc(prop)) %>% 
  mutate(key = fct_reorder(key, prop, first, .desc = TRUE)) %>% {
    ggplot(., aes(x = tipo_pessoa, y = prop)) +
      geom_col(aes(fill = key), 
               position = 'dodge') +
      scale_fill_hue(name = 'Tipo de pessoa') +
      scale_y_continuous(labels = scales::percent) +
      theme_bw(14) +
      theme(axis.text.x = element_text(angle = 0, hjust = 1)) +
      facet_wrap(~tipo_pena)
  }

Distribuição Geográfica

preve_prob_uf <- function(pena){
  ajustes %>% 
    filter(str_detect(term,"Intercept|uf"), str_detect(modelo,pena)) %>%
    mutate(id = 1:n(),
          linpred = ifelse(id == 1, estimate[1], estimate[1] + estimate),
          prob = exp(linpred)/(1+exp(linpred)),
          id = ifelse(id == 1, "SP", 
                      str_replace_all(term,"uf_processo",""))) %>% 
    select(id, prob)
}
preve_prob_uf("inelegivel") %>% 
  inner_join(br_uf_map) %>% {
      ggplot(.) +
        geom_map(aes(x = long, y = lat, map_id = id, fill = prob), color = 'gray30', map = ., data = .) +
        coord_equal() +
        theme_void() +
      scale_fill_continuous(low = 'white', high = 'green', name = 'Probabilidade\nde\nInelegibilidade')
    }
cortes <- c(0,.5,1,.75,2,5,10,20,40,60)

brks <- cut(c(cortes), breaks = c(cortes))

lbs <- purrr::map2_chr(cortes, lead(cortes),~paste(.x,"a",.y))
lbs[length(cortes)] <- paste0(max(cortes),"+")

tidy_cnc %>%
    mutate(id = uf_processo) %>%
    filter(!assunto_penal_any) %>% 
    gather(key, val, starts_with('teve_')) %>% 
    mutate(key = str_to_title(str_extract(key, '[a-z]+$'))) %>% 
    filter(key %in% c("Ressarcimento","Multa","Inelegivel","Cargo"), val) %>% 
    count(id, key) %>% 
    inner_join(pnud_uf, 'id') %>%
    mutate(tx_cond = n / popt * 100000) %>%
    ungroup() %>% 
    complete(id, key, fill = list(tx_cond = 0)) %>% 
    mutate(tx_cond = cut(tx_cond, cortes, include.lowest = T)) %>%
    inner_join(br_uf_map) %>% {
      ggplot(.) +
        geom_map(aes(x = long, y = lat, map_id = id, fill = tx_cond), color = 'gray30', map = ., data = .) +
        scale_fill_brewer(palette = 'PuRd', breaks = brks, labels = lbs, name = 'Taxa de condenação') + 
        coord_equal() +
        theme_void() +
        facet_wrap(~key, ncol = 2, nrow = 2)
    }
cortes <- c(0,.5,1,.75,2,5,10,20,40,60)

brks <- cut(c(cortes), breaks = c(cortes))

lbs <- purrr::map2_chr(cortes, lead(cortes),~paste(.x,"a",.y))
lbs[length(cortes)] <- paste0(max(cortes),"+")

tidy_cnc %>%
    mutate(id = uf_processo) %>%
    filter(!assunto_penal_any,tipo_pena == "Órgão colegiado") %>% 
    gather(key, val, starts_with('teve_')) %>% 
    mutate(key = str_to_title(str_extract(key, '[a-z]+$'))) %>% 
    filter(key %in% c("Ressarcimento","Multa","Inelegivel","Cargo"), val) %>% 
    count(id, key) %>% 
    inner_join(pnud_uf, 'id') %>%
    mutate(tx_cond = n / popt * 100000) %>%
    ungroup() %>% 
    complete(id, key, fill = list(tx_cond = 0)) %>% 
    mutate(tx_cond = cut(tx_cond, cortes, include.lowest = T)) %>%
    inner_join(br_uf_map) %>% {
      ggplot(.) +
        geom_map(aes(x = long, y = lat, map_id = id, fill = tx_cond), color = 'gray30', map = ., data = .) +
        scale_fill_brewer(palette = 'PuRd', breaks = brks, labels = lbs, name = 'Taxa de condenação') + 
        coord_equal() +
        theme_void() +
        facet_wrap(~key, ncol = 2, nrow = 2)
    }
cortes <- c(0,.5,1,.75,2,5,10,20,40,60)

brks <- cut(c(cortes), breaks = c(cortes))

lbs <- purrr::map2_chr(cortes, lead(cortes),~paste(.x,"a",.y))
lbs[length(cortes)] <- paste0(max(cortes),"+")

tidy_cnc %>%
    mutate(id = uf_processo) %>%
    filter(assunto_penal_any) %>% 
    gather(key, val, starts_with('teve_')) %>% 
    mutate(key = str_to_title(str_extract(key, '[a-z]+$'))) %>% 
    filter(key %in% c("Pena","Multa"), val) %>% 
    count(id, key) %>% 
    inner_join(pnud_uf, 'id') %>%
    mutate(tx_cond = n / popt * 100000) %>%
    ungroup() %>% 
    complete(id, key, fill = list(tx_cond = 0)) %>% 
    mutate(tx_cond = cut(tx_cond, cortes, include.lowest = T)) %>%
    inner_join(br_uf_map) %>% {
      ggplot(.) +
        geom_map(aes(x = long, y = lat, map_id = id, fill = tx_cond), color = 'gray30', map = ., data = .) +
        scale_fill_brewer(palette = 'PuRd', breaks = brks, labels = lbs, name = 'Taxa de condenação') + 
        coord_equal() +
        theme_void() +
        facet_wrap(~key, ncol = 2, nrow = 2)
    }


abjur/inacBook documentation built on May 10, 2019, 4:12 a.m.