Plotando escolas no mapa com R: análise sobre São Paulo/SP

Nesse breve artigo de hands on com R, aprenderemos de forma rápida a plotar no mapa instituições escolares geolocalizadas pelo Inep/MEC. Como há muitas escolas no país, escolher o mapa do Brasil não é a melhor opção para uma visualização intuitiva, pois muitos pontos irão se sobrepor. Por isso, vamos escolher o município de São Paulo como forma de observar a dispersão de escolas pela cidade e quais redes são as principais responsáveis por cada uma das três principais etapas da Educação Básica (Educação Infantil, Ensino Fundamental e Ensino Médio).

O que guia a construção desse mapa é compreender a apropriação do regime de colaboração educacional entre os entes federativos. Segundo o Censo Escolar de 2021, o Brasil conta com aproximadamente 180mil escolas espalhadas por todo o território nacional que são administradas pelo poder público e entidades privadas. Os governos federal, estaduais e municipais participam de um regime de colaboração e responsabilidade na administração de cada etapa educacional, que, como previsto pela Constituição de 1988, estabelece que os estado têm como principal foco o atendimento de Ensino Médio enquanto as redes municipais devem priorizar a Educação Infantil e o Ensino Fundamental. Geolocalizar as escolas é uma forma de visualizarmos o como essa distribuição de responsabilidade se estabelece no país.

Com isso, vamos responder à seguinte pergunta: As etapas da Educação Infantil, Ensino Fundamental e Ensino Médio são administradas no município de São Paulo levando em consideração as orientações do regime de colaboração federativo?.

Há diversas formas de responder a essa questão graficamente. A escolha de um mapa tem objetivo pedagógico para a prática desse post. Com isso, tanto veremos a dispersão das milhares de escolas no município de São Paulo, como, também, teremos uma fácil visualização da responsabilidade administrativa dos entes públicos - além de trabalhar com dados georreferenciados de escolas que é o foco daqui.

Vamos fazer todo esse processo em alguns minutos com R e chegaremos no resultado abaixo.

Baixando e tratando os dados

Pacotes a serem utilizados:

# Caso não tenha alguma desses pacotes, faça a instalação
# install.packages("dplyr")
# install.packages("tidyr")
# install.packages("stringr")
# install.packages("geobr")
#Se estiver com dificuldade de instalar o geobr acima, utilize o código abaixo
#devtools::install_github("ipeaGIT/geobr", subdir = "r-package")
# install.packages("ggplot2")
library(dplyr)
library(tidyr)
library(stringr)
library(geobr)
library(ggplot2)

Realizado o carregamento dos pacotes, vamos baixar o mapa do município de São Paulo e as escolas geolocalizadas utilizando o pacote geobr produzido pela equipe do Instituto de Pesquisa Econômica Aplicada (ipea). O download pode levar alguns minutos a depender da velocidade da sua internet.

Para fazer o download apenas do mapa da cidade de São Paulo, você precisará do código de 7 dígitos do município. Há duas formas de fazer isso rapidamente. A primeira é olhando no site IBGE Cidades. Basta preencher o nome do município no campo de pesquisa que aparecerá o código no resultado.

A segunda opção é utilizando a função do geobr lookup_muni(), que retorna informações sobre o município desejado. Vamos utilizar essa função para encontrar o código do município.

cod <- 
  geobr::lookup_muni(name_muni = "São Paulo")$code_muni

print(cod)
## [1] 3550308

Como podemos ver, o código da cidade de São Paulo é 3550308. Armazenamos ele no objeto cod e iremos baixar o mapa da cidade com a função read_municipality(). Para as escolas, por sua vez, iremos fazer o download de todos os dados do país e, depois, filtrar para o município de São Paulo.

# Utilizarei simplified = T apenas para baixar um arquivo mais leve.
# Como não realizaremos análises, apenas visualização, 
# o mapa simplificado é suficiente.
municipio <- 
  geobr::read_municipality(code_muni = cod,
                           simplified = T,
                           showProgress = F)
escola <- 
  geobr::read_schools(showProgress = F)

Ao analisarmos os dados do objeto escola, veremos que não há apenas a localização georreferenciada, mas, também, informações sobre essas instituições, como a dependência administrativa (privada, municipal, estadual e federal), telefone, endereço e outros dados. Essas informações são provenientes do Censo Escolar e do Catálogo de Escolas do Inep e foram organizadas nesse banco, o que facilita bastante o trabalho caso queiramos fazer alguma filtragem. Vamos dar uma olhada em como os dados estão organizados.

abbrev_statename_municode_schoolname_schooleducation_leveleducation_level_othersadmin_categoryaddressphone_numbergovernment_levelprivate_school_typeprivate_government_partnershipregulated_education_councilservice_restrictionsizeurbanlocation_typedate_updategeom
ROPorto Velho11000023EEEE ABNAEL MACHADO DE LIMA - CENEEnsino FundamentalAtendimento Educacional EspecializadoPúblicaAVENIDA AMAZONAS, 6492 ZONA LESTE. TIRADENTES. 76824-556 Porto Velho - RO.(69) 992083054EstadualNão InformadoNãoNãoESCOLA ATENDE EXCLUSIVAMENTE ALUNOS COM DEFICIÊNCIAEntre 51 e 200 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-63.85401 -8.758459)
ROPorto Velho11000040EMEIEF PEQUENOS TALENTOSEducação InfantilPúblicaRUA CAETANO, 3256 PREDIO. CALADINHO. 76808-108 Porto Velho - RO.(69) 32135237MunicipalNão InformadoNãoSimESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTOEntre 201 e 500 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-63.88392 -8.79373)
ROPorto Velho11000058CENTRO DE ENSINO CLASSE AEducação Infantil, Ensino Fundamental, Ensino MédioPrivadaAVENIDA CARLOS GOMES, 1135 CENTRO. 76801-123 Porto Velho - RO.(69) 32244473PrivadaParticularNãoSimESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTOMais de 1000 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-63.90199 -8.760734)
ROPorto Velho11000082CENTRO EDUCACIONAL PRESBITERIANO 15 DE NOVEMBROEducação Infantil, Ensino FundamentalPrivadaRUA ALMIRANTE BARROSO, 1483 SANTA BARBARA. 76804-214 Porto Velho - RO.(69) 32245636PrivadaParticularNãoSimESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTOEntre 51 e 200 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-63.89618 -8.765205)
ROPorto Velho11000104CENTRO EDUC CORA CORALINAEducação Infantil, Ensino FundamentalPrivadaRUA MEXICO, 1056 NOVA PORTO VELHO. 76820-190 Porto Velho - RO.(69) 32252616PrivadaParticularNãoSimESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTOEntre 501 e 1000 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-63.87547 -8.768633)
ROPorto Velho11000171CENTRO EDUCACIONAL MOJUCAEnsino Fundamental, Ensino MédioPrivadaAVENIDA NACOES UNIDAS, 605 NOSSA SENHORA DAS GRACAS. 76804-175 Porto Velho - RO.(69) 32215782PrivadaParticularNãoSimESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTOEntre 201 e 500 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-63.89186 -8.765028)

Agora precisamos filtrar as escolas para a cidade de São Paulo. Como estou interessado apenas em ver escolas públicas, irei remover a localização das instituições privadas.

escola_muni <- escola %>% 
  filter(abbrev_state == "SP",
         name_muni == "São Paulo",
         government_level != "Privada")

Com os dados prontos, vamos dar início à montagem dos mapas.

Elaborando o gráfico com ggplot2

Ggplot2 é o principal pacote de construção de gráficos do R. A ideia é que você adicione camada por camada de código como se fosse uma colagem até que o gráfico fique pronto. A camada inicial (ggplot) é o suporte, a segunda camada o mapa e a terceira camada os pontos que representam as escolas. Por fim, faremos alguns ajustes estéticos no mapa para uma leitura mais convidativa.

ggplot(escola_muni) + # Camada inicial: o apoio. Escola é nossa base referência
 geom_sf(data = municipio)+ #segunda camada, o mapa do Brasil, que é um polígono
 geom_sf() # terceira camada a georreferência das escolas

Como podemos ver, o gráfico não é muito intuitivo. Os pontos são muito grandes e, com isso, não conseguimos ver o quão espalhada as escolas estão. Vamos diminuir um pouco os pontos.

ggplot(escola_muni) + # Camada inicial: o apoio
 geom_sf(data = municipio)+ #segunda camada, o mapa do Brasil, que é um polígono
 geom_sf(size = 0.8) # terceira camada a georreferência das escolas
A diminuição do tamanho dos pontos ajuda a diminuir a sobreposição e melhora a visualização. Como se trata de muitas escolas, é natural que não sejamos capaz de visualizar ponto a ponto. Para ficar mais interessante, vamos pintar os pontos conforme o tipo de dependência administrativa de cada escola. No Brasil, há quatro dependências que, também, são conhecidas como redes: Federal, Estadual, Municipal e Privada. Já removemos anteriormente a rede privada, portanto veremos apenas as dependências da rede pública.
ggplot(escola_muni) + # Camada inicial: o apoio
 geom_sf(data = municipio)+ #segunda camada, o mapa do Brasil, que é um polígono
 geom_sf(aes(color = government_level),
         size = 0.5)# terceira camada a georreferência das escolas. Adicionar cores

Como já abordado, segundo o regime de Colaboração e Cooperação Federativa que regem a Educação pública no país, a rede estudual deve atuar prioritariamente no Ensino Médio e as redes municipais na Educação Infantil e Ensino Fundamental. Para que possamos analisar essa divisão, precisamos classificar as escolas conforme a etapa que elas ofertam. No objeto escola_muni temos uma variável chamada education_level. Através dela podemos identificar qual o tipo de etapa a escola dispõe. Como algumas escolas oferecem mais de uma etapa, precisaremos fazer um tratamento no dados.

Estamos apenas interessados na Educação Infantil, Ensino Fundamental e Ensino Médio. O tratamento que fizermos abaixo irá empilhar os dados e, assim, as escolas que oferecem mais de uma etapa ficarão duplicadas. Isso não é problema, pois queremos saber, por exemplo, se a rede estadual oferece Educação Infantil. Se existir uma escola estadual que ofereça tanto Educação Infantil quanto Ensino Médio, essa escola ficará duplicada com dois identificadores, uma para cada etapa. Depois veremos no mapa como isso ficará mais fácil de visualizar.

escola_muni_fed <- 
  escola_muni %>%
  mutate(INFANTIL = ifelse(stringr::str_detect(education_level,"Infantil"),1,NA),
         FUNDAMENTAL = ifelse(stringr::str_detect(education_level,"Fundamental"),1,NA),
         MEDIO = ifelse(stringr::str_detect(education_level,"Ensino Médio"),1,NA))%>% 
  tidyr::pivot_longer(cols = c(INFANTIL, FUNDAMENTAL, MEDIO)) %>% 
  mutate(name = factor(name, 
                       levels = c("INFANTIL", "FUNDAMENTAL","MEDIO"),
                       labels = c("Educação Infantil", "Ensino Fundamental", "Ensino Médio"))) %>% 
  rename(etapa = name) %>% 
  # Remover escolas que não atendem Educação Infantil, Fundamental ou Médio
  filter(!is.na(value)) 
abbrev_statename_municode_schoolname_schooleducation_leveleducation_level_othersadmin_categoryaddressphone_numbergovernment_levelprivate_school_typeprivate_government_partnershipregulated_education_councilservice_restrictionsizeurbanlocation_typedate_updategeometapavalue
SPSão Paulo35000012AYRES DE MOURA PROFESSOREnsino FundamentalPúblicaRUA ARTUR ORLANDO, 907 RUA. VILA JAGUARA. 05118-000 São Paulo - SP.(11) 36251934EstadualNão InformadoNãoSimESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTOEntre 501 e 1000 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-46.74971 -23.51227)Ensino Fundamental1
SPSão Paulo35000024GAVIAO PEIXOTO BRIGADEIROEnsino Fundamental, Ensino Médio, Educação de Jovens AdultosAtividade ComplementarPúblicaMOGEIRO, 710 RUA. VILA PERUS. 05208-230 São Paulo - SP.(11) 39170748EstadualNão InformadoNãoSimESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTOMais de 1000 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-46.75938 -23.40471)Ensino Fundamental1
SPSão Paulo35000024GAVIAO PEIXOTO BRIGADEIROEnsino Fundamental, Ensino Médio, Educação de Jovens AdultosAtividade ComplementarPúblicaMOGEIRO, 710 RUA. VILA PERUS. 05208-230 São Paulo - SP.(11) 39170748EstadualNão InformadoNãoSimESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTOMais de 1000 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-46.75938 -23.40471)Ensino Médio1
SPSão Paulo35000036JOAO SOLIMEOEnsino Fundamental, Ensino MédioAtendimento Educacional Especializado, Atividade ComplementarPúblicaDO SABAO, 1497 ESTRADA. JARDIM MARISTELA. 02806-000 São Paulo - SP.(11) 39238001EstadualNão InformadoNãoSimESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTOMais de 1000 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-46.6984 -23.46947)Ensino Fundamental1
SPSão Paulo35000036JOAO SOLIMEOEnsino Fundamental, Ensino MédioAtendimento Educacional Especializado, Atividade ComplementarPúblicaDO SABAO, 1497 ESTRADA. JARDIM MARISTELA. 02806-000 São Paulo - SP.(11) 39238001EstadualNão InformadoNãoSimESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTOMais de 1000 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-46.6984 -23.46947)Ensino Médio1
SPSão Paulo35000048WALFREDO ARANTES CALDAS PROFESSOREnsino MédioPúblicaDEPUTADO CANTIDIO SAMPAIO, 1701 VILA SOUZA. 02860-001 São Paulo - SP.(11) 38513005EstadualNão InformadoNãoSimESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTOMais de 1000 matrículas de escolarizaçãoUrbanaA escola não está em área de localização diferenciada2020-10-18POINT (-46.67971 -23.464)Ensino Médio1

Com o novo banco construído, podemos visualizar essa divisão por etapa através de comandos facet do ggplot2, que separa o mapa em vários subgráficos conforme as categorias. Como temos três categorias (Infantil, Fundamental e Médio), o gráfico produzirá três diferentes mapas.

# Atenção, trocar escola_muni por escola_muni_fed
ggplot(escola_muni_fed) + # Camada inicial: o apoio
 geom_sf(data = municipio)+ #segunda camada, o mapa do Brasil, que é um polígono
 geom_sf(size = 0.8, aes(color = government_level)) + # terceira camada a georreferência das escolas. Adicionar cores
 facet_wrap(~etapa) # separar mapas por tipo de rede escolar
Por fim, vamos fazer uma série de ajustes gráficos para deixar o mapa visualmente mais agradável. O ponto desse post não é explicar como funciona cada elemento de edição estética do ggplot2. A parte boa é que os nomes dos elementos são intuitivos e você pode modificar conforme seu gosto para deixar o gráfico mais a sua cara. Eu aconselho!
theme_escola <- function(cor = "#0d4f64", ...){
  
  theme(panel.border=element_blank(),
        panel.grid.major=element_blank(),
        panel.grid.minor=element_blank(),
        
        text=element_text(color="white"),
        axis.title = element_blank(),
        axis.text = element_blank(),
        plot.title=element_text(face="bold", size = 16),
        plot.subtitle = element_text(size = 12),
        plot.background = element_rect(fill=cor, color = cor),
        panel.background = element_rect(fill=cor),
        plot.margin  = margin(t=20, b=20, r=10, l=10),
        plot.caption = element_text(lineheight = 1.2),
        legend.background  = element_rect(fill = cor,
                                          color = cor),
        axis.ticks = element_blank(),
        legend.text = element_text(color = "white", face = "bold"),
        legend.title = element_text(face = "bold", size = 12),
        strip.text = element_text(face = "bold", size = 12),
        
        ...
  )
  
  
}


emap <- ggplot(escola_muni_fed) + # Camada inicial: o apoio
 geom_sf(data = municipio)+ #segunda camada, o mapa do Brasil, que é um polígono
 geom_sf(size = 0.8, aes(color = government_level)) + # terceira camada a georreferência das escolas. Adicionar cores
 facet_wrap(~etapa) + # separar mapas por tipo de rede escolar
 theme_escola() +
 #Adicionar cor manualmente aos pontos
 scale_color_manual(values = c("#4daf4a","#ff7f00","#e41a1c"))+
 #Aumentar o tamanho dos pontos da legenda
 guides(color = guide_legend(override.aes = list(size = 3)))+
 #Adicionar legendas
 labs(title = "Distribuição das escolas públicas no município de São Paulo/SP",
      caption = 'Produção: Daniel Castro | Fonte: INEP/MEC obtidos no pacote geobr (PEREIRA & GONÇALVES, 2022)',
      color = "Rede")


emap

Os mapas nos permitem observar que o Ensino Fundamental no município de São Paulo é cotutelado tanto pela rede municipal quanto pela rede estadual. Os dados que temos em mãos não nos permitem análises mais aprofundadas do como essa cotutela se estabelece, necessitando completar com informações do Censo Escolar. Porém, o que possivelmente ocorre é que o município deve ficar encarregado,em sua maioria, da primeira etapa do Ensino Fundamental (1º ao 5º ano), enquanto a rede estadual da segunda etapa (6º ao 9º ano). Esse tipo de divisão é muito comúm em diversos estados e, aos poucos, há um processo de transição do Ensino Fundamental para as redes municipais no intuito de cumprir com obrigações constitucionais de cada ente federativo.

Por outro lado, tanto a Educação Infantil quanto o Ensino Médio ofertados no município de São Paulo/SP já são administrados conforme as orientações do regime de colaboração, o que significa que, majoritariamente, a rede municipal é responsável pela Educação Infantil e o Ensino Médio pela rede Estadual.


Em apenas alguns minutos e linhas de código podemos visualizar a distribuição geográfica de escolas por diferentes territórios. O uso do pacote geobr é uma mão na roda para lhe ajudar nesse trabalho. Conforme você vai se adaptando ao uso de dados educacionais, aconselho se aventurar nos microdados do Censo Escolar e no Catálogo de Escolas para análises mais apuradas.

Daniel Castro
Daniel Castro
Avaliação de Impacto, Políticas Públicas e Pesquisa Educacional

Pedagogo e Pesquisador de Políticas Educacionais. Interessado em Avaliação cognitiva, desigualdades sociais e estudos de larga escala.