Relatório Completo

1 - Introdução

1.1 Declaração do problema

A infraestrutura escolar é um dos pilares fundamentais para a qualidade do ensino. Estudos educacionais consistentemente demonstram que o ambiente físico — desde a disponibilidade de saneamento básico até o acesso a laboratórios de ciências e bibliotecas — impacta diretamente o desempenho acadêmico, a motivação e a permanência dos alunos na escola.

Neste contexto, o Censo Escolar 2024, realizado pelo INEP, oferece o retrato mais atualizado da educação básica brasileira. Este relatório foca especificamente no estado de Pernambuco, buscando ir além dos números absolutos para investigar a equidade na distribuição desses recursos.

Por que analisar os microdados?

A análise direta dos dados brutos permite uma granularidade que os relatórios oficiais agregados muitas vezes não mostram. Ao processarmos os microdados, podemos criar métricas personalizadas e responder a perguntas específicas sobre desigualdades locais, essenciais para uma gestão pública baseada em evidências.

Perguntas Norteadoras e Hipóteses:

Este estudo estrutura-se para testar as seguintes hipóteses sobre a rede estadual e municipal de Pernambuco:

Hipótese da Desigualdade Regional: Existe um abismo estrutural entre as escolas da Região Metropolitana do Recife e as escolas localizadas em municípios menores do Sertão e Agreste?

O “Básico” vs. O “Pedagógico”: A hipótese é que a infraestrutura de subsistência (cozinha, água, refeitório) está quase universalizada devido a programas federais, enquanto a infraestrutura pedagógica (laboratórios, bibliotecas, internet) permanece escassa.

Identificação de Prioridades: Quais municípios apresentam os piores scores de infraestrutura, necessitando de intervenção prioritária imediata?

1.2 Plano de abordagem (dados e metodologia)

Breve resumo da abordagem: (i) importar e limpar os microdados fornecidos em MicroDadosPEFinal.csv; (ii) selecionar variáveis de interesse (indicadores de infraestrutura e identificadores geográficos); (iii) criar métricas resumidas e novas variáveis derivadas (ex.: contagem de infraestruturas por escola); (iv) produzir visualizações e tabelas explicativas; (v) sintetizar implicações para clientes.

1.3 Abordagem técnica proposta

Adotaremos uma abordagem reprodutível em RMarkdown: todos os pacotes são carregados em um chunk, a importação e tratamento de NA são explicados e executados, e as análises exploratórias seguem boas práticas de tratamento de dados (dplyr) e visualização (ggplot2; plotly).

1.4 Utilidade para potenciais clientes

A análise fornecerá: (i) identificação dos municípios com maior/menor oferta de infraestrutura; (ii) percentuais de escolas com cada recurso; (iii) perfis regionais para orientação de investimentos; (iv) entregáveis reprodutíveis.


2 - Pacotes Requeridos

Gerenciamento e Relatório:

pacman: Facilita o gerenciamento de bibliotecas, instalando e carregando pacotes automaticamente conforme necessário.

knitr: Essencial para a compilação do documento RMarkdown, controlando a execução dos blocos de código e a renderização do relatório final.

htmltools: Permite a manipulação de elementos HTML, utilizado aqui para combinar múltiplos gráficos interativos (plotly) em uma única visualização.

Manipulação e Limpeza de Dados:

dplyr: Principal ferramenta para manipulação de dados, usada para filtrar, selecionar, agrupar e resumir as informações do Censo.

tidyr: Utilizado para remodelar os dados (funções como pivot_longer), essencial para preparar a estrutura necessária para o heatmap.

stringr e stringi: Pacotes focados no tratamento de textos (strings), fundamentais para a limpeza de nomes de municípios, remoção de acentos e padronização de caracteres.

Visualização de Dados:

ggplot2: Implementa a “Gramática dos Gráficos”, sendo a base para a construção de todas as visualizações estáticas deste relatório.

plotly: Adiciona interatividade aos gráficos do ggplot2, permitindo tooltips (caixas de informação ao passar o mouse) e zoom, facilitando a exploração dos dados pelo usuário.

scales: Fornece formatação adequada para eixos e legendas (ex: transformar valores decimais em porcentagens legíveis).

viridis: Oferece paletas de cores acessíveis (daltônico-friendly) e perceptualmente uniformes, utilizadas nos mapas e heatmaps.

DT: Gera tabelas interativas em HTML, permitindo paginação e busca dentro dos dados apresentados.

Dados Geográficos:

geobr: Pacote oficial para acessar bases de dados espaciais do Brasil (IBGE). Utilizado para baixar a malha geográfica dos municípios de Pernambuco.

sf (Simple Features): Padrão para manipulação de dados espaciais no R, permitindo a união dos dados do Censo com a geometria dos mapas para a plotagem.

# Usamos pacman para facilitar o carregamento/instalação
if (!requireNamespace("pacman", quietly = TRUE)) install.packages("pacman")
pacman::p_load(
  dplyr, stringr, ggplot2, plotly, tidyr, scales, 
  knitr, geobr, sf, viridis, stringi, htmltools, DT
)

3 - Preparação dos dados

3.1 Fonte dos dados

Fonte original: Censo Escolar (INEP). Microdados disponíveis no site oficial. https://download.inep.gov.br/dados_abertos/microdados_censo_escolar_2024.zip

Como a fonte de dados é muito grande, utilizaremos um recorte desses microdados, contendo apenas informações de Pernambuco https://drive.google.com/file/d/1x9ZKKhACCo8LWRtzOmXXX8yXzALTB8MN/view?usp=sharing

3.2 Descrição dos dados

O microdado original contém centenas de variáveis. Para esta análise focada em infraestrutura física, selecionamos um subconjunto estratégico de colunas, divididas em duas categorias principais:

Identificadores Geográficos:

NO_MUNICIPIO: Nome do município onde a escola está localizada. Utilizada para agregar dados e gerar os rankings municipais.

NO_MESORREGIAO: Classificação regional do IBGE (ex: Metropolitana, Agreste, Sertão). Essencial para entendermos a distribuição macro da rede escolar.

CO_MUNICIPIO: Código numérico do IBGE. Variável chave usada para realizar a junção (join) precisa com os dados cartográficos do pacote geobr.

Indicadores de Infraestrutura (Variáveis Binárias): Selecionamos 7 itens críticos que definem a qualidade do ambiente escolar. Estas variáveis indicam a presença (1) ou ausência (0) do equipamento:

Suporte Básico: IN_COZINHA e IN_REFEITORIO (essenciais para a política de alimentação escolar).

Suporte Pedagógico: IN_BIBLIOTECA e IN_LABORATORIO_CIENCIAS (indicadores de qualidade de ensino).

Conectividade: IN_INTERNET (acesso à rede mundial de computadores).

Esporte e Lazer: IN_QUADRA_ESPORTES e IN_PISCINA (espaços para educação física).

Além destas, calculamos métricas derivadas durante a análise, como o Score de Infraestrutura, que representa a soma total de itens presentes em cada unidade escolar.

3.3 Importação e etapas de limpeza

Para garantir a qualidade e a consistência dos dados, implementamos um pipeline de limpeza dividido em três etapas críticas:

Tratamento de Valores Ausentes na Importação: Identificamos e convertemos automaticamente diversas variações de nulidade (como “NULL”, “n/a”, “N/A” e células vazias) para o padrão NA do R, evitando erros de cálculo posteriores.

Normalização de Texto: Aplicamos uma função de limpeza nas colunas de identificação (Município, Mesorregião e Nome da Entidade) que remove acentos, converte todos os caracteres para maiúsculas e elimina espaços em branco excessivos. Isso assegura que “Vitoria de Santo Antao” e “VITÓRIA DE SANTO ANTÃO”, por exemplo, sejam tratados como o mesmo local.

Padronização de Indicadores Binários: As colunas de infraestrutura (iniciadas por IN_) frequentemente apresentam inconsistências, misturando números (0/1) com texto (“Sim”/“Não”, “True”/“False”). Criamos uma lógica que unifica todas essas entradas em valores inteiros binários (1 para presença, 0 para ausência).

# Garantir pacotes usados neste chunk
if (!requireNamespace("dplyr", quietly = TRUE)) stop("Pacote 'dplyr' não encontrado.")
if (!requireNamespace("stringr", quietly = TRUE)) stop("Pacote 'stringr' não encontrado.")
if (!requireNamespace("stringi", quietly = TRUE)) stop("Pacote 'stringi' não encontrado.")
library(dplyr); library(stringr); library(stringi)

# Importar dataset
# Importação
# Leitura dos dados (Encoding Latin1 padrão do governo, ajustado depois)
educacao_data <- read.csv2("MicroDadosPEFinal.csv",
                           fileEncoding = "latin1",
                           stringsAsFactors = FALSE,
                           na.strings = c("", "NA", "N/A", "na", "n/a", "NULL"))

# --- Funções de limpeza ---
clean_text <- function(x) {
  x <- as.character(x)
  x <- stringr::str_squish(trimws(x))
  x[x == ""] <- NA
  if (all(is.na(x))) return(x)
  # REMOÇÃO DE ACENTOS (evita dupla conversão)
  x <- stringi::stri_trans_general(x, "Latin-ASCII")
  # 3. Maiúsculo
  x <- stringr::str_to_upper(x)
  return(x)
}

clean_indicator <- function(x) {
  if (is.numeric(x)) return(as.integer(x))
  x <- as.character(x)
  x[trimws(tolower(x)) == ""] <- NA
  x2 <- stringi::stri_trans_general(tolower(trimws(x)), "Latin-ASCII")
  as.integer(ifelse(x2 %in% c("1","sim","s","yes","y","true","t"), 1,
                    ifelse(x2 %in% c("0","nao","n","no","false","f"), 0, NA)))
}

# Aplicação da limpeza
text_cols <- intersect(c("NO_MESORREGIAO", "NO_MUNICIPIO", "NO_ENTIDADE"), names(educacao_data))
if (length(text_cols) > 0) educacao_data <- educacao_data %>% mutate(across(all_of(text_cols), clean_text))

indicator_cols <- names(educacao_data)[grepl("^IN_", names(educacao_data))]
if (length(indicator_cols) > 0) educacao_data <- educacao_data %>% mutate(across(all_of(indicator_cols), clean_indicator))

cat(sprintf("Dataset processado: %d linhas x %d colunas\n", nrow(educacao_data), ncol(educacao_data)))
## Dataset processado: 9935 linhas x 426 colunas

3.4 Conjunto de dados final

Clique para expandir/ocultar a Tabela de Dados


DT::datatable(head(educacao_data, 50),
              options = list(scrollX = TRUE, pageLength = 10),
              caption = "Amostra dos Dados Tratados")

3.5 Resumo das variáveis de interesse

Clique para expandir/ocultar o resumo das variáveis


infra_features <- c(
  "IN_LABORATORIO_CIENCIAS", "IN_BIBLIOTECA", "IN_REFEITORIO",
  "IN_QUADRA_ESPORTES", "IN_INTERNET", "IN_COZINHA", "IN_PISCINA"
)
infra_present <- intersect(infra_features, names(educacao_data))

if (length(infra_present) > 0) {
  df_feat <- lapply(infra_present, function(f) {
    vals <- educacao_data[[f]]
    present <- sum(vals == 1, na.rm = TRUE)
    non_na <- sum(!is.na(vals))
    percent <- ifelse(non_na > 0, present / non_na, NA_real_)
    data.frame(Recurso = f, Qtd_Escolas = present, Total_Validos = non_na, Percentual = percent)
  }) %>% bind_rows() %>% arrange(desc(Qtd_Escolas))
  
  df_feat$Recurso <- recode(df_feat$Recurso,
                          IN_LABORATORIO_CIENCIAS = "Laboratório de Ciências",
                          IN_BIBLIOTECA = "Biblioteca",
                          IN_REFEITORIO = "Refeitório",
                          IN_QUADRA_ESPORTES = "Quadra de Esportes",
                          IN_INTERNET = "Internet",
                          IN_COZINHA = "Cozinha",
                          IN_PISCINA = "Piscina")
  
  # Tabela Interativa Bonita (pesquisável e paginada)
  DT::datatable(df_feat, 
                rownames = FALSE,
                options = list(scrollX = TRUE, pageLength = 10),
                caption = "Disponibilidade de Recursos nas Escolas")
}

4 - Análise exploratória dos dados

4.1 Top municípios por número de escolas

schools_by_muni <- educacao_data %>%
  filter(!is.na(NO_MUNICIPIO)) %>%
  group_by(NO_MUNICIPIO) %>%
  summarise(n_schools = n(), .groups = "drop") %>%
  arrange(desc(n_schools))

top_n <- 20
schools_by_muni_top <- head(schools_by_muni, top_n)

p_muni <- ggplot(schools_by_muni_top, aes(x = reorder(NO_MUNICIPIO, n_schools), y = n_schools)) +
  geom_col(fill = "#2c3e50",
           aes(text = paste0("Município: ", NO_MUNICIPIO,
                             "<br>Escolas: ", n_schools))) +
  coord_flip() +
  labs(title = NULL, x = "", y = "Número de escolas") +
  theme_minimal()

plotly::ggplotly(p_muni, tooltip = "text")

O gráfico de barras acima destaca a distribuição quantitativa da rede escolar. Observamos, como esperado, que a capital e os grandes polos regionais concentram o maior número absoluto de unidades: Recife lidera o ranking com 1.235 escolas, seguido por Jaboatão dos Guararapes, Petrolina e Olinda.

Embora um número elevado de escolas indique alta capilaridade e capacidade de atendimento, isso traz consigo um desafio de gestão amplificado. A capital concentra uma parcela significativa da rede, o que exige estratégias logísticas diferentes das aplicadas em municípios com menos de 20 escolas, onde a gestão é mais centralizada.

4.2 Escolas por mesorregião

schools_by_meso <- educacao_data %>%
  filter(!is.na(NO_MESORREGIAO)) %>%
  group_by(NO_MESORREGIAO) %>%
  summarise(n_schools = n(), .groups = "drop") %>%
  arrange(desc(n_schools))

p_meso <- ggplot(schools_by_meso, aes(x = reorder(NO_MESORREGIAO, n_schools), y = n_schools)) +
  geom_col(fill = "#27ae60",
           aes(text = paste0("Mesorregião: ", NO_MESORREGIAO,
                             "<br>Escolas: ", n_schools))) +
  coord_flip() +
  labs(title = NULL, x = "", y = "Número de escolas") +
  theme_minimal()

plotly::ggplotly(p_meso, tooltip = "text")

Ao agrupar os dados pelas mesorregiões oficiais do IBGE, visualizamos onde está o “peso” do sistema educacional do estado. A Região Metropolitana de Recife lidera com 3.203 escolas, seguida pelo Agreste (2.828), Mata Pernambucana (1.524), Sertão (1.469) e São Francisco (911).

A concentração de escolas em regiões específicas reflete a densidade demográfica, mas levanta questões sobre o acesso em áreas mais remotas do Sertão. Se a proporção de escolas for muito discrepante da proporção populacional, isso pode indicar salas de aula superlotadas nos grandes centros ou, inversamente, uma rede pulverizada de pequenas escolas rurais no interior que necessitam de transporte escolar robusto.

4.3 Infraestrutura geral e distribuição

if (exists("infra_present") && length(infra_present) > 0) {
  
  # Gráfico 1
  p_infra_overall <- ggplot(df_feat, aes(x = reorder(Recurso, Qtd_Escolas), y = Qtd_Escolas)) +
    geom_col(fill = "#2980b9",
             aes(text = paste0("Item: ", Recurso,
                               "<br>Escolas: ", Qtd_Escolas,
                               "<br>Cobertura: ", scales::percent(Percentual, accuracy = 0.1)))) +
    coord_flip() +
    labs(title = "Total de escolas por item", x = "", y = "") +
    theme_minimal()

  # Gráfico 2
  infra_matrix <- educacao_data[, infra_present, drop = FALSE]
  infra_count <- rowSums(infra_matrix == 1, na.rm = TRUE)
  df_count <- data.frame(n_resources = infra_count) %>% count(n_resources)
  
  p_infra_count <- ggplot(df_count, aes(x = n_resources, y = n)) +
    geom_col(fill = "#e67e22",
             aes(text = paste0("Itens presentes: ", n_resources,
                               "<br>Qtd Escolas: ", n))) +
    labs(title = "Quantas escolas têm X itens?",
         x = "Número de itens simultâneos", y = "Qtd Escolas") +
    theme_minimal()

  htmltools::tagList(
    plotly::ggplotly(p_infra_overall, tooltip = "text"),
    htmltools::br(), htmltools::hr(),
    plotly::ggplotly(p_infra_count, tooltip = "text")
  )
}


O item com maior cobertura é a Internet, presente em 7.509 escolas (93,7%), seguida pela Cozinha (86%). Por outro lado, itens essenciais para a qualidade do ensino e bem-estar aparecem com baixa frequência: Biblioteca (47,4%), Quadra de Esportes (30%), Refeitório (27%), Laboratório de Ciências (13,6%) e Piscina (3,7%).

Itens ligados à alimentação (Cozinha/Refeitório) tendem a ter maior cobertura devido à obrigatoriedade do PNAE (Programa Nacional de Alimentação Escolar).

Nota-se um gap pedagógico preocupante. Enquanto itens básicos são comuns, recursos avançados como “Laboratório de Ciências” costumam aparecer na cauda inferior da distribuição. Isso sugere que, embora as escolas garantam a permanência básica do aluno (alimentação), muitas ainda carecem de ferramentas essenciais para o ensino prático de STEM (Ciências e Tecnologia).

O segundo gráfico mostra a “completude” das escolas. Apenas 7 escolas possuem todas as infraestruturas relatadas. A grande maioria (2.766 escolas) possui apenas 2 itens simultâneos, indicando um cenário de precariedade sistêmica onde o aluno médio frequenta um ambiente com infraestrutura parcial.

4.4 Mapa: Média de infraestrutura por município

if (!exists("educacao_data")) stop("educacao_data não encontrado.")

# 1. Garantir score
infra_cols <- names(educacao_data)[grepl("^IN_", names(educacao_data))]
if (length(infra_cols) > 0 && !"infra_score" %in% names(educacao_data)) {
  educacao_data$infra_score <- rowSums(educacao_data[, infra_cols, drop = FALSE] == 1, na.rm = TRUE)
}

# 2. Agregar Dados
if ("CO_MUNICIPIO" %in% names(educacao_data)) {
  agg_muni <- educacao_data %>%
    filter(!is.na(CO_MUNICIPIO)) %>%
    group_by(CO_MUNICIPIO, NO_MUNICIPIO) %>% 
    summarise(avg_infra = mean(infra_score, na.rm = TRUE), 
              n_schools = n(), .groups = "drop") %>%
    mutate(CO_MUNICIPIO = as.character(CO_MUNICIPIO))
} else {
  # Fallback se não tiver código IBGE
  agg_muni <- educacao_data %>%
    filter(!is.na(NO_MUNICIPIO)) %>%
    group_by(NO_MUNICIPIO) %>%
    summarise(avg_infra = mean(infra_score, na.rm = TRUE), 
              n_schools = n(), .groups = "drop")
}

# 3. Baixar Mapa
mun <- tryCatch(
  geobr::read_municipality(code_muni = "PE", year = 2019, showProgress = FALSE), 
  error = function(e) { return(NULL) }
)

if (!is.null(mun)) {
  mun$code_muni <- as.character(mun$code_muni)
  
  # Limpeza essencial para o Join funcionar
  mun$name_muni <- stringi::stri_trans_general(mun$name_muni, "Latin-ASCII")
  mun$name_muni <- stringr::str_to_upper(mun$name_muni)
  
  # Join Seguro
  if ("CO_MUNICIPIO" %in% names(agg_muni)) {
    mun_join <- dplyr::left_join(mun, agg_muni, by = c("code_muni" = "CO_MUNICIPIO"))
  } else {
    mun_join <- dplyr::left_join(mun, agg_muni, by = c("name_muni" = "NO_MUNICIPIO"))
  }

  # Plot
  p_map <- ggplot(mun_join) +
    geom_sf(aes(fill = avg_infra,
                text = paste0("Município: ", name_muni, 
                              "<br>Média Infra: ", round(avg_infra, 2),
                              "<br>Escolas: ", n_schools)), 
            color = "white", size = 0.1) +
    scale_fill_viridis_c(option = "viridis", na.value = "#ecf0f1", name = "Média") +
    labs(title = "Média de infraestruturas por município (PE)",
         subtitle = "Passe o mouse para ver detalhes") +
    theme_minimal() +
    theme(axis.text = element_blank(), 
          axis.ticks = element_blank(), 
          panel.grid = element_blank()) # Remove grades que poluem o mapa

  plotly::ggplotly(p_map, tooltip = "text")
} else {
  cat("Mapa indisponível (erro no download do geobr).\n")
}

A espacialização da média de infraestrutura revela padrões distintos. As manchas escuras (indicando pouca infraestrutura) aparecem mais frequentemente no interior, enquanto no litoral elas são menos frequentes.

Curiosamente, alguns municípios do interior aparecem com manchas claras (alta média), como Santa Cruz e Salgueiro. No entanto, é importante notar que esses municípios apresentam um número total de escolas bastante baixo. Isso pode indicar um viés estatístico onde é “mais fácil” ter uma média alta com poucas escolas, ou apontar para um outro problema estrutural: a insuficiência de escolas para atender a população local.

4.5 Rankings e Heatmap de Infraestrutura

# Verifica se os dados agregados existem
if (!exists("agg_muni") || nrow(agg_muni) == 0) {
  cat("Dados agregados por município não disponíveis.\n")
} else {

  # Ordenar
  df <- agg_muni %>% 
    arrange(desc(avg_infra)) %>% 
    mutate(rank = row_number())

  top_n <- min(15, nrow(df))
  
  # Gráfico 1: Melhores
  p_top <- df %>% 
    slice_head(n = top_n) %>%
    ggplot(aes(x = reorder(NO_MUNICIPIO, avg_infra), y = avg_infra)) +
    geom_col(fill = "steelblue",
             aes(text = paste0("Município: ", NO_MUNICIPIO,
                               "<br>Média Infra: ", round(avg_infra, 2),
                               "<br>Escolas: ", n_schools))) +
    coord_flip() +
    labs(title = paste0("Top ", top_n, " municípios: Maior Infraestrutura"), 
         x = NULL, y = "Média de itens") +
    theme_minimal()

  # Gráfico 2: Piores
  p_bottom <- df %>% 
    slice_tail(n = top_n) %>%
    ggplot(aes(x = reorder(NO_MUNICIPIO, -avg_infra), y = avg_infra)) +
    geom_col(fill = "tomato",
             aes(text = paste0("Município: ", NO_MUNICIPIO,
                               "<br>Média Infra: ", round(avg_infra, 2),
                               "<br>Escolas: ", n_schools))) +
    coord_flip() +
    labs(title = paste0("Bottom ", top_n, " municípios: Menor Infraestrutura"), 
         x = NULL, y = "Média de itens") +
    theme_minimal()
  
  # Gráfico 3: Heatmap (Apenas se tivermos as variáveis detalhadas)
  plot_heat <- NULL 
  if (exists("infra_present") && length(infra_present) > 0) {

    top_munis <- head(df$NO_MUNICIPIO, 20)
    
    # Filtrar dados originais para os top municípios
    long <- educacao_data %>%
      filter(NO_MUNICIPIO %in% top_munis) %>%
      select(NO_MUNICIPIO, all_of(infra_present)) %>%
      pivot_longer(cols = all_of(infra_present),
                   names_to = "resource", values_to = "value") %>%
      group_by(NO_MUNICIPIO, resource) %>%
      summarise(pct = mean(value == 1, na.rm = TRUE), .groups = "drop")
    
    p_heat <- ggplot(long, aes(x = resource, y = NO_MUNICIPIO, fill = pct)) +
      geom_tile(color = "white",
                aes(text = paste0("Município: ", NO_MUNICIPIO,
                                  "<br>Recurso: ", resource,
                                  "<br>Presença: ", scales::percent(pct, accuracy=0.1)))) +
      scale_fill_viridis_c(option = "plasma", labels = scales::percent, name = "%") +
      labs(title = "Heatmap: Presença de recursos (Top 20 Municípios)", x = NULL, y = NULL) +
      theme_minimal() + 
      theme(axis.text.x = element_text(angle = 45, hjust = 1))
      
    plot_heat <- plotly::ggplotly(p_heat, tooltip = "text")
  }

  # Renderizar tudo junto
  htmltools::tagList(
    plotly::ggplotly(p_top, tooltip = "text"),
    htmltools::br(),
    plotly::ggplotly(p_bottom, tooltip = "text"),
    htmltools::br(),
    plot_heat 
  )
}


As barras opostas mostram a amplitude da desigualdade no estado. Comparar a média do 1º colocado com a do último expõe a distância entre as realidades educacionais dentro da mesma unidade federativa.

Frequentemente, municípios menores aparecem no topo do ranking de infraestrutura média. Isso ocorre porque é mais fácil equipar e manter 10 escolas em uma cidade pequena do que 300 em uma metrópole. Por outro lado, os municípios na base do ranking (Bottom 15) devem ser encarados como alvos prioritários para políticas de redistribuição de recursos estaduais e federais.

A matriz de calor detalha a composição da infraestrutura nos melhores municípios.

O heatmap refina nossa percepção de “qualidade”. Ele mostra que mesmo nos municípios “Top 20”, a cobertura não é uniforme. É possível ver colunas inteiras escuras (ex: falta generalizada de Laboratórios) mesmo em cidades com boa média geral. Isso serve como um diagnóstico preciso para gestores: mostra exatamente qual item específico está puxando a média para baixo, permitindo investimentos cirúrgicos em vez de genéricos.


5 - Conclusões

5.1 Declaração do problema

Este estudo investigou as desigualdades de infraestrutura escolar em Pernambuco utilizando os microdados do Censo Escolar 2024. A infraestrutura física é um determinante direto da permanência e da aprendizagem. Mapear sua distribuição não apenas revela desigualdades históricas, como também fornece evidências objetivas para orientar políticas públicas de investimento e gestão da rede.

5.2 Como abordamos o problema

O trabalho consistiu em:

  • Importar e padronizar os microdados do INEP para Pernambuco.
  • Tratar inconsistências textuais e padronizar indicadores binários.
  • Criar métricas derivadas como o Score de Infraestrutura (0–7).
  • Realizar agregações por município e mesorregião.
  • Produzir análises visuais (mapas, barras, heatmaps) para identificar padrões regionais e intra-regionais.

5.3 Insights principais

A análise revelou que a infraestrutura básica de alimentação (Cozinha) está amplamente difundida, provavelmente devido a programas federais de longa data. No entanto, há um déficit crítico em infraestrutura pedagógica avançada (Laboratórios de Ciências e Bibliotecas). Além disso, identificamos que cidades menores frequentemente superam grandes centros em média de equipamentos por escola, sugerindo que a complexidade de gestão em grandes redes é um gargalo real.

5.4 Implicações para clientes

Recomendamos que a Secretaria de Educação utilize a lista dos “Bottom 15 Municípios” gerada neste relatório como alvo prioritário para reformas físicas. Além disso, para os municípios de alta performance, o foco deve mudar de “construção” para “equipamento pedagógico”, preenchendo as lacunas de laboratórios identificadas no Heatmap.

5.5 Limitações e trabalhos futuros

A análise tem limitações importantes:

  • Indicadores são binários (presença/ausência), sem medir qualidade.
  • O estudo é transversal, olhando apenas 2024.
  • Alguns municípios com médias altas possuem poucas escolas, enviesando o ranking.

Trabalhos futuros poderiam incluir:

  • Séries históricas (2010–2024) para entender evolução.
  • Cruzamento com IDEB para medir impacto pedagógico real.
  • Integração com dados socioeconômicos (IBGE) para explicar disparidades.
  • Avaliação qualitativa (ex.: tamanho da biblioteca, velocidade da internet).