Baixando dados de repositórios virtuais de dados

Neste tutorial, aprenderemos a baixar dados de dois diferentes repositórios para utilizá-los durante o decorrer de nossa disciplina de aprendizagem da linguagem R.

Dados a serem baixados

Vamos trabalhar com conjuntos de dados variados. Para baixá-los, podemos visitar cada link abaixo e baixar um a um, ou então utilizar o R para baixar diretamente no seu computador por meio de algumas funções oriundas de determinados pacotes. Abaixo segue a lista de conjuntos de dados:


Baixando dados manualmente

Caso queira baixar os dados manualmente, darei um exemplo de como baixar os dados Costa et al. (2020), depositado no Dryad, e os dados de Jaramillo et al. (2019), depositados no Sibbr/GBIF.

Costa et al. 2020

Começando por Costa et al. (2020), os dados podem ser baixados em https://datadryad.org/stash/dataset/doi:10.5061/dryad.gmsbcc2hr.

Busque no canto direito o botão Download dataset. Ao apertá-lo, automaticamente haverá a opção de salvar o arquivo (ou dependendo das configurações de seu computador, o arquivo será automaticamente salvo, por padrão, na pasta Download).

Por padrão, os dados vêm zipados (se você não sabe o que é um arquivo zipado, veja aqui o que é). Para tirar o zip, basta clicar no arquivo duas vezes que uma pasta se abrirá (ou haverá a opção de escolher o local onde se devem armazenar os arquivos contidos dentro do arquivo .zip; caso isso não ocorra, entre em contato comigo para desvendar o que aconteceu). Dentro deste arquivo .zip, há apenas dois arquivos: um chamado Costa_etal_data.RData, e um metadado, metadata.txt.

O arquivo .RData é próprio do R e pode conter um ou mais objetos. Como manipular este tipo de arquivo dentro do R será falado mais adiante na disciplina (se quiser ver logo, acesse a página Primeiros passos no R).


Jaramillo et al. 2019

No caso dos dados de Jaramillo et al. (2019), os dados podem ser baixados em https://www.gbif.org/dataset/5846793d-f540-473c-88ee-23b2b13af7ef. Busque o botão Download abaixo do título.

Após pressionar o botão Download, uma caixa se abre com três opções:

* GBIF annotated Archive `Recommended`

* Source archive `Darwin Core Archive`

* GBIF annotated metadata `EML`

Eu escolhi baixar no formato Darwin Core Archive. Porém, vamos selecionar a opção GBIF annotated archive. Isso nos levará a outra página, em que todas as opções para baixar serão expostas, e alguns avisos importantes aparecerão, durante o processo:

Selecionando a opção do meio, recebemos um aviso:

Ao confirmarmos a opção Understood, isso nos leva à página de preparo do download:

Ao se terminar o preparo, nesta mesma página aparecerá a opção de baixar os dados e também será enviado ao seu email um link para que possas baixar o conjunto de dados.

Assim como os dados baixados do Dryad, os dados também vêm zipados. Faça o mesmo procedimento adotado para os dados do Dryad, e veja o que existe dentro do .zip:

Os dados estão dentro do arquivo occurrence.txt. Você pode guardar o conjunto inteiro, preferencialmente, ou apenas este arquivo occurrence.txt. Sugiro que guarde a pasta inteira para uso nos próximos passos da disciplina.

Esse procedimento, apesar de diferir em detalhes de repositório para repositório, é bem semelhante em todos os repositórios e não é nada complexo. Caso haja dúvidas, não hesite em me contatar.

Baixando os dados usando o R

Por enquanto, apenas o pacote que permite baixar dados GBIF (Chamberlain e Oldoni 2020) está funcionando plenamente. O pacote que baixa dados do DRYAD está sendo reparado no momento devido à mudanças no API do repositório (veja aqui). Por esta razão, vamos focar em baixar os dados estocados no GBIF por enquanto. Primeiro passo é baixar o pacote, caso você não o tenha instalado em seu computador:

install.packages("rgbif")

Após instalá-lo, não esqueça de importá-lo à sessão de trabalho:

library("rgbif")

Dados no GBIF

Para baixar dados no GBIF utilizando o rgbif, podemos buscar dados de ocorrência de espécies, amostras em localidades específicas, ou conjuntos de dados, utilizando as funções de busca que o pacote fornece, em especial a função occ_search(). Demonstraremos abaixo o uso básico de como executar algumas dessas ações.

Baixando dados por meio de buscas

Podemos buscar ocorrências de uma determinada espécie:

occ_search(scientificName='Protium aracouchini', limit = 10)
## Records found [2340] 
## Records returned [10] 
## No. unique hierarchies [1] 
## No. media records [10] 
## No. facets [0] 
## Args [limit=10, offset=0, scientificName=Protium aracouchini, fields=all] 
## # A tibble: 10 x 87
##    key   scientificName decimalLatitude decimalLongitude issues datasetKey
##    <chr> <chr>                    <dbl>            <dbl> <chr>  <chr>     
##  1 1931… Protium araco…          -14.8             -39.0 gass84 fffdea53-…
##  2 2365… Protium araco…           -2.58            -54.4 cdrou… 318730e8-…
##  3 1978… Protium araco…           NA                NA   txmat… fffdea53-…
##  4 1987… Protium araco…          -18.1             -39.7 cdrou… 4300f8d5-…
##  5 1987… Protium araco…          -18.1             -39.7 cdrou… 4300f8d5-…
##  6 1987… Protium araco…          -18.1             -39.7 cdrou… 4300f8d5-…
##  7 2512… Protium araco…            3.53            -73.4 cdrou… 1035299a-…
##  8 2512… Protium araco…            3.53            -73.4 cdrou… 1035299a-…
##  9 2512… Protium araco…            3.52            -73.4 cdrou… 1035299a-…
## 10 2512… Protium araco…            3.52            -73.4 cdrou… 1035299a-…
## # … with 81 more variables: publishingOrgKey <chr>, installationKey <chr>,
## #   publishingCountry <chr>, protocol <chr>, lastCrawled <chr>,
## #   lastParsed <chr>, crawlId <int>, extensions <chr>, basisOfRecord <chr>,
## #   taxonKey <int>, kingdomKey <int>, phylumKey <int>, classKey <int>,
## #   orderKey <int>, familyKey <int>, genusKey <int>, speciesKey <int>,
## #   acceptedTaxonKey <int>, acceptedScientificName <chr>, kingdom <chr>,
## #   phylum <chr>, order <chr>, family <chr>, genus <chr>, species <chr>,
## #   genericName <chr>, specificEpithet <chr>, taxonRank <chr>,
## #   taxonomicStatus <chr>, stateProvince <chr>, year <int>, month <int>,
## #   day <int>, eventDate <chr>, modified <chr>, lastInterpreted <chr>,
## #   license <chr>, identifiers <chr>, facts <chr>, relations <chr>,
## #   geodeticDatum <chr>, class <chr>, countryCode <chr>, recordedByIDs <chr>,
## #   identifiedByIDs <chr>, country <chr>, rightsHolder <chr>,
## #   recordNumber <chr>, identifier <chr>, municipality <chr>,
## #   datasetName <chr>, gbifID <chr>, collectionCode <chr>, language <chr>,
## #   occurrenceID <chr>, type <chr>, recordedBy <chr>, catalogNumber <chr>,
## #   institutionCode <chr>, ownerInstitutionCode <chr>, occurrenceRemarks <chr>,
## #   name <chr>, dateIdentified <chr>, continent <chr>, higherGeography <chr>,
## #   county <chr>, locality <chr>, preparations <chr>, accessRights <chr>,
## #   identifiedBy <chr>, elevation <dbl>, elevationAccuracy <dbl>,
## #   otherCatalogNumbers <chr>, organismQuantityType <chr>, eventID <chr>,
## #   institutionID <chr>, samplingProtocol <chr>,
## #   http...rs.tdwg.org.dwc.terms.organismQuantityType <chr>,
## #   parentEventID <chr>, organismQuantity <dbl>,
## #   http...rs.tdwg.org.dwc.terms.organismQuantity <chr>

Ou um de determinado gênero:

occ_search(scientificName = 'Protium', limit =  10)
## Records found [48015] 
## Records returned [10] 
## No. unique hierarchies [3] 
## No. media records [10] 
## No. facets [0] 
## Args [limit=10, offset=0, scientificName=Protium, fields=all] 
## # A tibble: 10 x 81
##    key   scientificName decimalLatitude decimalLongitude issues datasetKey
##    <chr> <chr>                    <dbl>            <dbl> <chr>  <chr>     
##  1 2565… Protium hepta…           -14.5            -39.1 "gass… fffdea53-…
##  2 2570… Protium hepta…           -19.7            -39.9 "gass… 4d0fa690-…
##  3 2577… Protium hepta…           -14.8            -39.2 "gass… fffdea53-…
##  4 2416… Protium Burm.…            NA               NA   ""     3345dcbc-…
##  5 2520… Protium hepta…            NA               NA   ""     f45c5ee0-…
##  6 2269… Protium glabr…            12.5            -84.7 "cdro… 7bd65a7a-…
##  7 2269… Protium glabr…            12.6            -84.7 "cdro… 7bd65a7a-…
##  8 2269… Protium glabr…            12.5            -84.7 "cdro… 7bd65a7a-…
##  9 2269… Protium glabr…            12.6            -84.7 "cdro… 7bd65a7a-…
## 10 2577… Protium hepta…            NA               NA   ""     a8e78a51-…
## # … with 75 more variables: publishingOrgKey <chr>, installationKey <chr>,
## #   publishingCountry <chr>, protocol <chr>, lastCrawled <chr>,
## #   lastParsed <chr>, crawlId <int>, extensions <chr>, basisOfRecord <chr>,
## #   taxonKey <int>, kingdomKey <int>, phylumKey <int>, classKey <int>,
## #   orderKey <int>, familyKey <int>, genusKey <int>, speciesKey <int>,
## #   acceptedTaxonKey <int>, acceptedScientificName <chr>, kingdom <chr>,
## #   phylum <chr>, order <chr>, family <chr>, genus <chr>, species <chr>,
## #   genericName <chr>, specificEpithet <chr>, taxonRank <chr>,
## #   taxonomicStatus <chr>, dateIdentified <chr>, elevation <dbl>,
## #   elevationAccuracy <dbl>, stateProvince <chr>, year <int>, month <int>,
## #   day <int>, eventDate <chr>, modified <chr>, lastInterpreted <chr>,
## #   license <chr>, identifiers <chr>, facts <chr>, relations <chr>,
## #   geodeticDatum <chr>, class <chr>, countryCode <chr>, recordedByIDs <chr>,
## #   identifiedByIDs <chr>, country <chr>, rightsHolder <chr>,
## #   recordNumber <chr>, identifier <chr>, locality <chr>, municipality <chr>,
## #   datasetName <chr>, gbifID <chr>, collectionCode <chr>, language <chr>,
## #   occurrenceID <chr>, type <chr>, recordedBy <chr>, catalogNumber <chr>,
## #   institutionCode <chr>, ownerInstitutionCode <chr>, occurrenceRemarks <chr>,
## #   identifiedBy <chr>, name <chr>, continent <chr>, individualCount <int>,
## #   nomenclaturalStatus <chr>, nomenclaturalCode <chr>, fieldNumber <chr>,
## #   taxonID <chr>, bibliographicCitation <chr>, collectionID <chr>

Podemos buscar dados de ocorrências por estados, países, localidades. Isso pode ser feito para um ou mais locais. Primeiro, devemos buscar a chave referente às plantas vasculares. Para isso, utilizaremos a função name_suggest:

pvas <- name_suggest(q = "Tracheophyta")
pvas
## # A tibble: 1 x 3
##       key canonicalName rank  
## *   <int> <chr>         <chr> 
## 1 7707728 Tracheophyta  PHYLUM

Agora, com essa chave, podemos restringir nossas buscas à localidade desejada somente para o táxon de interesse, que são as plantas vasculares. Podemos fazer isso através de uma chave presente no objeto pvas, criado acima, e que pode ser checada com o comando pvas$key. Para buscar os dados de localidade, vamos restringir nossas buscas ao estado do Amazonas, Brasil:

Vamos agora realizar a busca para dois estados. Vamos incluir Rondônia na busca:

occ_search(
  stateProvince = c("Amazonas","Rondônia"),
  phylumKey = pvas$key,
  limit = 50,
  return = "data" )

Devemos atentar que por padrão os resultados de operações com occ_search são limitados a 500 registros. Demonstramos aqui apenas o uso básico dessas operações. Sugiro que visitem os tutoriais do pacote rgbif disponíveis nas páginas abaixo para entenderem melhor as diversas funcionalidades que ele oferece:

Baixando por meio de uma chave

Se desejamos baixar um conjunto de dados específico, nós devemos buscar a chave GBIF deste conjunto de dados na página GBIF do mesmo. Para obter essa chave, é necessário que visitemos a página GBIF que contem os dados desejados para copiarmos o endereço da página. Após copiar este endereço, devemos retirar do endereço o seguinte trecho: https://www.gbif.org/dataset/. O que sobrar, é a chave GBIF de nosso interesse. Vamos demonstrar esta rotina de trabalho com dois conjuntos de dados: Silva et al. (2019) e Jaramillo et al. (2019).

Silva et al. 2019

Vamos começar a baixar os dados de Silva et al. (2019). O endereço para baixar estes dados está exposto abaixo:

https://www.gbif.org/dataset/01d28467-87a1-4d64-ba40-4e3e1cc9091b

Retirando o trecho https://www.gbif.org/dataset/, temos então a chave GBIF de interesse:

01d28467-87a1-4d64-ba40-4e3e1cc9091b

Antes de partir para a função occ_download, devemos utilizar a família de funções pred para estabelecer o filtro de dados que serão baixados do GBIF. Essa família de funções consiste basicamente de dois argumentos: key e value. O argumento key aceita o nome das colunas GBIF; por exemplo, se desejamos realizar uma busca nos estados, utilizamos o termo “stateProvince” em key (veja mais detalhes na ajuda da função teclando ?pred); se desejamos baixar um conjunto de dados específico, utilizamos o termo “datasetKey” em key. Já o argumento value é onde devemos digitar os valores referentes à chave (key). Por fim, devemos atentar a três argumentos indispensáveis da função occ_download: user, seu nome de usuário na plataforma; pwd, sua senha de entrada no sistema, e email, seu email utilizado no seu cadastro. Sugiro que você os associe a cada um dos objetos abaixo. Substitua os textos pelos valores verdadeiros. Ao atribuí-los, esses valores estarão disponíveis para utilizarmos na função occ_download.

gbif_user <- "ColoqueAquiSeuNomeDeUsuario"
gbif_pwd <- "ColoqueAquiSuaSenha"
gbif_email <- "ColoqueAqui@SeuEmail"

Uma vez estabelecidos os valores de usuário, senha, email, e também os filtros do download, podemos agora utilizar a função occ_download:

res1 <-
  occ_download(
  pred("datasetKey", value = "01d28467-87a1-4d64-ba40-4e3e1cc9091b"),
  user = gbif_user,
  pwd = gbif_pwd,
  email = gbif_email
  )

O resultado desta ação gera uma chave: Download key: 0035253-200221144449610. Para você, leitor, o resultado será outra chave, então preste atenção e não se confunda.

Peguemos então esta chave e passemos para a próxima função, occ_download_meta, que checará o status do download. O status pode ser visto na variável Status, que aparece após se executar occ_download_meta(res1), que possui a variável res1, obtida quando rodamos o comando acima.

occ_download_meta(res1)

Devemos rodar várias vezes o comando abaixo até que o status do download mude para SUCCEEDED.

Ao se obter sucesso no download, prossigamos para o próximo passo, que é o de baixar os dados propriamente ditos, utilizando a função occ_download_get.

silvaetal2019 <- occ_download_get(res1, path = ".")

A função occ_download_get apenas baixa os dados para o seu computador dentro da sua pasta de trabalho. Esta função não importa os dados para o R.

Para fazer isso, usemos a função occ_download_import, que transforma os dados em um data.frame.

silvaetal2019_df <- occ_download_import(silvaetal2019)
silvaetal2019_df

Agora você pode salvar esse data.framecomo um arquivo .csv dentro da sua pasta de trabalho ou onde você desejar.

write.table(silvaetal2019_df, file = "silvaetal2019.csv", sep = '\t', quote = TRUE)

Jaramillo et al. 2019

Vamos agora baixar os dados de Jaramillo et al. (2019). A chave desse conjunto de dados é 5846793d-f540-473c-88ee-23b2b13af7ef. Vamos seguir o mesmo procedimento adotado acima.

res2 <-
  occ_download(
  pred("datasetKey", value = "5846793d-f540-473c-88ee-23b2b13af7ef"),
  user = gbif_user,
  pwd = gbif_pwd,
  email = gbif_email
  )

occ_download_meta(res2)

jaramilloetal2019 <- occ_download_get(res2, path = ".")

jaramilloetal2019_df <- occ_download_import(jaramilloetal2019)
jaramilloetal2019_df

write.table(jaramilloetal2019_df, file = "jaramilloetal2019.csv", sep = '\t', quote = TRUE)

Sempre que utilizar um conjunto de dados em uma publicação, cite o conjunto de dados! Como exemplo, veja abaixo como obter a citação de um conjunto de dados depositado no GBIF.

Citação do conjunto de dados

Embora não seja um artigo científico, conjuntos de dados depositados em repositórios de dados possuem um DOI, portanto, o conjunto de dados deve ser citado caso seja utilizado, conforme instrução do próprio GBIF. Para obter uma citação de um conjunto de dados do GBIF, por exemplo, o pacote rgbif fornece a função gbif_citation, que deve ser utilizada em conjunto com o objeto resultante da função occ_download_import. Tomando os dados de Silva et al. (2019) como exemplo, temos:

gbif_citation(silvaetal2019)

Repare que há dois objetos resultantes, um chamado download, e outro chamado dataset, ambos apresentando um DOI. O primeiro se refere ao conjunto de dados baixado via rgbif ; caso você baixe manualmente, você pode também encontrar um DOI para esse download manual. O segundo se refere ao DOI do conjunto de dados propriamente dito e armazenado no repositório de dados.


Aqui termina este breve tutorial para baixar dados de repositórios virtuais. Por enquanto, utilizamos apenas um pacote do R, rgbif, para baixar dados diretamente do GBIF utilizando o ambiente R. Em breve, atualizarei esta postagem com outros pacotes, próprios para baixar de outros repositórios.

Qualquer dúvida, sugestão, entre em contato comigo via Github, Twitter, email, o que você achar melhor.

Até a próxima!

Referências

Chamberlain, Scott, e Damiano Oldoni. 2020. rgbif: Interface to the Global ’Biodiversity’ Information Facility API.

Costa, Flavio M., Mario H. Terra-Araujo, Charles E. Zartman, Cintia Cornelius, Fernanda A. Carvalho, Michael J. G. Hopkins, Pedro L. Viana, Eduardo M. B. Prata, e Alberto Vicentini. 2020. «Islands in a green ocean: Spatially structured endemism in Amazonian white-sand vegetation». Biotropica 52 (1): 34–45. https://doi.org/10.1111/btp.12732.

Jaramillo, M. M. A., M. M. Turcios, R. O. Perdiz, L. C. S. Carvalho, e R. I. Barbosa. 2019. «Tree species composition of natural forest islands in a savanna matrix in the northern Brazilian Amazonia. v1.9». Sistema de Informação sobre a Biodiversidade Brasileira - SiBBr. https://doi.org/https://doi.org/10.15468/n8yolk.

Silva, W. R., C. D. A. Villacorta, L. C. S. Carvalho, H. L. S. Farias, R. O. Perdiz, e R. I. Barbosa. 2019. «Tree species composition in ecotone forests on Maracá Island, Roraima, northern Brazilian Amazonia: preliminary data. V1.12.» Sistema de Informação sobre a Biodiversidade Brasileira - SiBBr. https://doi.org/10.15468/xa5lrb.

Relacionados