5.1 Análise das câmaras
Agora vamos fazer gráficos!
5.1.1 Como se distribuem os assuntos em cada câmara?
Gráfico fraqueza:
d_cjsg %>%
tidyr::separate(classe_assunto, c('classe', 'assunto'),
sep = ' / ', extra = 'merge', fill = 'right') %>%
ggplot(aes(x = vara, fill = assunto)) +
geom_bar(colour = 'black', position = "fill", show.legend = FALSE)
Gráfico nutella:
d_cjsg %>%
## transformacao -------------------------------------------------------------
# tirar NA (não tem problema pois são aqueles casos que não existem)
dplyr::filter(!is.na(vara)) %>%
tidyr::separate(classe_assunto, c('classe', 'assunto'), sep = ' / ',
extra = 'merge', fill = 'right') %>%
# categorizar os assuntos e mudar a ordem
dplyr::mutate(assunto = assunto %>%
stringr::str_wrap(19) %>%
forcats::fct_infreq() %>% # ordena o factor decrescente
forcats::fct_rev() %>%
forcats::fct_lump(n = 11, other_level = "Outros")) %>%
# pega somente os números das câmaras e coloca zeros à esquerda
dplyr::mutate(num = parse_number(vara),
num = str_pad(num, 2, pad = "0")) %>%
# grafico --------------------------------------------------------------------
ggplot(aes(x = num, fill = assunto)) +
geom_bar(colour = 'black', position = "fill") +
guides(fill = guide_legend(reverse = TRUE)) +
# coisas cosméticas
theme_minimal(14) +
scale_y_continuous(labels = scales::percent) +
labs(x = 'Órgão julgador',
y = 'Proporção de \nprocessos por assunto',
fill = "") +
theme(legend.position = "bottom")
5.1.2 Qual a proporção de decisões por câmara?
Primeiro, vamos montar a função que classifica as decisões.
# essa é a classificação final
negaram <- stringr::regex('negara?m|nega-se|negam-se', ignore_case = TRUE)
parcial <- stringr::regex('parcial', ignore_case = TRUE)
deram <- stringr::regex('deram|mantiv|dá-se|nul|conhec', ignore_case = TRUE)
extinto <- stringr::regex('extin', ignore_case = TRUE)
tipos_decisao <- function(decisoes) {
dplyr::case_when(
stringr::str_detect(decisoes, negaram) ~ 'negado',
stringr::str_detect(decisoes, parcial) ~ 'parcial',
stringr::str_detect(decisoes, deram) ~ 'provido',
stringr::str_detect(decisoes, extinto) ~ 'extinto',
TRUE ~ "outros")
}
Agora, vamos pegar apenas os casos em que as pessoas entraram com recursos de apelação contra o Ministério Público.
partes_apelacoes <- d_cposg %>%
dplyr::select(id_lawsuit, parts) %>%
tidyr::unnest_legacy(parts) %>%
dplyr::filter(part == 'Apelado', stringr::str_detect(name, '[Mm]inist')) %>%
# Exercício: por que usamos distinct aqui?
dplyr::distinct(id_lawsuit)
Agora, montamos a base de decisões
d_decisoes <- d_cposg %>%
dplyr::select(id, id_lawsuit, decisions) %>%
tidyr::unnest_legacy(decisions) %>%
# Exercício: o que faz semi_join()?
dplyr::semi_join(partes_apelacoes, "id_lawsuit") %>%
dplyr::arrange(desc(date)) %>%
dplyr::group_by(id_lawsuit) %>%
# Exercício: o que faz slice()?
dplyr::slice(1) %>%
dplyr::ungroup()
decisoes <- d_decisoes %>%
dplyr::mutate(tipo_decisao = tipos_decisao(decision)) %>%
dplyr::select(id_lawsuit, tipo_decisao)
Gráfico fraqueza:
d_cjsg %>%
dplyr::distinct(id_processo, .keep_all = TRUE) %>%
dplyr::inner_join(decisoes, c('id_processo' = 'id_lawsuit')) %>%
ggplot(aes(x = vara, fill = tipo_decisao)) +
geom_bar(position = "fill")
Gráfico nutella:
prop_negados <- function(x) {
sum(x == "negado") / length(x)
}
d_cjsg %>%
dplyr::distinct(id_processo, .keep_all = TRUE) %>%
dplyr::inner_join(decisoes, c('id_processo' = 'id_lawsuit')) %>%
dplyr::mutate(num = vara %>%
readr::parse_number() %>%
stringr::str_pad(width = 2, pad = "0") %>%
forcats::fct_reorder(tipo_decisao, prop_negados) %>%
forcats::fct_rev()) %>%
dplyr::mutate(tipo_decisao = fct_infreq(tipo_decisao) %>% fct_rev()) %>%
# grafico --------------------------------------------------------------------
ggplot(aes(x = num, fill = tipo_decisao)) +
geom_bar(colour = 'black', position = 'fill', size = .3) +
geom_hline(yintercept = 1:4 / 4, linetype = 2, alpha = .4) +
scale_y_continuous(labels = scales::percent) +
coord_flip() +
# perfumaria -----------------------------------------------------------------
guides(fill = guide_legend(reverse = TRUE)) +
theme_minimal(16) +
theme(legend.position = "bottom") +
labs(x = "Câmara",
y = 'Proporção de processos por tipo de decisão',
fill = "Decisão")