Pythonを用いたNCBIデータベースへのアクセス【Python】

NCBIデータベースへのアクセス方法

NCBIにはデータベースにアクセスするための統合的なインターフェースとしてEntrez(発音:アントレ)が用意されています。
EntrezではEntrez Programming Utilities (E-utilities, EUtils)を介してプログラムからアクセスすることも可能です。ただし、プログラムからNCBIデータベースにアクセスするためには「アクセス頻度の上限を守る」「API keyやemailアドレスを指定する」などのルールがありやや敷居の高いものになっています。
PythonのバイオインフォマティクスライブラリであるBiopythonでは、Entrezにアクセスするためのラッパーが用意されており、それを用いると自動的にEntrezのルールに則ったプログラムを書くことができるので、ぜひそれを用いましょう。

本記事ではデータベースアクセスの基本となるデータベースからの情報の取得方法について解説します。

なお、記事中の

Entrez.email = "your_mail_address@sample.com" # 自分のメールアドレスを指定します

の部分は自分のメールアドレスに置き換える必要があります。自分のメールアドレスを指定することによって、データベースへのアクセスに問題がある場合などに通知されるようです。

Entrezでアクセスできるデータベースについての情報を取得する

データベースの一覧を取得する

Entrez.einfo関数の引数に何も指定しないで実行すると、Entrezでアクセス可能なデータベースの一覧を取得することができます。

from Bio import Entrez
Entrez.email = "your_mail_address@sample.com" # 自分のメールアドレスを指定します
handle = Entrez.einfo()
record = Entrez.read(handle)
handle.close()
print(record)
{'DbList': ['pubmed', 'protein', 'nuccore', 'ipg', 'nucleotide', 'structure', 'sparcle', 'genome', 'annotinfo', 'assembly', 'bioproject', 'biosample', 'blastdbinfo', 'books', 'cdd', 'clinvar', 'gap', 'gapplus', 'grasp', 'dbvar', 'gene', 'gds', 'geoprofiles', 'homologene', 'medgen', 'mesh', 'ncbisearch', 'nlmcatalog', 'omim', 'orgtrack', 'pmc', 'popset', 'probe', 'proteinclusters', 'pcassay', 'biosystems', 'pccompound', 'pcsubstance', 'seqannot', 'snp', 'sra', 'taxonomy', 'biocollections', 'gtr']}

DictionaryElementオブジェクトのキーが’DbList’で、値でデータベース一覧が得られました。

データベースの詳細情報を取得する

次に、Entrez.einfo関数の引数にデータベース名を指定して、そのデータベースの詳細を確認します。戻り値はキーが’DbInfo’のDictionaryElementオブジェクトとなり、’DbInfo’の値としてデータベースの情報が格納されます。

from Bio import Entrez
Entrez.email = "your_mail_address@sample.com" # 自分のメールアドレスを指定します
handle = Entrez.einfo(db='pubmed')
record = Entrez.read(handle)
handle.close()
print(record["DbInfo"].keys())
dict_keys(['DbName', 'MenuName', 'Description', 'DbBuild', 'Count', 'LastUpdate', 'FieldList', 'LinkList'])

上のコードはdb引数に’pubmed’を指定していますが、ほかのデータベースでも同様の結果が得られて、データベースについての情報としては以下の項目が格納されていることが分かります。

  • DbName : E-utilitiesにおけるデータベース名
  • MenuName : Entrezデータベース名
  • Description : データベースの説明
  • DbBuild : ビルド
  • Count : エントリー数
  • LastUpdate : 最終更新日
  • FieldList : データベースのフィールドリスト
  • LinkList : データベースのリンク名のリスト (リンク名の一覧)

データベースからレコードを取得する

Entrez.efetch関数を用いて、データベースからレコードを取得できます。

Entrez.efetch関数のdb引数にどのデータベースからレコードを検索するかを指定します。指定できるデータベース名はこちらのE-utility Database Nameの中から指定します。なお、一部のデータベースは別名(Entrez Databaseで示されている名前など)で指定しても正しく認識されるようです。
id引数にはそれぞれのデータベースにおけるUIDを指定します。こちらの表のそれぞれのデータベースのUID common nameがここで指定できるUIDとなります。
rettype引数とretmode引数の組み合わせで、データベースから取得する要素とその形式を指定します。こちらにそれぞれのデータベースごとに、有効なrettype引数とretmode引数の組み合わせが載っています。

PubMedのAbstractを取得する

Entrez.efetch関数のdb引数を’pubmed’とし、id引数にはPMIDを指定します。また、Abstractを取得するためにはこちらを参考にして、rettype引数を’abstract’とし、retmode引数を’text’とします。

from Bio import Entrez
Entrez.email = "your_mail_address@sample.com" # 自分のメールアドレスを指定します
handle = Entrez.efetch(db='pubmed', id="19304878", rettype='abstract', retmode='text')
record = handle.read()
handle.close()
print(record)
1. Bioinformatics. 2009 Jun 1;25(11):1422-3. doi: 10.1093/bioinformatics/btp163.
Epub 2009 Mar 20.

Biopython: freely available Python tools for computational molecular biology and
bioinformatics.

Cock PJ(1), Antao T, Chang JT, Chapman BA, Cox CJ, Dalke A, Friedberg I,
Hamelryck T, Kauff F, Wilczynski B, de Hoon MJ.

Author information:
(1)Plant Pathology, SCRI, Invergowrie, Dundee, UK. peter.cock@scri.ac.uk

SUMMARY: The Biopython project is a mature open source international
collaboration of volunteer developers, providing Python libraries for a wide
range of bioinformatics problems. Biopython includes modules for reading and
writing different sequence file formats and multiple sequence alignments, dealing
with 3D macro molecular structures, interacting with common tools such as BLAST,
ClustalW and EMBOSS, accessing key online databases, as well as providing
numerical methods for statistical learning.
AVAILABILITY: Biopython is freely available, with documentation and source code
at (www.biopython.org) under the Biopython license.

DOI: 10.1093/bioinformatics/btp163
PMCID: PMC2682512
PMID: 19304878  [Indexed for MEDLINE]

これにより、PubMed(PMID : 19304878)と同じ情報が得られました。ちなみに、この論文がBiopythonについての論文になります。

GenBankからシークエンスデータを取得する

Entrez.efetch関数のdb引数を’nuccore’とし、id引数にはアクセッション番号を指定します。GenBank flat fileとして取得するためにはこちらを参考にして、rettype引数を’gb’とし、retmode引数を’text’とします。GenBank flat fileとして取得することで、SeqRecordオブジェクトに変換することができるので、最後にSeqIO.read関数でパースします。

from Bio import Entrez, SeqIO
Entrez.email = "your_mail_address@sample.com" # 自分のメールアドレスを指定します
handle = Entrez.efetch(db='nuccore', id='NC_045512.2', rettype='gb', retmode='text')
record = SeqIO.read(handle, "genbank")
handle.close()
print(record)
ID: NC_045512.2
Name: NC_045512
Description: Severe acute respiratory syndrome coronavirus 2 isolate Wuhan-Hu-1, complete genome
Database cross-references: BioProject:PRJNA485481
Number of features: 57
   ......
Seq('ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGT...AAA', IUPACAmbiguousDNA())

これによりSARS-CoC-2のゲノムデータのリファレンス配列がSeqRecordオブジェクトとして得られました。

参考

参考文献

Biopython を利用したNCBIのEntrez データベースへのアクセス(Qiita)

  • Biopythonのcookbookの日本語訳です。本記事で紹介していないことも含めて詳細に解説されています。

関連記事・スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です