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_state | name_muni | code_school | name_school | education_level | education_level_others | admin_category | address | phone_number | government_level | private_school_type | private_government_partnership | regulated_education_council | service_restriction | size | urban | location_type | date_update | geom |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
RO | Porto Velho | 11000023 | EEEE ABNAEL MACHADO DE LIMA - CENE | Ensino Fundamental | Atendimento Educacional Especializado | Pública | AVENIDA AMAZONAS, 6492 ZONA LESTE. TIRADENTES. 76824-556 Porto Velho - RO. | (69) 992083054 | Estadual | Não Informado | Não | Não | ESCOLA ATENDE EXCLUSIVAMENTE ALUNOS COM DEFICIÊNCIA | Entre 51 e 200 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-63.85401 -8.758459) |
RO | Porto Velho | 11000040 | EMEIEF PEQUENOS TALENTOS | Educação Infantil | Pública | RUA CAETANO, 3256 PREDIO. CALADINHO. 76808-108 Porto Velho - RO. | (69) 32135237 | Municipal | Não Informado | Não | Sim | ESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTO | Entre 201 e 500 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-63.88392 -8.79373) | |
RO | Porto Velho | 11000058 | CENTRO DE ENSINO CLASSE A | Educação Infantil, Ensino Fundamental, Ensino Médio | Privada | AVENIDA CARLOS GOMES, 1135 CENTRO. 76801-123 Porto Velho - RO. | (69) 32244473 | Privada | Particular | Não | Sim | ESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTO | Mais de 1000 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-63.90199 -8.760734) | |
RO | Porto Velho | 11000082 | CENTRO EDUCACIONAL PRESBITERIANO 15 DE NOVEMBRO | Educação Infantil, Ensino Fundamental | Privada | RUA ALMIRANTE BARROSO, 1483 SANTA BARBARA. 76804-214 Porto Velho - RO. | (69) 32245636 | Privada | Particular | Não | Sim | ESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTO | Entre 51 e 200 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-63.89618 -8.765205) | |
RO | Porto Velho | 11000104 | CENTRO EDUC CORA CORALINA | Educação Infantil, Ensino Fundamental | Privada | RUA MEXICO, 1056 NOVA PORTO VELHO. 76820-190 Porto Velho - RO. | (69) 32252616 | Privada | Particular | Não | Sim | ESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTO | Entre 501 e 1000 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-63.87547 -8.768633) | |
RO | Porto Velho | 11000171 | CENTRO EDUCACIONAL MOJUCA | Ensino Fundamental, Ensino Médio | Privada | AVENIDA NACOES UNIDAS, 605 NOSSA SENHORA DAS GRACAS. 76804-175 Porto Velho - RO. | (69) 32215782 | Privada | Particular | Não | Sim | ESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTO | Entre 201 e 500 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-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
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_state | name_muni | code_school | name_school | education_level | education_level_others | admin_category | address | phone_number | government_level | private_school_type | private_government_partnership | regulated_education_council | service_restriction | size | urban | location_type | date_update | geom | etapa | value |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SP | São Paulo | 35000012 | AYRES DE MOURA PROFESSOR | Ensino Fundamental | Pública | RUA ARTUR ORLANDO, 907 RUA. VILA JAGUARA. 05118-000 São Paulo - SP. | (11) 36251934 | Estadual | Não Informado | Não | Sim | ESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTO | Entre 501 e 1000 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-46.74971 -23.51227) | Ensino Fundamental | 1 | |
SP | São Paulo | 35000024 | GAVIAO PEIXOTO BRIGADEIRO | Ensino Fundamental, Ensino Médio, Educação de Jovens Adultos | Atividade Complementar | Pública | MOGEIRO, 710 RUA. VILA PERUS. 05208-230 São Paulo - SP. | (11) 39170748 | Estadual | Não Informado | Não | Sim | ESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTO | Mais de 1000 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-46.75938 -23.40471) | Ensino Fundamental | 1 |
SP | São Paulo | 35000024 | GAVIAO PEIXOTO BRIGADEIRO | Ensino Fundamental, Ensino Médio, Educação de Jovens Adultos | Atividade Complementar | Pública | MOGEIRO, 710 RUA. VILA PERUS. 05208-230 São Paulo - SP. | (11) 39170748 | Estadual | Não Informado | Não | Sim | ESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTO | Mais de 1000 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-46.75938 -23.40471) | Ensino Médio | 1 |
SP | São Paulo | 35000036 | JOAO SOLIMEO | Ensino Fundamental, Ensino Médio | Atendimento Educacional Especializado, Atividade Complementar | Pública | DO SABAO, 1497 ESTRADA. JARDIM MARISTELA. 02806-000 São Paulo - SP. | (11) 39238001 | Estadual | Não Informado | Não | Sim | ESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTO | Mais de 1000 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-46.6984 -23.46947) | Ensino Fundamental | 1 |
SP | São Paulo | 35000036 | JOAO SOLIMEO | Ensino Fundamental, Ensino Médio | Atendimento Educacional Especializado, Atividade Complementar | Pública | DO SABAO, 1497 ESTRADA. JARDIM MARISTELA. 02806-000 São Paulo - SP. | (11) 39238001 | Estadual | Não Informado | Não | Sim | ESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTO | Mais de 1000 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-46.6984 -23.46947) | Ensino Médio | 1 |
SP | São Paulo | 35000048 | WALFREDO ARANTES CALDAS PROFESSOR | Ensino Médio | Pública | DEPUTADO CANTIDIO SAMPAIO, 1701 VILA SOUZA. 02860-001 São Paulo - SP. | (11) 38513005 | Estadual | Não Informado | Não | Sim | ESCOLA EM FUNCIONAMENTO E SEM RESTRIÇÃO DE ATENDIMENTO | Mais de 1000 matrículas de escolarização | Urbana | A escola não está em área de localização diferenciada | 2020-10-18 | POINT (-46.67971 -23.464) | Ensino Médio | 1 |
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
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.