A temperatura de uma proposição é um conceito criado com o objetivo de medir quão movimentada está a tramitação de um Projeto de Lei num determinado período, indicando quanto esforço tem sido empregado por atores do processo legislativo em avançar/barrar o projeto.
A temperatura de um PL pode ser calculada com diferentes granularidades/períodos (dia, semana, mês). Além disso, é possível escolher o tamanho da janela do histórico recente a ser considerado no cálculo (ex: os últimos 22 dias, ou as últimas 4 semanas). A temperatura de um período é definida como a quantidade de eventos ocorridos nesse período ponderados, estes pesos são dados de acordo com o tipo de evento (despacho, discussão e votação) além do local do evento também influenciar o peso (plenário, ccj, cft, comissões especiais e cae têm um peso maior). A função de temperatura é dada pela fórmula:
\[t = \sum_{j=0}^{n} (v_j)\alpha^j\]
onde:
Vamos calcular a temperatura para um Projeto de Lei de exemplo.
Escolhemos o PL 490/2007, que trata da demarcação de terras indígenas. Vamos baixar os dados da proposição e da tramitação e em seguida reconhecer os eventos e fases, mostrando os últimos eventos ocorridos na tramitação do PL.
#devtools::install_github('analytics-ufcg/agora-digital') #Descomentar para instalar o pacote
library(magrittr)
id <- 345311
casa <- 'camara'
prop <- agoradigital::fetch_proposicao(id,casa)
tram <- agoradigital::fetch_tramitacao(id,casa)
proc_tram <- agoradigital::process_proposicao(prop,tram,casa)
proc_tram %>%
dplyr::select(data_hora, texto_tramitacao, sigla_local, evento) %>%
dplyr::filter(!is.na(evento)) %>%
utils::tail(6) %>%
DT::datatable(rownames = F, data = )Vamos calcular a temperatura recente para todo o histórico da tramitação do PL, agregando os eventos por semana e utilizando um decaimento de 10%. Os resultados podem ser vistos no gráfico abaixo.
Os pontos pretos representam os valores da temperatura recente calculada para cada semana.
pautas <- tibble::frame_data(~data, ~sigla, ~id_ext, ~local, ~casa, ~semana, ~ano)
hist_temperatura_semanal <- agoradigital::get_historico_temperatura_recente(proc_tram, granularidade = 's', decaimento = 0.1, pautas = pautas)
ggplot2::ggplot(hist_temperatura_semanal, ggplot2::aes(x=periodo, y=temperatura_recente)) +
ggplot2::xlab("Tempo") +
ggplot2::ylab("Temperatura") +
ggplot2::geom_point() +
ggplot2::theme_minimal()Para ter uma visualização menos poluída, vamos mostrar uma linha, ao invés dos pontos.
hist_temperatura_semanal %>%
ggplot2::ggplot(ggplot2::aes(x=periodo, y=temperatura_recente)) +
ggplot2::geom_line() +
ggplot2::xlab("Tempo") +
ggplot2::ylab("Temperatura") +
ggplot2::theme_minimal()Agora vamos aplicar uma suavização à curva de temperatura.
hist_temperatura_semanal %>%
ggplot2::ggplot(ggplot2::aes(x=periodo, y=temperatura_recente)) +
ggplot2::geom_smooth(span = .05, se = F) +
ggplot2::xlab("Tempo") +
ggplot2::ylab("Temperatura") +
ggplot2::theme_minimal()Podemos também ter uma visualização mais detalhada, olhando apenas os últimos 3 meses (~ 12 semanas) da tramitação do PL, e mostrando a quantidade de eventos ocorridos a cada semana.
Os pontos vermelhos representam o número de eventos ocorridos em cada semana na qual houve eventos relevantes na tramitação do PL.
start_date <- dplyr::last(proc_tram$data_hora) - lubridate::days(90)
hist_temperatura_semanal_3_meses <- hist_temperatura_semanal %>%
dplyr::filter(periodo >= start_date)
hist_temperatura_semanal_3_meses %>%
ggplot2::ggplot(ggplot2::aes(x=periodo, y=temperatura_recente)) +
ggplot2::geom_smooth(span = .3, se = F) +
ggplot2::geom_point(ggplot2::aes(x=periodo, y=temperatura_periodo), colour='red', alpha=0.5, subset(hist_temperatura_semanal_3_meses, temperatura_periodo > 0)) +
ggplot2::xlab("Tempo") +
ggplot2::ylab("Temperatura") +
ggplot2::theme_minimal()