Biopythonはプログラミング言語Pythonをベースにした生命科学研究のためのパッケージで、その基礎的な使い方を3回に渡って紹介しています。
第1回目のBiopython入門 – 前編 【インストール ~ 簡単な使い方】ではDNAやタンパク配列の作り方を中心に見てきました。
今回は、NCBIの代表的なツールであるEntrezデータベースとBlast検索をBiopythonで行う方法を紹介します。
この記事の内容
BiopythonからNCBI Entrezデータベースへのアクセス
BiopythonからNCBIにアクセスする時には、まずEntrezユーザーガイドラインをよく読みましょう。
特に大事なところを2点抜粋して意訳すると、
自分のメールアドレスを指定する (問題があったときにNCBIから連絡ができるように)
この2点目のメールアドレスの指定については
from Bio import Entrez
Entrez.email = "[email protected]"
のように書けばOKです。
EInfoで利用可能なEntrezデータベースを取得する
NCBIのどのようなデータベースが利用可能なのかは、einfo ()を呼び出すことでXML形式で取得できます。
handle = Entrez.einfo()
result = handle.read()
print (result)
DbName (Database Name)で囲まれているデータベースが利用できるものになります。
EsearchでEntrezデータベースに検索する
利用可能なデータベースの一覧が取得できたので、そのうちの望みのものを選んで検索をかけてみます。
ここでは例としてPubmedにTP53についての文献がないか検索してみます (TP53はご存知の通り有名な腫瘍抑制遺伝子です)。
handle = Entrez.esearch(db="pubmed", term="TP53")
record = Entrez.read(handle)
record["IdList"]
するとこのように、TP53についての論文をPubmedで検索し、そのPMIDが返ってきます。
同様にして、ESearchを使ってGenBankデータベースに検索をかけてみます。ここでは同じくTP53遺伝子を対象として、人のデータに絞って(Homo Sapiens[Orgn]) やってみます。
handle = Entrez.esearch(db="nucleotide", term="Homo Sapiens[Orgn] AND TP53[Gene]")
record = Entrez.read(handle)
record["IdList"]
GenBankのID識別子は最後の[“IdList”]で取得できました。
EFetchでデータをダウンロードする
取得したIDを使ったデータのダウンロードはEFetchを使って行うことができます。
例えば先ほど取得したTP53遺伝子, homo sapiensでの検索結果の一番最初にある1808862652について、そのデータを取得してみます。
handle = Entrez.efetch(db="nucleotide", id="1808862652", rettype="gb", retmode="text")
print(handle.read())
するとこのように、NCBI Nucleotideデータベースで検索したときと同じ形式でデータをダウンロードできました。
ここでは引数にrettype=”gb”、retmode=”text”を指定しているので、GenBankフォーマットでのダウンロードになりました (rettypeのgbはgenbankの略語です)。
もちろんFASTAフォーマットでもダウンロードでき、
と変更するだけです。
handle = Entrez.efetch(db="nucleotide", id="1808862652", rettype="fasta", retmode="text")
print(handle.read())
それ以外のパラメーターの意味については、公式ドキュメントに紹介されています。
BiopythonからNCBI Blastにアクセス
BiopythonからNCBIの配列検索サービスBlastにアクセスするにはBio.Blastを使います。
Bio.Blastには、BLASTにアクセスするためのBio.Blast.NCBIWWWと、BLASTから返される検索結果 (XML形式) を見やすくしてくれるBio.Blast.NCBIXMLが含まれています。
例えば
from Bio.Blast import NCBIWWW
# 検索を起動する
# qblast (プログラム名、データベース名、検索キー)
result_handle = NCBIWWW.qblast ('blastn', 'nt', '8332116')
# 検索結果を解釈する
from Bio.Blast import NCBIXML
blast_record = NCBIXML.read (result_handle)
BLASTのパラメーターは多数あり、qblastのパラメーターやBLASTのパラメーターの説明のページをご覧ください。
結果はblast_recordにあり、個々のアラインメントは.alignmentsで取得できます。
E_VALUE_THRESH = 0.05
for alignment in blast_record.alignments: # 個々のアラインメントを表示
for hsp in alignment.hsps:
if hsp.expect E_VALUE_THRESH: # もしE-valueが基準 (0.05) より低いなら
print ('***Alignment***')
print ('Sequence:', alignment.title)
print ('Length:', alignment.length) # アラインメント長
print ('E value:', hsp.expect) # E-value
print (hsp.query[0:75] + '.......') # 問い合わせ配列
print (hsp.match[0:75] + '.......') # マッチしたか
print (hsp.sbjct[0:75] + '.......') # ヒットした配列
スコアやE-valueなどについてはNCBIのページに書かれています。
まとめに代えて
この記事では生命科学研究に不可欠な情報を提供してくれるNCBIを題材にBiopythonの使い方を紹介しました。今回のコードは公式チュートリアルを参考に作っているので、英語が苦でない方はそちらもご確認ください。
Biopython入門コースの最終回になるBiopython入門 – 後編 【系統樹・ゲノムデータの可視化】ではBiopythonを使ったデータの可視化を紹介しています。
関連図書
この記事に関連した内容を紹介している本やサイトはこちらです。
Biopython入門 – 前編 【インストール ~ 簡単な使い方】
Biopython入門 – 後編 【系統樹・ゲノムデータの可視化】
今日も【生命医学をハックする】 (@biomedicalhacks) をお読みいただきありがとうございました。
当サイトの記事をもとに加筆した月2回のニュースレターも好評配信中ですので、よろしければこちらも合わせてどうぞ