Biopython - Baza danych Entrez

Entrezto internetowy system wyszukiwania udostępniany przez NCBI. Zapewnia dostęp do prawie wszystkich znanych baz danych biologii molekularnej ze zintegrowanym globalnym zapytaniem obsługującym operatory boolowskie i wyszukiwanie w terenie. Zwraca wyniki ze wszystkich baz danych z informacjami, takimi jak liczba trafień z każdej bazy danych, rekordy z linkami do źródłowej bazy danych itp.

Niektóre z popularnych baz danych, do których można uzyskać dostęp przez Entrez, są wymienione poniżej -

  • Pubmed
  • Pubmed Central
  • Nukleotyd (baza danych sekwencji GenBank)
  • Białko (baza danych sekwencji)
  • Genom (baza danych całego genomu)
  • Struktura (trójwymiarowa struktura makromolekularna)
  • Taksonomia (organizmy w GenBank)
  • SNP (polimorfizm pojedynczego nukleotydu)
  • UniGene (klastry sekwencji transkrypcyjnych zorientowanych genowo)
  • CDD (Baza danych konserwowanych domen białkowych)
  • Domeny 3D (domeny ze struktury Entrez)

Oprócz powyższych baz danych, Entrez zapewnia o wiele więcej baz danych do wyszukiwania pól.

Biopython zapewnia specjalny moduł Entrez, Bio.Entrez, aby uzyskać dostęp do bazy danych Entrez. Nauczmy się, jak uzyskać dostęp do Entrez za pomocą Biopythona w tym rozdziale -

Kroki połączenia z bazą danych

Aby dodać funkcje Entrez, zaimportuj następujący moduł -

>>> from Bio import Entrez

Następnie ustaw swój adres e-mail, aby zidentyfikować, kto jest powiązany z kodem podanym poniżej -

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

Następnie ustaw parametr narzędzia Entrez i domyślnie jest to Biopython.

>>> Entrez.tool = 'Demoscript'

Teraz, call einfo function to find index term counts, last update, and available links for each database jak określono poniżej -

>>> info = Entrez.einfo()

Metoda einfo zwraca obiekt, który zapewnia dostęp do informacji poprzez metodę odczytu, jak pokazano poniżej -

>>> 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>

Dane są w formacie XML, a aby pobrać dane jako obiekt Pythona, użyj Entrez.read metody tak szybko, jak Entrez.einfo() wywoływana jest metoda -

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

Tutaj rekord jest słownikiem, który ma jeden klucz, DbList, jak pokazano poniżej -

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

Dostęp do klawisza DbList zwraca listę nazw baz danych pokazaną poniżej -

>>> 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'] 
>>>

Zasadniczo moduł Entrez analizuje XML zwracany przez system wyszukiwania Entrez i dostarcza go jako słownik i listy Pythona.

Przeszukaj bazę danych

Aby przeszukać jedną z baz danych Entrez, możemy użyć modułu Bio.Entrez.esearch (). Jest zdefiniowany poniżej -

>>> 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 = {})
>>>

Jeśli przypiszesz niepoprawną bazę danych, to zwraca

>>> 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 = {})

Jeśli chcesz przeszukiwać bazę danych, możesz użyć Entrez.egquery. To jest podobne doEntrez.esearch ale wystarczy podać słowo kluczowe i pominąć parametr bazy danych.

>>>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

Pobierz rekordy

Enterz zapewnia specjalną metodę, efetch do wyszukiwania i pobierania pełnych szczegółów rekordu z Entrez. Rozważmy następujący prosty przykład -

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

Teraz możemy po prostu odczytać rekordy za pomocą obiektu 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 = [])