Introdução
O MediadoR pretende se tornar um instrumento que auxilie os pesquisadores de negociações coletivas por todo o Brasil, oferecendo um método simples e fácil de realizar estas pesquisas. Para fazer isto, pretendemos trazer contribuições em basicamente três frentes:
Oferecer um webscraper das negociações coletivas disponibilizadas na plataforma MediadoR, organizando-os em um vetor de caracteres que pode facilmente ser juntado em um data.frame
Adiantar alguns processos de limpeza dos dados, introduzindo funções que retiram dados percentuais e monetários
E, por fim, unificar pesquisadores em torno de uma plataforma que agregue diversos dados e que possa ser facilmente acessível por todos
Buscamos reforçar este foco em compartilhar nosso instrumento também através da abertura de nosso código em um repositório no github. Também convidamos todas e todos pesquisadores a contribuírem nele. Se você quiser ajudar, comece lendo nosso Readme para se ter uma ideia melhor de nossa proposta e objetivos.
Este documento, então, é uma breve introdução ao estado atual de nossas funções e elementos que podemos extrair delas.
Instalação do pacote e citação
Organizamos nosso pacote a partir dos pacotes tidyverse,
em especial stringr e dplyr, para a
manipulação dos dados, e o rvest para realizar o
webscraping das páginas das negociações coletivas, o que demanda que
estes sejam instalados no seu computador. Se eles não estiverem
instalados, nosso código simplesmente não irá funcionar, mas não se
preocupe, este processo já é automatizado pelo devtools na
instalação de nosso pacote:
# Se você não tem o devtools instalado, instale-o:
install.packages("devtools")
# A partir daí é só colocar o próximo código:
devtools::install_github(repo = "gpistelli/MediadoR", subdir = "pkg")Para construir esta introdução, usaremos, além dos pacotes chamados
pelo MediadoR, o tidyverse e o rmarkdown.
library(tidyverse)
library(rmarkdown)
library(MediadoR)Se você utilizar nossoo pacote em seu trabalho, não se esqueça de citá-lo. Seu formato na ABNT seria mais ou menos o seguinte:
FERREIRA, Gabriel Pistelli. MediadoR: A Tool to Research Brazilian Collective Bargaining. R Package version 0.1. 2022. Disponível em: <https://github.com/gpistelli/MediadoR>.
Coletando dados de um link
Para coletar dados de uma negociação coletiva, utilizamos a função
CCT.get_complete_CCT, que é basicamente um wrapper das
funções que, respectivamente, baixam a página da negocição, lêem os
dados na plataforma e que organizam esses dados. Em alguns casos de
conexões lenta e de instabilidade da plataforma uma estratégia de
solução dos problemas pode ser baixar os dados anteriormente. Neste
caso, sugere-se que se baixe o documento com o
download.file() e utilize o arquivo como parte do parâmetro
path.
Se tivermos demanda e apoio, podemos pensar em criar uma versão de leitura local ou, ainda, de acordos em formato pdf. Mas, no presente momento, isto não é uma prioridade, uma vez que nossas funções já dão conta do recado, em nossa opinião, tendo o método do download anterior como uma boa alternativa a uma eventual demora no processamento dos dados.
Quando chamamos esta função, então, possuímos o seguinte retorno:
# Criar a função da leitura de um documento já baixado (FUNCTION)
NCT_get_complete_NCT("http://www3.mte.gov.br/sistemas/mediador/Resumo/ResumoVisualizar?NrSolicitacao=MR039775/2018") %>% t() %>% as.data.frame()Como podemos ver, o código consegue ler qual é a cláusula e organiza
estas em diferentes elementos num vetor de caracteres e os nomeia a
partir desta cláusula. Isto possibilita que estas cláusulas se
posicionem em conjunto e possam ser comparadas ano-a-ano, facilitando a
vida do pesquisador que quiser, por exemplo, realizar uma análise
diacrônica, focando nas mudanças nas negociações coletivas. Podemos dar
um exemplo com dados que já coletamos anteriormente, da convenção
coletiva entre o sindicato dos trabalhadores da indústria alimentícia de
Curitiba e o Sindicato da Indústria de Trigo, utilizando as funções
lapply, do.call e bind_rows (esta
última do excelente tidyverse,
já citado aqui). Para demonstração, apresentamos apenas a terceira
coluna, do piso salarial:
CCT_df <- lapply(X = paste0("https://raw.githubusercontent.com/gpistelli/MediadoR/main/data/CCT/Curitiba/Ind%C3%BAstria%20Aliment%C3%ADcia/STIAC/STIAC_SINDITRIGO_", c(2015, 2017, 2019, 2020, 2021), ".csv"), FUN = read.csv, fileEncoding = "utf8") %>%
do.call(what = bind_rows, args = .) %>% as.data.frame()
knitr::kable(CCT_df[,4])| x |
|---|
| CLÁUSULA TERCEIRA - SALÁRIO NORMATIVO Fica assegurado aos trabalhadores abrangidos pela presente Convenção, a partir de 01 de Novembro de 2015, os salários de normativos a seguir especificados: Sálário normativo de ingresso: R$ 1.130,00 (hum mil cento e trinta reais); Salário normativo de efetivação após 60 (sessenta ) dias de R$ 1.235,00 (mil duzentos e trinta e cinco reais). Parágrafo Único: O salário de ingresso será reajustado nas mesmas épocas e nos mesmos percentuais concedidos aos demais salários da categoria. Reajustes/Correções Salariais |
| CLÁUSULA TERCEIRA - SALÁRIO NORMATIVO Fica assegurado aos trabalhadores abrangidos pela presente Convenção, a partir de 01 de Novembro de 2016, os salários normativos a seguir especificados: Salário normativo de ingresso: R$ 1.226,05 (um mil duzentos e vinte e seis reais e cinco centavos); Salário normativo de efetivação após 60 (sessenta) dias de R$ 1.340,00 (um mil trezentos e quarenta reais). Parágrafo Único: O salário de ingresso será reajustado nas mesmas épocas e nos mesmos percentuais concedidos aos demais salários da categoria. Reajustes/Correções Salariais |
| CLÁUSULA TERCEIRA - SALÁRIO NORMATIVO Fica assegurado aos trabalhadores abrangidos pela presente Convenção, a partir de 01 de Novembro de 2018, os salários normativos a seguir especificados: Salário normativo de ingresso: R$ 1.344,20 (hum mil, rezentos e quarenta e quatro reais e vinte centavos); Salário normativo de efetivação após 60 (sessenta) dias de R$ 1.467,40 (hum mil, quatrocentos e sessenta e sete rreais e quarenta centavos). Parágrafo Único: O salário de ingresso será reajustado nas mesmas épocas e nos mesmos percentuais concedidos aos demais salários da categoria. Reajustes/Correções Salariais |
| CLÁUSULA TERCEIRA - SALÁRIO NORMATIVO Fica assegurado aos trabalhadores abrangidos pela presente Convenção, a partir de 01 de Novembro de 2019, os salários normativos a seguir especificados: Salário normativo de ingresso: R$ 1.379,40 (hum mil, trezentos e setenta e nove reais e quarenta centavos); Salário normativo de efetivação após 60 (sessenta) dias de R$ 1.507,00 (hum mil, quinhentos e sete reais). Parágrafo Único: O salário de ingresso será reajustado nas mesmas épocas e nos mesmos percentuais concedidos aos demais salários da categoria. Reajustes/Correções Salariais |
| CLÁUSULA TERCEIRA - SALÁRIO NORMATIVO Fica assegurado aos trabalhadores abrangidos pela presente Convenção, a partir de 01 de Novembro de 2020, os salários normativos a seguir especificados: Salário normativo de ingresso: R$1.445,40 (Um Mil, Quatrocentos e Quarenta e Cinco Reais e Quarenta Centavos)) mensais nos primeiros 60 (sessenta) dias de contrato ; Salário normativo de efetivação após 60 (sessenta) dias de R$1.579,60 (Um Mil e Quinhentos e Setenta e Nove Reais e Sessenta Centavos) mensais após 60 (sessenta) dias de contrato . Parágrafo Único: O salário de ingresso será reajustado nas mesmas épocas e nos mesmos percentuais concedidos aos demais salários da categoria. Reajustes/Correções Salariais |
Nossos dados, então, se encontram ordenados, o que já é uma contribuição interessante, mas ainda assim teremos problemas que não temos como contornar imediatamente no pacote. Um exemplo disso podem ser os nomes de cláusulas, assim como a formatação destas, os quais podem sofrer alterações estéticas e outros erros humanos que dificultam o processamento adequado dos dados. Ficar atento a estas possibilidades é importante para evitar confusões e demandam o tratamento específico caso a caso das negociações analisadas.
A única alternativa para diminuírmos esses erros é a organização dos pesquisadores no processamento coletivo destes dados, a qual sugerimos que seja feita em nosso repositório. Um bom método de nos ajudar é construir um data.frame a partir de links do MediadoR, ajustá-lo, e assim que os organizar com as linhas tendo como nomes os anos de suas respectivas NC, separar cada linha como um data.frame, para facilitar o acesso direto aos dados ajustados. Sugerimos, para esta empreitada, o seguinte código:
for (i in 1:nrow(CCT_df)){
write.csv(x = CCT_df[i,],
file = generate_file_name(sind, negot, df, i),
fileEncoding = "utf8")
}No caso, troque o sind por um caracter do nome do
sindicato, o negot pela outra parte e o df
pelo seu data.frame em questão. Assim que tiver estes dados, pode pedir
para colocarmos em nosso github, seguindo os padrões pedidos em nosso
readme.
Funções auxiliares
Além da coleta de dados, como falamos, também organizamos algumas funções para nos ajudar na manipulação dos dados. Temos três principais funções desenvolvidas até o presente momento: uma de comparação de cláusulas presentes durante o tempo e outras duas que extraem os dados de valores em reais e percentuais.
Se quisermos saber se há alguma cláusula nova ou retirada, podemos
utilizar a função CCT.find_nold_clauses():
knitr::kable(NCT_find_nold_clauses(CCT_df))| BASE.TERRITORIAL | CATEGORIAS.ABRANGIDAS | CATEGORIA.ABRANGIDA | |
|---|---|---|---|
| 5 | Retirado | Retirado | Novo |
Estes dados, então, nos ajudam a entender melhor as transformações no período abrangido pelas negociações. Neste caso, não temos nada especial, apenas mudanças estéticas, como advertimos anteriormente.
Outra função importante é a da retirada de valores em Real, as quais podemos utilizar para investigar o piso salarial, o qual, em nosso caso, temos dois pisos na cláusula: daqueles trabalhadores em experiência, nos primeiros 90 dias de trabalho, e os efetivados. Isto demanda que tiremos a média destes valores:
piso_salarial <- NCT_get_monetary_values(CCT_df$SALÁRIO.NORMATIVO) %>% lapply(X = ., FUN = NCT_convert_mon_to_num) %>% lapply(X = ., FUN = mean) %>% unlist()
names(piso_salarial) <- CCT_df$X
knitr::kable(x = piso_salarial)| x | |
|---|---|
| 2015 | 1182.500 |
| 2017 | 1283.025 |
| 2019 | 1405.800 |
| 2020 | 1443.200 |
| 2021 | 1512.500 |
O reajuste salarial, por sua vez, possui um único resultado, aplicado para todos os trabalhadores, mas, no fundo, o processo de ajuste dos dados é o mesmo, mas com valores proporcionais, o que exige que somemos 1 ao valor retirado da cláusula em questão para representar um aumento neste valor:
reaj_salario <- NCT_get_percent_value(CCT_df$REAJUSTE.SALARIAL) %>% unlist() %>% NCT_convert_perct_to_num()+1
names(reaj_salario) <- CCT_df$X
knitr::kable(x = reaj_salario)| x | |
|---|---|
| 2015 | 1.1033 |
| 2017 | 1.0850 |
| 2019 | 1.0400 |
| 2020 | 1.0255 |
| 2021 | 1.0477 |
Estes dados, embora já sejam interessantes apresentados assim, ainda precisam de um tratamento para serem utilizados em nosso exemplo, uma análise da evolução dos salários, a qual mostraremos na próxima seção.
Exemplo de análise: variação do piso e reajuste em comparação com a cesta básica
Como falamos, estes dados precisam ser tratados para que eles possam ser comparados adequadamente e, aqui, nos focaremos em demonstrar as reais variações do poder de compra de seus salários a partir do caso da cesta básica. Primeiro, vamos tratar nossos dados, comparando-os com suas variações reais no tempo:
# Definir as variações em comparação com o primeiro salário de nossa série histórica
piso_salarial <- piso_salarial/piso_salarial[1]
# Vamos juntar o salário anterior como um e escalonar o valor deste a partir dos reajustes concedidos anualmente
reaj_salario <- c(1, reaj_salario)
# Isto daqui também pode virar uma função (FUNCTION)
reaj_salario_ano <- numeric(length(reaj_salario))
for (i in 1:length(reaj_salario)){
reaj_salario_ano[i] <- prod(reaj_salario[1:i])
}
names(reaj_salario_ano) <- c(CCT_df$X[1]-1, CCT_df$X)
knitr::kable(data.frame(Reaj = reaj_salario_ano[-1], Piso = piso_salarial))| Reaj | Piso | |
|---|---|---|
| 2015 | 1.103300 | 1.000000 |
| 2017 | 1.197080 | 1.085011 |
| 2019 | 1.244964 | 1.188837 |
| 2020 | 1.276710 | 1.220465 |
| 2021 | 1.337609 | 1.279070 |
Agora temos dados que estão comparáveis e pretendemos realizar o mesmo procedimento com o valor da cesta básica, o qual foi retirado do site do DIEESE e se encontra disponível processado e limpado em nosso repositório, indo até Julho de 1994 (implementação do Real).
cesta_bas <- read.csv("https://raw.githubusercontent.com/gpistelli/MediadoR/main/data/DIEESE/Cesta/Curitiba/Cesta_Curitiba.csv", row.names = 1, fileEncoding = "utf8")
anos <- 2014:2021
cesta_bas_mean_year <- numeric(length(anos))
for (i in 1:length(anos)){
cesta_bas_mean_year[i] <- cesta_bas %>% filter(Ano == anos[i]) %>% .$CB %>% as.numeric() %>% mean()
}
cesta_bas_mean_year <- cesta_bas_mean_year/cesta_bas_mean_year[1]
names(cesta_bas_mean_year) <- anosCom estes dados organizados e comparáveis, podemos plotá-los de forma
adequada. Diversos métodos podem ser feitos para seguir este processo, e
recomendamos em especial o ggplot, o qual, devido ao seu
formato peculiar, exigirá que nós façamos uma gambiarra com nossos
vetores, a qual já organizamos na função
generate_ggplot2_df:
ts_df <- rbind(NCT_generate_ggplot2_df("Piso", piso_salarial),
NCT_generate_ggplot2_df("Reaj", reaj_salario_ano),
NCT_generate_ggplot2_df("CB", cesta_bas_mean_year)
) %>% as.data.frame()
# Podemos incluir estes elementos na função generate_ggplot2_df (FUNCTION)
names(ts_df) <- c("Obj", "Ano", "Prop")
ts_df$Prop <- as.numeric(ts_df$Prop)ggplot(ts_df, aes(x = Ano, y = Prop, group = Obj)) +
geom_line(aes(color = Obj)) +
geom_point(aes(color = Obj))Estes dados demonstram explicitamente uma perda gigantesca no poder de compra desta categoria, tanto com relação ao piso salarial quanto ao reajuste. Outros dados interessantes poderiam ser mobilizados por aqui, como o salário mínimo, ou até mesmo agregando categorias por setores, estados, regiões, etc.
Referências
DIEESE. Cesta básica de alimentos. Disponível em: http://www.dieese.org.br/cesta/.
MTE. Sistema Mediador. 1997. Disponível em: http://www3.mte.gov.br/sistemas/mediador/Home.
WICKHAM, Hadley. rvest: Easily Harvest (Scrape) Web Pages. R package version 0.3.6. 2020. Disponível em: https://CRAN.R-project.org/package=rvest.
_____; et al. Welcome to the tidyverse. Journal of Open Source Software, 4(43), 1686, 2019