ExercĂ­cios

ExercĂ­cio

Criar um mapa das praias portuguesas com bandeira azul.

ExercĂ­cio

O primeiro passo foi encontrar a informação desejada. Neste caso as praias com bandeira azul estão listadas numa página web:

alt text

ExercĂ­cio

Esta página está no formato HTML onde cada região do país - num total de sete - encontra-se numa tabela separada.

Vai ser necessário fazer algum pré-processamento para criar uma tabela que organize esta informação.

Primeiro lemos a página para dentro do R:

url <- "http://bandeiraazul.abae.pt/plataforma/?p=awarded&s=table"

library(rvest)

tabs <- read_html(url)
tabs
{xml_document}
<html id="sp" role="document">
[1] <head>\n  <meta http-equiv="Content-Type" content="text/html; charse ...
[2] <body id="public" class="  ">\n<script><![CDATA[\n  (function(i,s,o, ...

ExercĂ­cio

O seguinte código lê as várias tabelas HTML para um único data frame:

beaches <- data.frame(Municipio=NULL, Praia=NULL)

for(tab in 1:7) {
  df <- tabs %>% 
         html_nodes("table") %>%   # buscar todas as tabelas HTML
         .[[tab]] %>%              # escolher a 'tab'-Ă©sima
         html_table()              # converter para um data frame

  colnames(df) <- c("Municipio", "Praia")
  beaches = rbind(beaches, df)     # adicioná-la às tabelas já lidas
}

head(beaches)
  Municipio                Praia
1     Braga               AdaĂşfe
2   Caminha              Caminha
3   Caminha         Forte do CĂŁo
4   Caminha               Moledo
5   Caminha Vila Praia de Ă‚ncora
6   Espinho         Espinho-BaĂ­a

nota: os acentos mostram-se corretos no R

ExercĂ­cio

Como extra vamos mapear as praias num mapa de Portugal. Para isso usamos o pacote ggmap que Ă© uma extensĂŁo do ggplot2.

Este pacote permite colocar informação em mapas geográficos e tambĂ©m permite encontrar as coordenadas GPS de endereços (nem sempre com sucesso…):

library(dplyr)

beaches <- tbl_df(beaches) %>% 
           mutate(Address=paste0(Praia, ", ", Municipio, ", Portugal"))
beaches
# A tibble: 314 x 3
   Municipio                Praia                                 Address
       <chr>                <chr>                                   <chr>
1      Braga               AdaĂşfe                 AdaĂşfe, Braga, Portugal
2    Caminha              Caminha              Caminha, Caminha, Portugal
3    Caminha         Forte do CĂŁo         Forte do CĂŁo, Caminha, Portugal
4    Caminha               Moledo               Moledo, Caminha, Portugal
5    Caminha Vila Praia de Ă‚ncora Vila Praia de Ă‚ncora, Caminha, Portugal
6    Espinho         Espinho-BaĂ­a         Espinho-BaĂ­a, Espinho, Portugal
7    Espinho       Espinho-Rua 37       Espinho-Rua 37, Espinho, Portugal
8    Espinho          Frente Azul          Frente Azul, Espinho, Portugal
9    Espinho              Paramos              Paramos, Espinho, Portugal
10   Espinho             Silvalde             Silvalde, Espinho, Portugal
# ... with 304 more rows

ExercĂ­cio

library(ggmap)

geo <- geocode(location = beaches$Address)

Este processo automático não encontra todas as coordenadas. Usaremos apenas os resultados obtidos:

head(geo, 10)
         lon      lat
1         NA       NA
2  -8.837845 41.87321
3         NA       NA
4  -8.856518 41.84901
5         NA       NA
6         NA       NA
7  -8.641184 41.00227
8  -8.641033 41.00719
9  -8.626034 40.97251
10 -8.625919 40.99193

ExercĂ­cio

Vamos juntar estes valores ao nosso data frame:

beaches <- beaches %>% mutate(Lon = geo$lon,
                              Lat = geo$lat,
                              Address = NULL)  # remover coluna
beaches
# A tibble: 314 x 4
   Municipio                Praia       Lon      Lat
       <chr>                <chr>     <dbl>    <dbl>
1      Braga               AdaĂşfe        NA       NA
2    Caminha              Caminha -8.837845 41.87321
3    Caminha         Forte do CĂŁo        NA       NA
4    Caminha               Moledo -8.856518 41.84901
5    Caminha Vila Praia de Ă‚ncora        NA       NA
6    Espinho         Espinho-BaĂ­a        NA       NA
7    Espinho       Espinho-Rua 37 -8.641184 41.00227
8    Espinho          Frente Azul -8.641033 41.00719
9    Espinho              Paramos -8.626034 40.97251
10   Espinho             Silvalde -8.625919 40.99193
# ... with 304 more rows

ExercĂ­cio

E podemos usar as funcionalidades do ggmap para mostrar os dados obtidos:

portugal <- 
  get_map(location = "Portugal", zoom = 7) 

map <- 
  ggmap(portugal) + 
  scale_x_continuous(limits=c(-9.6, -6.0)) + 
  geom_point(data=beaches, aes(x=Lon, y=Lat)) 

Eis o resultado:

map

plot of chunk unnamed-chunk-12