Conhecendo o pacote geobr

Beatriz Milz

2023-11-22

Pacote geobr

Funções importantes

  • read_country(): Delimitação do Brasil

  • read_state(): Delimitação dos estados do Brasil

  • read_state("SP"): Delimitação de um estado específico, usando a sigla como argumento

  • read_municipality(): Delimitação de todos os municípios do Brasil. É uma base pesada!

  • read_municipality(code_muni = 3550308): Delimitação de um município específico, usando o código do IBGE do município.

Consultando todas as funções disponíveis

  • Função list_geobr()

Conceitos importantes: Vetor x Raster

Com o geobr, trabalhamos com dados vetoriais!

  • Pontos: localização de uma escola, ponto de coleta, etc.

  • Linhas: ruas/estradas/rodovias, rios, etc.

  • Polígonos: delimitação de cidades, estados, países, etc.

Usamos uma nova classe de dados: sf!

Vamos para alguns exemplos!!

Ler a delimitação dos estados brasileiros

# Carregando pacotes necessários
library(geobr)
library(sf)
library(tidyverse)
# Lendo os dados da delimitação dos estados brasileiros
brasil_ufs <- read_state(showProgress = FALSE)
# Classe do objeto
class(brasil_ufs)
[1] "sf"         "data.frame"

Explorando o objeto

glimpse(brasil_ufs)
Rows: 27
Columns: 6
$ code_state   <dbl> 11, 12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 25, 26, 27, 2…
$ abbrev_state <chr> "RO", "AC", "AM", "RR", "PA", "AP", "TO", "MA", "PI", "CE…
$ name_state   <chr> "Rondônia", "Acre", "Amazonas", "Roraima", "Pará", "Amapá…
$ code_region  <dbl> 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, …
$ name_region  <chr> "Norte", "Norte", "Norte", "Norte", "Norte", "Norte", "No…
$ geom         <MULTIPOLYGON [°]> MULTIPOLYGON (((-63.32721 -..., MULTIPOLYGON…

Visualizando os estados brasileiros

brasil_ufs |> 
  ggplot() +
  geom_sf()

Filtrando o estado de São Paulo

estado_sp <- brasil_ufs |> 
  filter(abbrev_state == "SP") 

estado_sp |>
  ggplot() +
  geom_sf()

E os municípios?

# Carregando municípios
brasil_municipios <- read_municipality(showProgress = FALSE)

Explorando o objeto

glimpse(brasil_municipios)
Rows: 5,567
Columns: 5
$ code_muni    <dbl> 1100015, 1100023, 1100031, 1100049, 1100056, 1100064, 110…
$ name_muni    <chr> "Alta Floresta D'oeste", "Ariquemes", "Cabixi", "Cacoal",…
$ code_state   <chr> "11", "11", "11", "11", "11", "11", "11", "11", "11", "11…
$ abbrev_state <chr> "RO", "RO", "RO", "RO", "RO", "RO", "RO", "RO", "RO", "RO…
$ geom         <MULTIPOLYGON [°]> MULTIPOLYGON (((-62.2462 -1..., MULTIPOLYGON…

Como saber o código IBGE de um município?

  • Você pode consultar o código IBGE de um município no site do IBGE.

Filtrando o município de São Paulo

muni_sp <- brasil_municipios |> 
  dplyr::filter(code_muni == 3550308) 

Visualizando o município de São Paulo

muni_sp |> 
  ggplot() +
  geom_sf()

E escolas?

escolas_brasil <- read_schools(showProgress = FALSE)

Explorando o objeto

glimpse(escolas_brasil)
Rows: 222,936
Columns: 19
$ abbrev_state                   <chr> "RO", "RO", "RO", "RO", "RO", "RO", "RO…
$ name_muni                      <chr> "Porto Velho", "Porto Velho", "Porto Ve…
$ code_school                    <int> 11000023, 11000040, 11000058, 11000082,…
$ name_school                    <chr> "EEEE ABNAEL MACHADO DE LIMA - CENE", "…
$ education_level                <chr> "Ensino Fundamental", "Educação Infanti…
$ education_level_others         <chr> "Atendimento Educacional Especializado"…
$ admin_category                 <chr> "Pública", "Pública", "Privada", "Priva…
$ address                        <chr> "AVENIDA AMAZONAS, 6492 ZONA LESTE. TIR…
$ phone_number                   <chr> "(69) 992083054", "(69) 32135237", "(69…
$ government_level               <chr> "Estadual", "Municipal", "Privada", "Pr…
$ private_school_type            <chr> "Não Informado", "Não Informado", "Part…
$ private_government_partnership <chr> "Não", "Não", "Não", "Não", "Não", "Não…
$ regulated_education_council    <chr> "Não", "Sim", "Sim", "Sim", "Sim", "Sim…
$ service_restriction            <chr> "ESCOLA ATENDE EXCLUSIVAMENTE ALUNOS CO…
$ size                           <chr> "Entre 51 e 200 matrículas de escolariz…
$ urban                          <chr> "Urbana", "Urbana", "Urbana", "Urbana",…
$ location_type                  <chr> "A escola não está em área de localizaç…
$ date_update                    <chr> "2020-10-18", "2020-10-18", "2020-10-18…
$ geom                           <POINT [°]> POINT (-63.85401 -8.758459), POIN…

Escolas no município de São Paulo

escolas_saopaulo <- escolas_brasil |> 
  dplyr::filter(abbrev_state == "SP",
         name_muni == "São Paulo") 

Escolas por government_level

escolas_saopaulo |> 
  dplyr::count(government_level)
Simple feature collection with 4 features and 2 fields
Geometry type: MULTIPOINT
Dimension:     XY
Bounding box:  xmin: -46.8074 ymin: -23.90918 xmax: -46.36614 ymax: -23.3996
Geodetic CRS:  SIRGAS 2000
  government_level    n                           geom
1         Estadual 1275 MULTIPOINT ((-46.75558 -23....
2          Federal    4 MULTIPOINT ((-46.62169 -23....
3        Municipal 1563 MULTIPOINT ((-46.7141 -23.8...
4          Privada 5272 MULTIPOINT ((-46.7133 -23.8...

Escolas que oferecem Ensino Médio

ensino_medio_sao_paulo <- escolas_saopaulo |>
  dplyr::filter(stringr::str_detect(education_level, "Ensino Médio")) |>
  dplyr::group_by(government_level) |> 
  dplyr::mutate(
    numero_linhas = dplyr::n(),
    nome_label = paste0(government_level, " (N=", numero_linhas, ")")
  ) |> 
dplyr::ungroup()

Vamos visualizar?

Visualizando as escolas

escolas_saopaulo |> 
  ggplot() +
  geom_sf()

Visualizando as escolas e o município

escolas_saopaulo |> 
  ggplot() +
  geom_sf(data = muni_sp) +
  geom_sf()

Visualizando as escolas por government_level

escolas_saopaulo |> 
  ggplot() +
  geom_sf(data = muni_sp) +
  geom_sf(aes(color = government_level))

Visualizando as escolas por government_level

escolas_saopaulo |> 
  ggplot() +
  geom_sf(data = muni_sp) +
  geom_sf(aes(color = government_level), show.legend = FALSE) +
  facet_wrap(~government_level, nrow = 1)

Visualizando as escolas que oferecem Ensino Médio

ensino_medio_sao_paulo |>
  ggplot() +
  geom_sf(data = muni_sp) +
  geom_sf(aes(color = government_level, 
              alpha = 0.1), 
          show.legend = FALSE) +
  facet_wrap(~ government_level, nrow = 1)

Localização das escolas estaduais e escolas privadas no município de São Paulo, que oferecem Ensino Médio

Ver código
library(ggspatial)
ensino_medio_sao_paulo |>
  filter(government_level %in% c("Estadual", "Privada")) |>
  ggplot() +
  geom_sf(data = muni_sp) +
  geom_sf(aes(color = government_level, alpha = 0.1), show.legend = FALSE) +
  facet_wrap(~ nome_label) +
  labs(x = "Longitude",
       y = "Latitude") +
  scale_fill_viridis_d(begin = 0.2, end = 0.9) +
  theme(legend.spacing.x = unit(1.0, 'cm')) +
  theme_bw() +
  theme(
    panel.grid.major = element_line(
      color = gray(0.9),
      linetype = "dashed",
      size = 0.1
    ),
    panel.background = element_rect(fill = "white")
  ) +
  theme(
    axis.text.y = element_text(
      angle = 90,
      hjust = 0.5,
      size = 8
    ),
    axis.text.x = element_text(size = 8),
    axis.title.y = element_text(size = rel(0.8)),
    axis.title.x = element_text(size = rel(0.8)),
    legend.title = element_text(size = rel(0.8))
  )