Inconsistências

Duração vazia segundo os dois métodos

tidy_cnc %>% 
  gather(key, val, teve_pena, teve_proibicao, teve_suspensao) %>% 
  filter(val) %>% 
  group_by(key) %>% 
  do({
    nome_var <- str_extract(.$key[1], '[a-z]+$')
    select(., matches(paste0('duracao_', nome_var))) %>% 
      setNames(c('a', 'b')) %>% 
      count(na_regex = is.na(a), na_site = is.na(b))
  }) %>% 
  ungroup()

Duração diferente usando dois métodos (regex e diferença entre "de" e "até").

tol <- 20
tidy_cnc %>% 
  gather(key, val, teve_pena, teve_proibicao, teve_suspensao) %>% 
  filter(val) %>% 
  group_by(key) %>% 
  do(lst = {
    nome_var <- str_extract(.$key[1], '[a-z]+$')
    select(., matches(paste0('duracao_', nome_var))) %>% 
      setNames(c('a', 'b')) %>% 
      count(bug = abs(as.numeric(a - b)) > tol)
  }) %>% 
  unnest(lst) %>% 
  group_by(key) %>% 
  summarise(n_bug = sum(n[bug], na.rm = TRUE),
            prop_bug = n_bug / sum(n[!is.na(bug)]))

Tempo de processos

Lógica

Propositura -> (cadastro) -> pena -> (cadastro)

Não pode: - propositura após cadastro - pena antes de propositura

Propositura após cadastros está OK. Para pena antes de propositura, na maioria dos casos ruins o tempo é zero.

tidy_cnc %>% 
  filter(dt_pena <= dt_propositura) %>% 
  mutate(tempo_zero = (dt_propositura - dt_pena == 0)) %>% 
  count(tempo_zero)

BD final após análise de inconsistências para tempos

tidy_cnc_clean <- tidy_cnc %>% 
  mutate(
    duracao_pena = if_else(is.na(duracao_pena), duracao_pena_regex, duracao_pena),
    duracao_pena = if_else(abs(as.numeric(duracao_pena - duracao_pena_regex)) > tol, 
                           duracao_pena_regex, duracao_pena)
  ) %>% 
  select(-duracao_pena_regex) %>% 
  filter(dt_pena > dt_propositura)

Análise da duração das punições

Pena privativa de liberdade.

tidy_cnc_pena <- tidy_cnc_clean
tidy_cnc_pena %>% 
  count(esfera_processo, assunto_penal_any)
tidy_cnc_pena %>% 
  filter(esfera_processo %in% c('Estadual', 'Federal')) %>% 
  ggplot(aes(x = duracao_pena / 365)) +
  geom_density(aes(fill = esfera_processo), alpha = .4) +
  xlab('Duração da pena (anos)') +
  theme_bw(16) +
  scale_x_continuous(breaks = c(0:10) * 5) +
  scale_y_continuous(labels = scales::percent) +
  facet_wrap(~tipo_pena, ncol = 1)
resumir <- function(x) {
  c(n = length(x),
    n_na = sum(is.na(x)),
    mean = mean(x, na.rm = TRUE),
    sd = sd(x, na.rm = TRUE),
    min = min(x, na.rm = TRUE),
    qt = quantile(x, .25, na.rm = TRUE),
    median = median(x, na.rm = TRUE),
    qt = quantile(x, .75, na.rm = TRUE),
    max = max(x, na.rm = TRUE)) %>% 
    enframe() %>% 
    mutate(name = factor(name, levels = name))
}

tidy_cnc_pena %>% 
  filter(esfera_processo %in% c('Estadual', 'Federal')) %>% 
  group_by(esfera_processo) %>% 
  do(resumir(.$duracao_pena)) %>% 
  spread(name, value) %>% 
  ungroup() %>% 
  knitr::kable()
tidy_cnc_pena %>% 
  filter(esfera_processo %in% c('Estadual')) %>% 
  mutate(uf_processo = fct_lump(uf_processo, 
                                prop = .005, 
                                other_level = 'Outros')) %>% 
  group_by(uf_processo) %>% 
  do(resumir(.$duracao_pena)) %>% 
  filter(!name %in% c('n_na')) %>% 
  mutate(value = round(value)) %>% 
  spread(name, value) %>% 
  ungroup() %>% 
  arrange(desc(n)) %>% 
  DT::datatable()
tidy_cnc_pena %>% 
  filter(esfera_processo %in% c('Estadual')) %>% 
  ggplot(aes(x = duracao_pena / 365)) +
  geom_density(adjust = .3) +
  scale_x_continuous(breaks = 0:100) +
  theme_bw()
tidy_cnc_pena %>% 
    filter(esfera_processo %in% c('Estadual'), assunto_penal_any) %>% mutate(assunto_nm_1 = fct_lump(assunto_nm_1, prop = 0.1)) %>%  
    ggplot(aes(x = duracao_pena / 365)) +
    geom_density(aes(fill = assunto_nm_1), adjust = .3)+
    scale_x_continuous(breaks = 0:100) +
    theme_bw() + facet_grid(instancia~assunto_nm_1)

Note que não temos penas em São Paulo e que a maior concentração de penas está em MG. O maior valor médio encontrado está no Espírito Santo.

Suspensão dos Direitos Políticos.

tidy_cnc_suspensao <- tidy_cnc_clean %>% 
  filter(teve_suspensao, tipo_pena == 'Trânsito em julgado') %>% 
  mutate(duracao_suspensao = if_else(
    is.na(duracao_suspensao) | duracao_suspensao < 0,
    NA_real_, duracao_suspensao
  ))
tidy_cnc_suspensao %>% 
  filter(esfera_processo %in% c('Estadual')) %>% 
  mutate(uf_processo = fct_lump(uf_processo, 
                                prop = .005, 
                                other_level = 'Outros')) %>% 
  group_by(uf_processo) %>% 
  do(resumir(.$duracao_suspensao)) %>% 
  mutate(value = round(value)) %>% 
  spread(name, value) %>% 
  ungroup() %>% 
  arrange(desc(n)) %>% 
  DT::datatable()
tidy_cnc_suspensao %>% 
  filter(duracao_suspensao < 11 * 365) %>% 
  ggplot(aes(x = duracao_suspensao / 365)) +
  geom_vline(xintercept = 1:10, colour = 'gray80') +
  geom_histogram(bins = 40) +
  theme_bw() +
  scale_x_continuous(breaks = 0:20) +
  xlab('Duração da suspensão (anos)')

Note a concentração em anos cheios

tidy_cnc_suspensao %>% 
  filter(esfera_processo %in% c('Estadual')) %>% 
  mutate(anos_suspensao = cut(duracao_suspensao / 365, 
                              c(0:10, 16))) %>% 
  mutate(uf_processo = fct_lump(uf_processo, 6, 
                                other_level = 'Outros')) %>% 
  count(uf_processo, anos_suspensao) %>% 
  mutate(prop = n / sum(n)) %>% 
  ggplot(aes(x = anos_suspensao, y = prop)) +
  geom_bar(aes(fill = uf_processo), colour = 'gray10',
           position = 'dodge', stat = 'identity') +
  # facet_wrap(~uf_processo, scales = 'free_y') +
  theme_bw()

Proibição de Contratar com o Poder Público

tidy_cnc_proibicao <- tidy_cnc_clean %>% 
  filter(teve_proibicao, tipo_pena == 'Trânsito em julgado') %>% 
  mutate(duracao_proibicao = if_else(
    is.na(duracao_proibicao) | duracao_proibicao < 0,
    NA_real_, duracao_proibicao
  ))
tidy_cnc_proibicao %>% 
  filter(esfera_processo %in% c('Estadual')) %>% 
  mutate(uf_processo = fct_lump(uf_processo, 
                                prop = .005, 
                                other_level = 'Outros')) %>% 
  group_by(uf_processo) %>% 
  do(resumir(.$duracao_proibicao)) %>% 
  mutate(value = round(value)) %>% 
  spread(name, value) %>% 
  ungroup() %>% 
  arrange(desc(n)) %>% 
  DT::datatable()
tidy_cnc_proibicao %>% 
  filter(duracao_proibicao < 11 * 365) %>% 
  ggplot(aes(x = duracao_proibicao / 365)) +
  geom_vline(xintercept = 1:10, colour = 'gray80') +
  geom_histogram(bins = 40) +
  theme_bw() +
  scale_x_continuous(breaks = 0:20) +
  xlab('Duração da proibição (anos)')
tidy_cnc_proibicao %>% 
  filter(esfera_processo %in% c('Estadual')) %>% 
  mutate(anos_proibicao = cut(duracao_proibicao / 365, 
                              c(0:10, 16))) %>% 
  mutate(uf_processo = fct_lump(uf_processo, 6, 
                                other_level = 'Outros')) %>% 
  count(uf_processo, anos_proibicao) %>% 
  mutate(prop = n / sum(n)) %>% 
  ggplot(aes(x = anos_proibicao, y = prop)) +
  geom_bar(aes(fill = uf_processo), colour = 'gray10',
           position = 'dodge', stat = 'identity') +
  # facet_wrap(~uf_processo, scales = 'free_y') +
  theme_bw()
tidy_cnc_proibicao %>% 
  count(tipo_pessoa) %>% 
  count(assunto_penal_any)

Análise dos tempos dos processos

tidy_cnc %>% 
  mutate(tempo_processo = as.numeric(dt_pena - dt_propositura)) %>% 
  filter(tempo_processo > 0, tipo_pena == 'Trânsito em julgado') %>%
  mutate(esfera_processo = fct_lump(esfera_processo, 2)) %>% 
  mutate(instancia = fct_lump(instancia, 2)) %>% 
  filter(as.character(instancia) != 'Other') %>% 
  filter(as.character(esfera_processo) != 'Other') %>% 
  identity() %>% {
    txt <- count(., uf_processo, instancia, esfera_processo)
    ggplot(., aes(x = uf_processo, y = tempo_processo)) +
      geom_boxplot() +
      facet_grid(instancia ~ esfera_processo) +
      geom_text(aes(label = n, y = 7000), data = txt) +
      theme_bw()
  }

Historinha

tidy_cnc_clean

Punições


Processos

grupos <- c('instancia', 'esfera_processo')

tabela_tempos <- function(d, ...) {
  l <- lazyeval::lazy_dots(...)
  v <- as.character(purrr::transpose(l)$expr)
  dx <- d %>% 
    filter(tipo_pena == 'Trânsito em julgado') %>% 
    mutate(tempo = as.numeric(dt_pena - dt_propositura, units = 'days'))
  tab1 <- dx %>%     
    group_by_(.dots = l) %>% 
    do(resumir(.$tempo)) %>% 
    mutate(value = round(value)) %>% 
    spread(name, value) %>% 
    ungroup() %>% 
    arrange(desc(n))
  tab2 <- dx %>%
    do(resumir(.$tempo)) %>%
    mutate(value = round(value)) %>%
    spread(name, value) %>%
    ungroup()
  res <- bind_rows(tab1, tab2)
  res[[v[1]]][nrow(res)] <- 'Total'
  res
}

tidy_cnc_clean %>% 
  tabela_tempos(instancia, esfera_processo)

tidy_cnc_clean %>% 
  tabela_tempos(esfera)

tidy_cnc_clean %>% 
  tabela_tempos(publico)

tidy_cnc_clean %>% 
  tabela_tempos(sexo)

tidy_cnc_clean %>% 
  tabela_tempos(tipo_pessoa)

tidy_cnc_clean %>% 
  filter(instancia == '1 grau') %>% 
  tabela_tempos(uf_processo) %>% 
  filter(n > 200)


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