biopythonでNCBIのnuccoreデータベースからDNAデータをとってくる

概要

NCBIのnuccoreデータベースから
検索条件にあるDNAデータをfastaファイルで出力するというスクリプトを作る

パッケージ読み込み,proxy設定

BiopythonのEntrezパッケージを主に利用した
Entrezは裏でurlibを利用して動いているらしくproxy設定のためにurlibも使用。

コマンドラインから検索したい種や属の指定,配列名を渡し、genus,genameに格納する。

また,メールアドレスはきちんと自分のものを使用してください。とのことです。

from Bio import Entrez
import urllib
import sys

genus = sys.argv[1]
gename = sys.argv[2]

#proxy設定,設定によって{}の中身を変更する
#userid,passwordの部分はユーザ認証が必要ない場合省いてもよい
proxy = urllib.request.ProxyHandler({"http": "http://userid::password@proxy:por",
           "https": "https://userid::password@proxy:port"})

opener = urllib.request.build_opener(proxy)
urllib.request.install_opener(opener)

#ncbiに連絡先としてメールアドレスを記述する必要がある。
Entrez.email = "hogehoge@gmail.com"

検索条件に合致するIDをとってくる

keywordsに検索条件をstr型で格納市,esearchに渡す。
種,属などで検索したい場合は[Orgn],genome name で検索したい場合は[Gene],全ての項目で検索したい場合は[ALL]など指定ができる。Advenced searchと同じだと思われる

keywords = str(genus+"[Orgn] AND "+gename+"[Gene]")
handle = Entrez.esearch(db="nuccore",term = keywords,retmax = 100000)
record = Entrez.read(handle)
gi_list = record["IdList"]

fastaファイルに書き出す

file = open(...fas)によってfastaファイルを開く

file = open(str(genus)+"_"+str(array)+".fasta","w")
record = Entrez.efetch(db="nuccore", rettype="fasta", retmode="text", id=gi_str,retmax = 100000)
file.write(record.read())
file.close()file.close()

efetch,esearchはretmaxを指定しない場合,デフォルトで20に設定されてしまうので
そこを注意しておく

参考文献

https://qiita.com/joemphilips/items/767c67524e4b7e328834#einfo-entrez%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E6%83%85%E5%A0%B1%E3%81%AE%E5%8F%96%E5%BE%97

http://biopython.org/DIST/docs/api/Bio.Entrez-module.html

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.