Biopython入門 - 中編 【NCBIデータベースやBlastへのアクセス】
この記事のタイトルとURLをコピーする
執筆者
【生命医学をハックする】運営者 (@biomedicalhacks)。生命科学研究者、医師・医学博士。プロフィールはこちら

Biopythonはプログラミング言語Pythonをベースにした生命科学研究のためのパッケージで、その基礎的な使い方を3回に渡って紹介しています。

第1回目のBiopython入門 - 前編 【インストール ~ 簡単な使い方】ではDNAやタンパク配列の作り方を中心に見てきました。

今回は、NCBIの代表的なツールであるEntrezデータベースとBlast検索をBiopythonで行う方法を紹介します。

BiopythonからNCBI Entrezデータベースへのアクセス

BiopythonからNCBIにアクセスする時には、まずEntrezユーザーガイドラインをよく読みましょう。

特に大事なところを2点抜粋して意訳すると、

Entrezユーザーガイドラインの特に重要な点
アクセスの頻度が一秒に三回以下になるようにする
自分のメールアドレスを指定する (問題があったときに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)で囲まれているデータベースが利用できるものになります。
200519 1

EsearchでEntrezデータベースに検索する

利用可能なデータベースの一覧が取得できたので、そのうちの望みのものを選んで検索をかけてみます。

ここでは例としてPubmedにTP53についての文献がないか検索してみます (TP53はご存知の通り有名な腫瘍抑制遺伝子です)。

handle = Entrez.esearch(db="pubmed", term="TP53")
record = Entrez.read(handle)
record["IdList"]

するとこのように、TP53についての論文をPubmedで検索し、そのPMIDが返ってきます。
200519 2

同様にして、ESearchを使ってGenBankデータベースに検索をかけてみます。ここでは同じくTP53遺伝子を対象として、人のデータに絞って(Homo Sapiens[Orgn]) やってみます。

handle = Entrez.esearch(db="nucleotide", term="Homo Sapiens[Orgn] AND TP53[Gene]")
record = Entrez.read(handle)
record["IdList"]

200519 3
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データベースで検索したときと同じ形式でデータをダウンロードできました。

200519 4

ここでは引数にrettype="gb"、retmode="text"を指定しているので、GenBankフォーマットでのダウンロードになりました (rettypeのgbはgenbankの略語です)。

もちろんFASTAフォーマットでもダウンロードでき、

rettype="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] + '.......') # ヒットした配列

200519 5

スコアやE-valueなどについてはNCBIのページに書かれています。

まとめに代えて

この記事では生命科学研究に不可欠な情報を提供してくれるNCBIを題材にBiopythonの使い方を紹介しました。今回のコードは公式チュートリアルを参考に作っているので、英語が苦でない方はそちらもご確認ください。

Biopython入門コースの最終回になるBiopython入門 - 後編 【系統樹・ゲノムデータの可視化】ではBiopythonを使ったデータの可視化を紹介しています。

関連図書

この記事に関連した内容を紹介している本やサイトはこちらです。

Biopython入門 - 前編 【インストール ~ 簡単な使い方】

Biopython入門 - 後編 【系統樹・ゲノムデータの可視化】

Biopython公式チュートリアル

今日も【生命医学をハックする】 (@biomedicalhacks) をお読みいただきありがとうございました。

当サイトの記事をもとに加筆した月2回のニュースレターも好評配信中ですので、よろしければこちらも合わせてどうぞ

人気 月間2万アクセスの当サイトから無料ニュースレターを受け取る
この記事のタイトルとURLをコピーする
生命医学の知識や進歩を無料のニュースレターで

がんをはじめとする病気やよくある症状などの医学知識、再生医療などの生命科学研究は、研究手法が大きく前進したこととコンピューターの発達なども相まって、かつてないほどの勢いで知識の整備が進んでいます。

生命医学をハックするでは、主として医師や医学生命科学研究者ではない方や、未来を担う学生さんに向けた情報発信をしています。

2週間に1回のペースで、サイトの更新情報や、それらをまとめた解説記事をニュースレターとして発行しています。メールアドレスの登録は無料で、もちろんいつでも解除することができます。

サイト名の「ハックする」には、分かってきたことを駆使し、それを応用して、病気の治療や研究などにさらに活用していこうという意味があります。

生命医学について徐々に解き明かされてきた人類の英知を受け取ってみませんか?

この記事が気に入ったら
フォローしよう

最新情報をお届けします

Twitterでも情報発信中

こちらの記事もいかがですか?
ブログランキング参加中 (クリックしていただけると励みになります)