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()
teve_suspensao
, mas sem duracao da suspensao.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)]))
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)
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)
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.
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()
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)
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() }
tidy_cnc_clean
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)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.