Biopython-entrez-database

提供:Dev Guides
移動先:案内検索

Biopython-Entrezデータベース

*Entrez* は、NCBIが提供するオンライン検索システムです。 ブール演算子とフィールド検索をサポートする統合グローバルクエリを使用して、ほぼすべての既知の分子生物学データベースへのアクセスを提供します。 各データベースからのヒット数、発信元データベースへのリンクを持つレコードなどの情報を含むすべてのデータベースから結果を返します。

Entrezを介してアクセスできる一般的なデータベースの一部を以下に示します-

  • パブメッド
  • パブメッドセントラル
  • ヌクレオチド(GenBank配列データベース)
  • タンパク質(配列データベース)
  • ゲノム(全ゲノムデータベース)
  • 構造(三次元高分子構造)
  • 分類(GenBankの生物)
  • SNP(一塩基多型)
  • UniGene(転写配列の遺伝子指向クラスター)
  • CDD(保存タンパク質ドメインデータベース)
  • 3Dドメイン(Entrez構造からのドメイン)

上記のデータベースに加えて、Entrezはフィールド検索を実行するためにより多くのデータベースを提供します。

Biopythonは、EntrezデータベースにアクセスするためのEntrez固有のモジュールBio.Entrezを提供します。 この章では、Biopythonを使用してEntrezにアクセスする方法を学びましょう-

データベース接続手順

Entrezの機能を追加するには、次のモジュールをインポートします-

>>> from Bio import Entrez

次に、以下のコードで誰が接続されているかを特定するためにメールを設定します-

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

次に、Entrezツールパラメーターを設定します。デフォルトでは、Biopythonです。

>>> Entrez.tool = 'Demoscript'

ここで、以下に定義されているように、各データベースのインデックス用語カウント、最終更新、および利用可能なリンクを見つけるために* einfo関数を呼び出します-

>>> info = Entrez.einfo()

einfoメソッドは、以下に示すように、その読み取りメソッドを介して情報へのアクセスを提供するオブジェクトを返します-

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

データはXML形式であり、Pythonオブジェクトとしてデータを取得するには、* Entrez.einfo()メソッドが呼び出されたらすぐに *Entrez.read メソッドを使用します-

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

ここで、レコードは、以下に示すように、1つのキー、DbListを持つ辞書です-

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

DbListキーにアクセスすると、以下に示すデータベース名のリストが返されます-

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

基本的に、EntrezモジュールはEntrez検索システムから返されたXMLを解析し、Python辞書とリストとして提供します。

検索データベース

Entrezデータベースのいずれかを検索するには、Bio.Entrez.esearch()モジュールを使用できます。 以下に定義されています-

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

間違ったdbを割り当てると、それは戻ります

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

データベース全体を検索する場合は、 Entrez.egquery を使用できます。 これは Entrez.esearch と似ていますが、キーワードを指定してデータベースパラメータをスキップするだけで十分です。

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

レコードを取得する

Enterzは、Entrezからレコードの完全な詳細を検索およびダウンロードするための特別な方法であるefetchを提供します。 次の簡単な例を検討してください-

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

これで、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 = [])