Biopython - Base de datos de Entrez

Entrezes un sistema de búsqueda en línea proporcionado por NCBI. Proporciona acceso a casi todas las bases de datos de biología molecular conocidas con una consulta global integrada que admite operadores booleanos y búsqueda de campo. Devuelve resultados de todas las bases de datos con información como el número de hits de cada base de datos, registros con enlaces a la base de datos de origen, etc.

Algunas de las bases de datos populares a las que se puede acceder a través de Entrez se enumeran a continuación:

  • Pubmed
  • Pubmed Central
  • Nucleótido (base de datos de secuencias de GenBank)
  • Proteína (base de datos de secuencias)
  • Genoma (base de datos de genoma completo)
  • Estructura (estructura macromolecular tridimensional)
  • Taxonomía (organismos en GenBank)
  • SNP (polimorfismo de un solo nucleótido)
  • UniGene (grupos de secuencias de transcripciones orientadas a genes)
  • CDD (base de datos de dominios de proteínas conservadas)
  • Dominios 3D (dominios de la estructura Entrez)

Además de las bases de datos anteriores, Entrez proporciona muchas más bases de datos para realizar la búsqueda de campo.

Biopython proporciona un módulo específico de Entrez, Bio.Entrez para acceder a la base de datos de Entrez. Aprendamos cómo acceder a Entrez usando Biopython en este capítulo -

Pasos de conexión a la base de datos

Para agregar las características de Entrez, importe el siguiente módulo:

>>> from Bio import Entrez

A continuación, configure su correo electrónico para identificar quién está conectado con el código que se proporciona a continuación:

>>> Entrez.email = '<youremail>'

Luego, configure el parámetro de la herramienta Entrez y, por defecto, es Biopython.

>>> Entrez.tool = 'Demoscript'

Ahora, call einfo function to find index term counts, last update, and available links for each database como se define a continuación -

>>> info = Entrez.einfo()

El método einfo devuelve un objeto, que proporciona acceso a la información a través de su método de lectura como se muestra a continuación:

>>> data = info.read() 
>>> print(data) 
<?xml version = "1.0" encoding = "UTF-8" ?>
<!DOCTYPE eInfoResult PUBLIC "-//NLM//DTD einfo 20130322//EN" 
   "https://eutils.ncbi.nlm.nih.gov/eutils/dtd/20130322/einfo.dtd"> 
<eInfoResult>
   <DbList>
      <DbName>pubmed</DbName> 
      <DbName>protein</DbName>
      <DbName>nuccore</DbName> 
      <DbName>ipg</DbName> 
      <DbName>nucleotide</DbName>
      <DbName>nucgss</DbName> 
      <DbName>nucest</DbName>
      <DbName>structure</DbName>
      <DbName>sparcle</DbName>
      <DbName>genome</DbName>
      <DbName>annotinfo</DbName>
      <DbName>assembly</DbName> 
      <DbName>bioproject</DbName>
      <DbName>biosample</DbName>
      <DbName>blastdbinfo</DbName>
      <DbName>books</DbName> 
      <DbName>cdd</DbName>
      <DbName>clinvar</DbName> 
      <DbName>clone</DbName> 
      <DbName>gap</DbName> 
      <DbName>gapplus</DbName> 
      <DbName>grasp</DbName> 
      <DbName>dbvar</DbName>
      <DbName>gene</DbName> 
      <DbName>gds</DbName> 
      <DbName>geoprofiles</DbName>
      <DbName>homologene</DbName> 
      <DbName>medgen</DbName> 
      <DbName>mesh</DbName>
      <DbName>ncbisearch</DbName> 
      <DbName>nlmcatalog</DbName>
      <DbName>omim</DbName>
      <DbName>orgtrack</DbName>
      <DbName>pmc</DbName>
      <DbName>popset</DbName>
      <DbName>probe</DbName>
      <DbName>proteinclusters</DbName>
      <DbName>pcassay</DbName>
      <DbName>biosystems</DbName> 
      <DbName>pccompound</DbName> 
      <DbName>pcsubstance</DbName> 
      <DbName>pubmedhealth</DbName> 
      <DbName>seqannot</DbName> 
      <DbName>snp</DbName> 
      <DbName>sra</DbName> 
      <DbName>taxonomy</DbName> 
      <DbName>biocollections</DbName> 
      <DbName>unigene</DbName>
      <DbName>gencoll</DbName> 
      <DbName>gtr</DbName>
   </DbList> 
</eInfoResult>

Los datos están en formato XML, y para obtener los datos como un objeto Python, use Entrez.read método tan pronto como Entrez.einfo() se invoca el método -

>>> info = Entrez.einfo() 
>>> record = Entrez.read(info)

Aquí, registro es un diccionario que tiene una clave, DbList como se muestra a continuación:

>>> record.keys() 
[u'DbList']

Acceder a la clave DbList devuelve la lista de nombres de bases de datos que se muestra a continuación:

>>> record[u'DbList'] 
['pubmed', 'protein', 'nuccore', 'ipg', 'nucleotide', 'nucgss', 
   'nucest', 'structure', 'sparcle', 'genome', 'annotinfo', 'assembly', 
   'bioproject', 'biosample', 'blastdbinfo', 'books', 'cdd', 'clinvar', 
   'clone', 'gap', 'gapplus', 'grasp', 'dbvar', 'gene', 'gds', 'geoprofiles', 
   'homologene', 'medgen', 'mesh', 'ncbisearch', 'nlmcatalog', 'omim', 
   'orgtrack', 'pmc', 'popset', 'probe', 'proteinclusters', 'pcassay', 
   'biosystems', 'pccompound', 'pcsubstance', 'pubmedhealth', 'seqannot', 
   'snp', 'sra', 'taxonomy', 'biocollections', 'unigene', 'gencoll', 'gtr'] 
>>>

Básicamente, el módulo Entrez analiza el XML devuelto por el sistema de búsqueda Entrez y lo proporciona como diccionario y listas de Python.

Base de datos de búsqueda

Para buscar en cualquiera de las bases de datos de Entrez, podemos utilizar el módulo Bio.Entrez.esearch (). Se define a continuación:

>>> info = Entrez.einfo() 
>>> info = Entrez.esearch(db = "pubmed",term = "genome") 
>>> record = Entrez.read(info) 
>>>print(record) 
DictElement({u'Count': '1146113', u'RetMax': '20', u'IdList':
['30347444', '30347404', '30347317', '30347292', 
'30347286', '30347249', '30347194', '30347187', 
'30347172', '30347088', '30347075', '30346992', 
'30346990', '30346982', '30346980', '30346969', 
'30346962', '30346954', '30346941', '30346939'], 
u'TranslationStack': [DictElement({u'Count': 
'927819', u'Field': 'MeSH Terms', u'Term': '"genome"[MeSH Terms]', 
u'Explode': 'Y'}, attributes = {})
, DictElement({u'Count': '422712', u'Field': 
'All Fields', u'Term': '"genome"[All Fields]', u'Explode': 'N'}, attributes = {}), 
'OR', 'GROUP'], u'TranslationSet': [DictElement({u'To': '"genome"[MeSH Terms] 
OR "genome"[All Fields]', u'From': 'genome'}, attributes = {})], u'RetStart': '0', 
u'QueryTranslation': '"genome"[MeSH Terms] OR "genome"[All Fields]'}, 
attributes = {})
>>>

Si asigna una base de datos incorrecta, devuelve

>>> info = Entrez.esearch(db = "blastdbinfo",term = "books")
>>> record = Entrez.read(info) 
>>> print(record) 
DictElement({u'Count': '0', u'RetMax': '0', u'IdList': [], 
u'WarningList': DictElement({u'OutputMessage': ['No items found.'], 
   u'PhraseIgnored': [], u'QuotedPhraseNotFound': []}, attributes = {}), 
   u'ErrorList': DictElement({u'FieldNotFound': [], u'PhraseNotFound': 
      ['books']}, attributes = {}), u'TranslationSet': [], u'RetStart': '0', 
      u'QueryTranslation': '(books[All Fields])'}, attributes = {})

Si desea buscar en la base de datos, puede usar Entrez.egquery. Esto es similar aEntrez.esearch excepto que es suficiente especificar la palabra clave y omitir el parámetro de la base de datos.

>>>info = Entrez.egquery(term = "entrez") 
>>> record = Entrez.read(info) 
>>> for row in record["eGQueryResult"]: 
... print(row["DbName"], row["Count"]) 
... 
pubmed 458 
pmc 12779 mesh 1 
... 
... 
... 
biosample 7 
biocollections 0

Obtener registros

Enterz proporciona un método especial, efetch, para buscar y descargar los detalles completos de un registro de Entrez. Considere el siguiente ejemplo simple:

>>> handle = Entrez.efetch(
   db = "nucleotide", id = "EU490707", rettype = "fasta")

Ahora, podemos simplemente leer los registros usando el objeto SeqIO

>>> record = SeqIO.read( handle, "fasta" ) 
>>> record 
SeqRecord(seq = Seq('ATTTTTTACGAACCTGTGGAAATTTTTGGTTATGACAATAAATCTAGTTTAGTA...GAA', 
SingleLetterAlphabet()), id = 'EU490707.1', name = 'EU490707.1', 
description = 'EU490707.1 
Selenipedium aequinoctiale maturase K (matK) gene, partial cds; chloroplast', 
dbxrefs = [])