First things first
jsonlite, curl, robis,
rgbif, paleobioDB, devtools, tidyverse, readr, terra, taxsize, sf e string.Para instalar o taxsize, carregue o pacote devtools e digite install_github('ropensci/taxize') porque esse pacote só está
disponível no github atualmente.
Para usar o gbif, você precisará ter uma conta de usuário GBIF. Isso normalmente não levará muito tempo para ser realizado, mas é importante fazer!
Vá para a aba de registro no canto superior direito da página inicial do GBIF e crie sua própria conta. O GBIF só permite - até onde eu saiba -
três downloads por dia, pois muito tráfego de download em uma única conta fará com que o servidor responda desfavoravelmente.
Antes de começar, vale à pena dar uma olhada no site do GBIF e usar seus recursos de pesquisa para explorar a disponibilidade
dos dados. Procure por algumas espécies ou grupos que considere interessantes e observe a distribuição delas no mapa integrado. Além disso,
examine uma única ocorrência e observe o número de campos diferentes disponíveis para um usuário: alguns deles podem ser muito relevantes
para sua limpeza de dados! Dê uma olhada também na documentação do API do GBIF.
Como a API estrutura solicitaçoes como URLs?
library(jsonlite) # Para carregar o pacote
occ <- fromJSON("https://api.gbif.org/v1/occurrence/1258202889") # baixar um único pedido JSON do GBIF
A classe do nosso download occ é uma lista. A maioria dos elementos da lista são vetores simples, mas não todos.
Para fins demonstrativos, achataremos os elementos não vetoriais, o que nos permite vincular a lista a um data.frame - isso é um
conjunto de dados de ocorrência rudimentar.
class(occ)lapply(occ, class)occ <- unlist(occ, recursive = F)as.data.frame(unlist(occ, recursive = F)Isso foi apenas um exercício ilustrativo, mas mostra que podemos trabalhar com a API de uma
maneira muito direta. Se quiséssemos, poderíamos até escrever código para analisar a solicitação JSON em nosso formato data frame
amigável no próprio R, embora seja isso que o jsonlite faz.
Agora, para valer, vamos baixar várias ocorrências e conjuntos de dados, usaremos
novamente um pacote R personalizado, rgbif.
Lembre-se, você precisa já ter uma conta de usuário GBIF!
library(rgbif) # para carregar o pacote
usr <- "nonono" # nome do usuário
pwd <- "nonono" # senha do usuário
eml <- "nonono.gmail" # email do usuário
Agora, procuramos pelo nosso táxon no GBIF.
tax <- occ_search(scientificName = "Altiphylax") # você pode usar qualquer outro nome
Se tivermos identificado com segurança que nosso táxon tem correspondências no banco de dados,
construiremos um predicado de pesquisa para o ID exclusivo associado a esse táxon e, em seguida, enviamos essa solicitação
ao banco de dados, especificando que queremos que um arquivo .csv seja baixado.
tpred <- pred("taxonKey", name_backbone("Altiphylax")$usageKey) # predicate and execute
dload <- occ_download(tpred, format = "SIMPLE_CSV", pred("hasCoordinate", TRUE),
user = usr, pwd = pwd, email = eml)
# Para fazer o download... Pode demorar um pouco dependendo do número de registros!
occ_download_wait(dload) # Essa função pode ser usada para nos dizer quando o download foi finalizado
dload # Examinando os resultados
O que essa função fez foi fazer o servidor GBIF preparar um arquivo para download. Ele contém os detalhes do nosso download preparado, incluindo algumas URLs e DOIs. O DOI é citável em publicações e fornece documentação clara e transparente do que você baixou e quando. Tente colar qualquer um deles no Google. Você verá que ele o levará para uma página GBIF para esse download. Há até um botão de download - se clicarmos com o botão direito e olharmos para a URL do link, veremos a formatação específica da API para um arquivo .zip com nossos dados. Ir para essa URL até baixará o arquivo zip automaticamente.
Podemos ainda obter ocorrências para múltiplas espécies usando os IDs dos táxons. Entretanto,
o grupo específico pode não ser parte do arcabouço do GBIF. Nesse caso, podemos obter dados de uma lista de gêneros, espécies etc.
De qualquer forma, é uma boa ideia usar os IDs de táxons do GBIF ao invés do nome científico, já que ele incluirá os sinônimos também.
ID <- taxize::get_gbifid_("Lethocerus patruelis", method = "backbone") ## get_gbifid_ retornará uma lista
ID <- ID %>%
bind_rows() %>% # convertida em data frame
filter(matchtype == "EXACT" & status == "ACCEPTED") # filtra os dados para os nomes aceitos
Podemos também obter IDs de grupos taxonômicos supra-específicos, como famílias.
ID_Belos <- taxize::get_gbifid_("Belostomatidae", method="backbone") %>%
bind_rows() %>%
filter(matchtype == "EXACT" & status == "ACCEPTED")
Podemos também obter IDs de uma lista de espécies.
splist <- read_csv("bombacoideae_specieslist.csv") # espécies em .csv de Bombacoidea
gbif_taxon_keys <-
splist %>%
pull("accepted_name") %>% # use poucos nomes se for um teste
taxize::get_gbifid_(method="backbone") %>%
imap(~ .x %>% mutate(original_sciname = .y)) %>% # coloque os nomes originais no data frame
bind_rows() %>% # combine todos os data frames em apenas um
filter(matchtype == "EXACT" & status == "ACCEPTED") %>%
filter(kingdom == "Plantae") # evite homonímias
Frequentemente é desejável obter registros de uma área geográfica específica. Uma opção é fazer o
download dos registros que estejam dentro de um polígono específico. O rgbif/GBIF também oferece a opção de fazer isso.
Para tanto, é necessário definir um polígono. Isso pode ser feito via Google Earth, e o arquivo obtido é importado em formato
.kml ou .shp. Para facilitar, baixe um polígono da Amazônia aqui e coloque no seu diretório
de trabalho.
library(sf); library(terra); library(tidyverse); library(taxize); library(devtools) # carregando os pacotes
amz <- st_read("Amazonia.kml") # puxando o arquivo para dentro do R
plot(amz$geometry) # para verificar se está tudo bem
amz <- st_as_text(st_as_sfc(amz)) # para transformar num objeto WKT
# pegando a ID da família:
ID_Belos <- taxize::get_gbifid_("Belostomatidae", method="backbone") %>%
bind_rows() %>%
filter(matchtype == "EXACT" & status == "ACCEPTED") # para pegar o ID da família Belostomatidae
occ_download(pred_in("taxonKey", ID_Belos$usagekey), pred("hasCoordinate", TRUE), pred_within(amz), format = "SIMPLE_CSV",
user = usr, pwd = pwd, email = eml) # o argumento pred_within fará o trabalho
library(paleobioDB); library(readr); library(dplyr) # carregando pacotes
# Para pegar as ocorrências do Paleobiology DB, estreite sua busca como abaixo:
dat_tax <- paleobioDB::pbdb_occurrences(base_name = c("Belostomatidae"),
vocab = "pbdb", limit = 500, show = c("coords", "phylo", "attr", "loc",
"time", "rem", "ident"))
rownames(dat) <- NULL
# É possível também pegar registro de uma lista de espécies ou gêneros
gen_list <- read_csv("bombacoideae_genuslist.csv") # nome do arquivo .csv
dat_gen <- paleobioDB::pbdb_occurrences(base_name = gen_list$gen, vocab = "pbdb", limit = 500, show = c("coords", "phylo", "attr", "loc", "time", "rem", "ident"))
# combine os dados em um local só:
dat <- bind_rows(dat_tax, dat_gen)
# Mas tome cuidado com as homonímias!
unique(dat$phylum)
dat <- dat[dat$phylum == "Spermatophyta", ]
# Visualize Belostomatidae
pbdb_map(dat_tax)
pbdb_richness(dat_tax, rank = "species", temporal_extent = c(100, 0)) # mapa de riqueza
# grave no arquivo:
write_csv(dat_tax, "BelosFossil_records.csv")