Introdução ao BioPython (parte III): acessando dados do NCBI

Frederico Schmitt Kremer
omixdata
Published in
3 min readFeb 17, 2021

Olá pessoal! Dando continuidade à nossa série sobre BioPython, neste post vamos explorar o módulo Bio.Entrez, que fornece acesso ao serviço Entrez do NCBI, um sistema de consulta federada que permite a realização de buscas em múltiplos bancos de dados, como GenBank, PubMed, dbSNP, dentre outros.

O código

Para exemplificar o uso do módulo Bio.Entrez vamos recuperar informações de genomas completos de SARS-Cov2 a partir do GenBank, baixando esses dados no formato nativo do GenBank e computando algumas estatísticas dos records retornados (tamanho da sequência e número de features anotadas). Para isso, utilizaremos o seguinte código:

Explicando o código

Configurações iniciais

Para utilizar o módulo Bio.Entrez é necessário definir a variável Entrez.email, e caso esta não seja definida a seguinte mensagem será mostrada na tela:

Email address is not specified.To make use of NCBI's E-utilities, NCBI requires you to specify your
email address with each request. As an example, if your email address
is A.N.Other@example.com, you can specify it as follows:
from Bio import Entrez
Entrez.email = 'A.N.Other@example.com'
In case of excessive usage of the E-utilities, NCBI will attempt to contact
a user at the email address provided before blocking access to the
E-utilities.

Entrez.esearch

Para realizarmos consulta em um banco de dados específico utilizamos a função Entrez.esearch, que recebe como parâmetro o nome do banco de dados que pretendemos consultar (db) e os termos que queremos utilizar para a consulta (term). Outros parâmetros também podem ser utilizados, conforme descrito na API do Entrez que é comunicada com o BioPython, como o retmax, que define o número máximo de IDs que devem ser retornados na consulta (por padrão 20).

Entrez.read

O resultado retornado pelo Entrez.esearch é um o objeto de resulta HTTP que pode ser processado pela função Entrez.read, resultando em um novo objeto que contêm os resultados da consulta de uma forma mais “legível” (aqui denominado search_records), armazenado como um dicionário do Python. Através deste objeto podemos acessar os IDs de cada record retornado na consulta através do chave IdList. Para a consulta SARS-Cov2 [organism] AND complete genome [title] o seguinte objeto é produzido:

{
"Count": "41126",
"RetMax": "20",
"RetStart": "0",
"IdList": [
"1979654773",
"1979654758",
"1979654732",
"1979654707",
"1979654691",
"1979654668",
"1979654651",
"1979654617",
"1979654590",
"1979654565",
"1979654547",
"1979654526",
"1979654503",
"1979654481",
"1979654453",
"1979654430",
"1979654398",
"1979654367",
"1979654352",
"1979654334"
],
"TranslationSet": [
{
"From": "SARS-Cov2[organism]",
"To": "\"Severe acute respiratory syndrome coronavirus 2\"[Organism]"
}
],
"TranslationStack": [
{
"Term": "\"Severe acute respiratory syndrome coronavirus 2\"[Organism]",
"Field": "Organism",
"Count": "62976",
"Explode": "Y"
},
{
"Term": "complete genome[title]",
"Field": "title",
"Count": "311884",
"Explode": "N"
},
"AND"
],
"QueryTranslation": "\"Severe acute respiratory syndrome coronavirus 2\"[Organism] AND complete genome[title]"
}

Neste caso, cada ID armazendo em IdList mapeia para um código de acesso no GenBank para as sequências que retornaram na nossa consulta. Para obtermos os dados de sequência das suas respectivas entradas pelos então utilizar a função Entrez.efetch, onde também informamos o banco de dados (db), o ID do objeto que pretendemos recuperar (id ) e o formato que este objeto deve ser retornado (rettype).

Entrez.efetch

Agora podemos utilizar o Bio.SeqIO para “parsear” os resultados retornados pelo Entrez.efetch, convertendo assim os dados de texto em objetos nativos do BioPython. Desta forma, podemos acessar agora informações de código de acesso, descrição da sequência, contagem de features, dentre outros dados, de forma similar a que utilizarmos no primeiro post desta série.

Próximos passos

É possível empregar esta mesma lógica para recuperar dados de outros bancos de dados do NCBI, bem como utilizarmos outros funcionalidades vistas nos posts anteriores para manipular estas dados (ex: extrair as features e salvar em arquivos separados, produzir um banco de dados do BLAST com as sequências recuperadas …). Exploraremos estas e outras possibilidades do BioPython em posts futuros! 😃

--

--