4.7 Finalizando análise das câmaras
No exemplo das câmaras, vamos fazer três gráficos. O primeiro mostra a proporção de processos por assunto em cada câmara.
d_cjsg %>%
# transformacao
filter(!is.na(court)) %>%
separate(class_subject, c('classe', 'assunto'), sep = ' / ',
extra = 'merge', fill = 'right') %>%
mutate(assunto = assunto %>%
str_wrap(19) %>%
fct_infreq() %>%
fct_rev() %>%
fct_lump(n = 11, other_level = "Outros")) %>%
add_count(assunto) %>%
group_by(court, assunto) %>%
summarise(nn = n()) %>%
mutate(ntot = sum(nn), prop = nn / ntot) %>%
ungroup() %>%
mutate(num = parse_number(court),
num = str_pad(num, 2, pad = "0")) %>%
# grafico
ggplot(aes(x = num, fill = assunto, y = prop)) +
geom_col(colour = 'black', position = "stack") +
theme_minimal(14) +
scale_y_continuous(labels = scales::percent) +
labs(x = 'Órgão julgador',
y = 'Proporção de \nprocessos por assunto',
fill = "") +
guides(fill = guide_legend(reverse = TRUE)) +
theme(legend.position = "bottom")
O segundo mostra a proporção de decisões antes e depois da virada.
# essa é a classificação final
negaram <- regex('negara?m|nega-se|negam-se', ignore_case = TRUE)
parcial <- regex('parcial', ignore_case = TRUE)
deram <- regex('deram|mantiv|dá-se', ignore_case = TRUE)
extinto <- regex('extin', ignore_case = TRUE)
nulo <- regex('nul', ignore_case = TRUE)
nconhec <- regex('conhec', ignore_case = TRUE)
tipos_decisao <- function(decisoes) {
case_when(
str_detect(decisoes, negaram) ~ 'negado',
str_detect(decisoes, parcial) ~ 'parcial',
str_detect(decisoes, deram) ~ 'provido',
str_detect(decisoes, extinto) ~ 'extinto',
str_detect(decisoes, nulo) ~ 'nulo',
str_detect(decisoes, nconhec) ~ 'não conhecido',
TRUE ~ "outros")
}
partes_apelacoes <- d_cposg %>%
select(id, id_lawsuit, parts) %>%
unnest(parts) %>%
filter(part == 'Apelado', str_detect(name, '[Mm]inist')) %>%
distinct(id_lawsuit)
d_decisoes <- d_cposg %>%
select(id, id_lawsuit, decisions) %>%
unnest(decisions) %>%
semi_join(partes_apelacoes, "id_lawsuit") %>%
arrange(desc(date)) %>%
group_by(id_lawsuit) %>%
slice(1) %>%
ungroup()
# write_rds(d_decisoes, glue("{path}/d_decisoes.rds"), compress = "bz2")
decisoes <- d_decisoes %>%
mutate(tipo_decisao = tipos_decisao(decision)) %>%
select(id_lawsuit, tipo_decisao)
decisoes_mes <- d_cjsg %>%
inner_join(decisoes, 'id_lawsuit') %>%
mutate(data = dmy(dt_decision)) %>%
arrange(desc(data)) %>%
distinct(id_lawsuit, .keep_all = TRUE) %>%
mutate(mes = floor_date(data, 'month')) %>%
filter(mes >= "2017-12-01")
decisoes_mes %>%
mutate(tipo_decisao = case_when(
tipo_decisao == "negado" ~ "Negado",
tipo_decisao == "provido" ~ "Provido",
tipo_decisao == "parcial" ~ "Parcialmente",
TRUE ~ "Outros"
)) %>%
group_by(mes, tipo_decisao) %>%
summarise(n = n()) %>%
mutate(prop = n / sum(n)) %>%
ungroup() %>%
complete(mes, tipo_decisao, fill = list(n = 0, prop = 0)) %>%
# grafico
ggplot(aes(x = as.character(mes), y = prop,
colour = tipo_decisao, group = tipo_decisao)) +
geom_line() +
geom_point(size = 3) +
geom_text(aes(y = 0.65, label = n, colour = NULL, group = NULL),
data = count(decisoes_mes, mes), size = 5) +
scale_y_continuous(labels = scales::percent) +
scale_x_discrete(labels = c("Dezembro/2017", "Janeiro/2018")) +
xlab('Mês') +
ylab('Proporção de cada tipo de decisão') +
theme_minimal(16)
O terceiro mostra a proporção de cada tipo de decisão em cada câmara.
d_cjsg %>%
filter(!is.na(court)) %>%
distinct(id_lawsuit, .keep_all = TRUE) %>%
inner_join(decisoes, 'id_lawsuit') %>%
group_by(court, tipo_decisao) %>%
summarise(n = n()) %>%
mutate(ntot = sum(n), prop = n / ntot) %>%
ungroup() %>%
filter(ntot > 10) %>%
mutate(num = parse_number(court),
num = str_pad(num, 2, pad = "0")) %>%
complete(num, tipo_decisao, fill = list(n = 0, prop = 0)) %>%
arrange(tipo_decisao) %>%
mutate(num = fct_reorder(num, prop, fun = nth, n = 3, .desc = TRUE),
tipo_decisao = fct_reorder(tipo_decisao, prop)) %>%
ggplot(aes(x = num, fill = tipo_decisao, y = prop)) +
geom_bar(stat = 'identity', colour = 'black', position = 'stack') +
scale_y_continuous(labels = scales::percent) +
coord_flip() +
theme_minimal(16) +
theme(legend.position = "bottom") +
labs(x = "Câmara", y = 'Proporção de processos por tipo de decisão',
fill = "Decisão")