Biopythonを用いたEntrezによるtaxidからのmatk配列の取得
BiopythonのEntrezモジュールを用いて、taxidからmatk配列を取得します。
- Biopython …バイオインフォマティクスに特化したPythonのライブラリ
- Entrez …ncbiが提供している統合検索エンジン
- taxid …NCBI Taxonomy databaseで指定している各生物種のid
- matk配列 …植物のDNAバーコードに用いられる配列
index
コード全体
動作環境:
- python 3.6.8
- biopython 1.76
- windows10 64bit
input | output |
---|---|
txid_list, jpname_list | output.fasta |
import os, time, textwrap
from Bio import Entrez, SeqIO
txid_list = [63479, 114476, 13443, 60087, 499966]
jpname_list = ["キョウチクトウ", "クチナシ", "コーヒーノキ", "ヘクソカズラ", "ソナレムグラ"]
f = open('output.fasta','w')
Entrez.email = '【ここにメールアドレスを入力する】'
for id in range(len(txid_list)):
txid = txid_list[id]
term = "txid" + str(txid) + "[Orgn] AND matk[Gene]"
handle = Entrez.esearch(db="nucleotide", term=term)
record = Entrez.read(handle)
id_list = record["IdList"]
handle.close()
try:
handle2 = Entrez.efetch(db="nucleotide", id=id_list[0], rettype="gb", retmode="text")
record = SeqIO.read(handle2, "genbank")
handle2.close()
jpname = jpname_list[id]
desc = record.description
matk_seq = '\n'.join(textwrap.wrap(str(record.seq), 80))
f.write('>' + jpname + '||' + desc + '\n' + matk_seq + '\n\n')
except IndexError:
print(jpname_list[id] + 'は見つかりませんでした')
time.sleep(3)
f.close
入力
今回のコードの入力では、コード中に直接入力しています。
txid_listにtaxidのリスト、jpname_listに和名のリストを記述しています。
今回は、一例としてキョウチクトウ科の植物の和名とtaxidを用意しました。
配列idの検索
BiopythonのEntrezモジュールを用いて、Entrezで検索を行います。ここではまず、ほしい配列のidを検索します。
はじめにEntrez.emailにメールアドレスを指定しています。メールアドレスを記入することが推奨されているため、記入するようにします。
実行時には利用者のメールアドレスを記入してください。
つづいて、txid_listの数だけループ処理を行います。
term = "txid" + str(txid) + "[Orgn] AND matk[Gene]"
検索ワードとして、“txidxxxxxx[Orgn]“と指定することでtaxidと配列レコード中の生物種を結びつけることができます。
また、今回はmatk遺伝子を用いるため、ANDに続いて"matk[Gene]“を指定します。
handle = Entrez.esearch(db="nucleotide", term=term)
record = Entrez.read(handle)
id_list = record["IdList"]
handle.close()
上記で指定したtermを用いてEntrezで検索を行います。今回は塩基配列のデータベースを参照したいため、db=“nucleotide"を指定します。
その後、recordの取得、id_listの取得を行います。
出力として、配列のidが得られたと仮定します。
配列ファイルの検索
続いて配列ファイルそのものの検索を行います。
ここでtryとして、配列ファイルが得られなかった時のエラーハンドリングを行います。
配列が得られなかった時には次のように表示させます。
except IndexError:
print(jpname_list[id] + 'は見つかりませんでした')
配列が見つからなかった場合には、和名が表示され、配列は取得できていないことになります。
実際に配列を取得するコードは下の通りです。
handle2 = Entrez.efetch(db="nucleotide", id=id_list[0], rettype="gb", retmode="text")
record = SeqIO.read(handle2, "genbank")
handle2.close()
jpname = jpname_list[id]
desc = record.description
matk_seq = '\n'.join(textwrap.wrap(str(record.seq), 80))
f.write('>' + jpname + '||' + desc + '\n' + matk_seq + '\n\n')
配列が得られた和名をjpnameに格納し、descとして配列の説明(学名・遺伝子名など)を取得します。
それらを任意の文に結合して、">“の後ろにつけることでヘッダーとして記録します。
なお、以下のように、
matk_seq = '\n'.join(textwrap.wrap(str(record.seq), 80))
としたのは、FASTAファイルがおよそ80文字で配列を改行させているため、その処理を行わせています。
出力
このコードを実行することで、以下の出力が得られます。
まず、ターミナル(コマンドプロンプト)上では以下の出力が得られます。
ソナレムグラは見つかりませんでした
ソナレムグラに関しては、今回の条件では配列は見つかりませんでした。
続いて、出力されたファイルの内容は以下の通りです。最初の2例のみ示します。
output.fasta
>キョウチクトウ||Nerium oleander maturase K (matK) gene, partial cds; chloroplast
TTTCTCCATAACCAATCTTCTCATTTACGACCAACATCCTTTGGGGTCCTTCTTGAACGAATCTATTTCTATGGAAAAAT
AGAACGTCTTGCCCAAGTCATCGCTAAGGATTTTCAGGCCAACTTATGCTTGTTCAAATATCCTTTCATGCATTATGTTA
GGTATCAAGGAAAATCCATTCTGCTTTCAAGGGGGACGGCTCTTTTGATGAATAAATGGAAATCTTACCTTGTCAATTTT
TGGCAATGGAATTTTGACCTCTGGTTTCACTCGGAAAGGGTCTATATAAAGCAATTGTACAATCATTCCCTTGACTTTAT
GGGTTATCTTTCAATTGTGCGACTAAACCCTTCAATGGTACGGAGTCAAATGCTCGAAAATGCATTTCTAATTAATAATG
CTATTAAGAAATTAGACACCCTTGTTCCAATTATTCCTCTGATTGGATCATTGGCTAAAGCGAAATTTTGTAACCTATTA
GGACATCCCATTAGTAAACCGGTTCG
>クチナシ||Gardenia jasminoides voucher VCEWBT2 DBS maturase K (matK) gene, partial cds; chloroplast
TTATTGATAGAAAGAAACCCAGTTTTTATTTTTCACCAAAAAGAAATCAAAAATTATTCTTCTTGTTATATAATTCTCAT
GTATGTGAATACGAATCCATTTTCTTCTTTCTCCGTAAGGAATCTTCTCATTTGCGATCAACATCTTTTGGAGTCTTTCT
TGAACGGATATATTTCTATGAAAAAAAAGAACGTCTTGTAGAAGTCTTTGCTAAGGATTTTCAAGCCAGTCTATGGTTGT
TCAAAGATCCTTTCATACATTATGTTAGGTATCAAGGAAAATCCATTCTGGTTTCAAATGGGACGCCTCTTTTGATGAAT
AAATGGAAATCTTACCTTGTCAATTTTTGGCAATGTCATTTTGGTATTTGGTTTCACCCGGGAAGGGTCTATATAAACCA
ATTACCCAACTATTCCCTTAACTTTATGGGCTATCTGTCAAGTGTGCGACTAAACCATTCAATGGTACGGAGTCAAATGC
TAGAAAATTCATTTCTAATCAATAATGCTATTAAGAAATTTGATACCCTTGTTCCACTTATTCCCCTCATTG
.
.
.
目的のmatk遺伝子が得られたことが確認されました。