Introdução

O objetivo dessa análise é obter os salários médios pagos nas escolas públicas paulistanas. Esses dados serão combinados com informações de raça dos alunos e vulnerabilidade social para identificar possíveis correlações entre essas variáveis. Serão utilizadas informações do FNDE (SIOPE) e INEP.

I. Comparando os arquivos

O FNDE disponibiliza diversos arquivos e consultas sobre remuneração dos funcionários das escolas públicas. No endereço https://www.fnde.gov.br/index.php/fnde_sistemas/siope/relatorios/arquivos-dados-analiticos é possível encontrar dados consolidados para todos os estados e Distrito Federal, notadamente a remuneração dos magistérios. É possível também consultar essa informação em https://www.fnde.gov.br/siope/consultarRemuneracaoMunicipal.do

Em fevereiro de 2021, o município de São Paulo ainda não havia enviado os dados de remuneração para novembro e dezembro de 2020, por esse motivo, a análise será realizada apenas com as informações disponíveis para 2019. Para confirmar que os dados disponibilizados no endereço de consulta e no endereço de arquivos compilados são os mesmos, serão importados ambos para comparação.

O arquivo compilado possui dados para todos os municípios de São Paulo, tornando-o excessivamente pesado. Para reduzir o volume de informação, é possível utilizar o shell do linux na pasta de dados com o comando:

bash awk -F ";" '{if ($6 == 355030 || NR == 1) {print}}' REMUNERACAO_PROFISSIONAIS_EDUCACAO_SP_2019.CSV > 2019_sp_mun.csv

O código 355030 identifica o munícipio de São Paulo e pode ser alterado para manter qualquer outro código do IBGE desejado.

Agora vamos à comparação. O arquivo de janeiro de 2019 da página de consulta foi baixado na pasta de dados e será carregado.

jan_consulta <- readxl::read_xlsx('../dados/planilhas/Planilha.xlsx') %>%
  janitor::clean_names()

compilado <- data.table::fread('../dados/2019_sp_mun.csv') %>%
  janitor::clean_names()

Primeiramente, vale consultar se todos os meses de 2019 estão disponíveis no arquivo compilado.

compilado %>%
  distinct(me_exercicio)
compilado %>%
  distinct(nu_periodo)

É possível notar que só há 10 valores distintos para a variável “me_exercício”, indicando que o arquivo compilado está incompleto. Por esse motivo, vamos dar prioridade ao arquivo gerado a partir do endereço de consulta. Antes, vamos só verificar se há alguma entrada faltando.

jan_compilado <- compilado %>%
  filter(me_exercicio == '1')

Enquanto há 57490 linhas no arquivo compilado para janeiro, no arquivo de consulta há 57491 linhas. Ou seja, aparentemente não há nenhuma entrada faltante.

Quanto as colunas, nós iremos precisar identificar os profissionais, a escola onde atuam, a profissão (para distinguir magistério dos demais), a qualificação, o valor total pago no mês e a carga horária. É possível notar que todas essas informações estão presentes nos dois arquivos:

colnames(jan_compilado) %>%
  kable(align="l") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), position = "center") 
x
an_exercicio
nu_periodo
me_exercicio
co_uf
no_uf
co_municipio
no_municipio
nu_remuneracao
no_profissional
local_exercicio
carga_horaria
tp_categoria
categ_profissional
vl_salario
vl_parc_minima_fundeb
vl_parc_maxima_fundeb
vl_outras_receitas
vl_total
colnames(jan_consulta) %>%
  as.data.frame() %>%
  kable(align="l") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), position = "center") 
.
ano
mes
nome
codigo_do_local_de_exercicio
local_de_exercicio
carga_horaria
tipo_categoria
categoria_profissional
situacao_profissional
salario_ou_vencimento_basico_r
com_parcela_minima_de_60_percent_do_fundeb
com_parcela_minima_de_40_percent_do_fundeb_b
outras_receitas_c
total_a_b_c

É possível notar que o arquivo compilado possui uma coluna “nu_remuneracao”, que pode indicar uma possível matrícula. Por isso vamos ver quantas duplicatas há dessa variável.

compilado %>%
  distinct(nu_remuneracao) %>%
  nrow()
## [1] 566731

Como o número é o mesmo de observações, essa coluna é apenas um indicador do pagamento, não sendo muito útil para a análise atual. Fica determinado, então, que os arquivos de consulta são o melhor caminho. Cumpre observar também que os arquivos de consulta possuem uma coluna com ID única para onde o funcionário atua, ao contrário do compilado, que só possui o nome do local. Essa vantagem será útil conforme não há identificador dos funcionários como CPF ou matrícula.

II. Gerando o arquivo final

Como o site de consulta do SIOPE é limitado, é necessário baixar os valores mês a mês e depois compilar tudo em um data frame com todas as informações para 2019. Para isso, usaremos o seguinte código:

compilar <- function(){

  lista <- list.files('../dados/planilhas') 

  for (i in 1:12) {
    j <- lista[i]
    arq <- paste0("../dados/planilhas/", j)
    
    mes <-
      readxl::read_xlsx(arq) %>%
      janitor::clean_names()

    assign(paste0("mes_", i), mes)
    
    if (i == 1) {
      sp_2019 <- mes
    } else {
      sp_2019 <- rbind(sp_2019, mes)
    }
  }
  sp_2019 <<- sp_2019
}

compilar()

Vamos verificar se todos os meses foram obtidos corretamente

sp_2019 %>%
  distinct(mes)

Como há um NA, é necessário visualizar para entender o que pode ter ocorrido.

sp_2019 %>%
  filter(is.na(mes)) %>%
  kable(align="l") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), position = "center") %>%
  scroll_box(width = "90%", height = "400px") 
ano mes nome codigo_do_local_de_exercicio local_de_exercicio carga_horaria tipo_categoria categoria_profissional situacao_profissional salario_ou_vencimento_basico_r com_parcela_minima_de_60_percent_do_fundeb com_parcela_minima_de_40_percent_do_fundeb_b outras_receitas_c total_a_b_c
NA NA NA NA NA NA NA Total 348.080.534,25 0,00 136.900.183,14 484.980.717,39 NA NA
NA NA NA NA NA NA NA Total 357.791.875,89 0,00 161.895.659,72 519.687.535,61 NA NA
NA NA NA NA NA NA NA Total 361.880.869,09 0,00 150.645.482,76 512.526.351,85 NA NA
NA NA NA NA NA NA NA Total 365.532.882,51 0,00 165.462.361,90 530.995.244,41 NA NA
NA NA NA NA NA NA NA Total 388.984.795,57 0,00 142.991.354,95 531.976.150,52 NA NA
NA NA NA NA NA NA NA Total 360.423.754,24 0,00 139.785.128,45 500.208.882,69 NA NA
NA NA NA NA NA NA NA Total 365.751.410,18 0,00 183.652.043,41 549.403.453,59 NA NA
NA NA NA NA NA NA NA Total 367.915.495,36 0,00 204.445.655,82 572.361.151,18 NA NA
NA NA NA NA NA NA NA Total 365.660.080,56 0,00 164.570.524,64 530.230.605,20 NA NA
NA NA NA NA NA NA NA Total 382.961.556,03 0,00 162.257.120,85 545.218.676,88 NA NA
NA NA NA NA NA NA NA Total 638.121.904,39 0,00 101.945.443,74 740.067.348,13 NA NA
NA NA NA NA NA NA NA Total 365.952.576,73 0,00 275.236.983,90 641.189.560,63 NA NA

Se refere a uma linha com o valor total presente em cada arquivo. Por ser desnecessária, vamos removê-la.

sp_2019 <- sp_2019 %>%
  filter(!is.na(mes))

Por fim vamos verificar os profissionais presentes

sp_2019 %>%
  distinct(tipo_categoria)

Como só há profissionais do magistério, não é necessário nenhum filtro adicional.

Com isso, vamos exportar o dataframe e partir para a próxima etapa de explorar os dados e verificar a melhor forma de cálculo.

save(sp_2019, file="../dados/sp_2019.RData")