Entrezで特定の遺伝子をもつ生物をリストアップする
Biopythonを使って何か試してみたい、バイオインフォ初心者のまじめちゃんです。
調べてる遺伝子をもつ生物を気軽に調べられたらなーと思っていたので、Entrezを使ってちょっと試してみたいと思います。
厳密な結果が出るわけではないので、簡単に調べたい人向けです!
Entrezとは?
公式サイト(Entrez Molecular Sequence Database System (nih.gov))の説明文によるとと
Entrezとは、ヌクレオチドおよびタンパク質配列データ、遺伝子中心およびゲノムマッピング情報、3D構造データ、PubMed MEDLINEなどへの統合アクセスを可能にする分子生物学データベースシステムのことです。
Entrezは、PIR-International、PRF、Swiss-Prot、PDBからの完全なタンパク質配列データ、およびEMBLとDDBJからの情報を含むGenBankからのヌクレオチド配列データを含む20以上のデータベースをカバーしているそうです。
Entrezでアクセスできるデータベースの確認
まずEntrezを使うためのモジュールをインポートする
from Bio import Entrez
import csv
Entrez.email = “XXXX@XXXX” #自分のemailアドレスを入れます
次は Entrez.einfoで使えるデータベースを確認します。
handle = Entrez.einfo()
result = Entrez.read(handle)
print(result)
{'DbList': ['pubmed', 'protein', 'nuccore', 'ipg', 'nucleotide', 'structure', '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', 'proteinclusters', 'pcassay', 'protfam', 'biosystems', 'pccompound', 'pcsubstance', 'seqannot', 'snp', 'sra', 'taxonomy', 'biocollections', 'gtr']}
PubMedや、NCBI protein、nucleotideデータベースがあります。
調べたい属の生物を抽出する
今回は手軽に調べるという主旨なので、NCBIのゲノムデータベースに検索をかけてヒットする生物種を取ってこようと思います。属を絞らない場合はここは飛ばしてください。
(都合上、実際に入力した属名などは隠させていただきます😅)
handle = Entrez.esearch(db=’genome’, term=’属名’, retmax=1000) #retmaxの値は大きな属の場合変えてください
rec = Entrez.read(handle)
ids = rec[‘IdList’]
organisms = []
for id in ids:
handle = Entrez.esummary(db=’genome’, id=id)
rec = Entrez.read(handle)
organisms.append(rec[0][‘Organism_Name’])
これで「organisms」リストに入力した属に所属する生物種がリスト化されます。
特定遺伝子を持つ生物種の抽出
今度はNCBIヌクレオチドデータベースにアクセスし、organismsにリストアップされた生物種+遺伝子名で検索した場合にヒットするか否かで振り分けました。
ヒット数がゼロでなければ(=遺伝子Aを持っていれば)リストアップする感じです。
ちなみに、for文で回すのは私のPCではメモリが足らずスタックオーバーフローになる可能性があったからです~
org_geneA = []
for org in organisms:
term = ‘geneA [Gene Name] AND ‘ + org
hdl = Entrez.esearch(db=’nucleotide’, term=term)
rec = Entrez.read(hdl)
if int(rec[‘Count’]) != 0:
org_geneA.append(org)
print(org_geneA)
これで遺伝子Aを持つX属の生物種名がリスト化されます。
ざっと結果を見た感じ、だいたいいけてそうだけど抜け漏れがありそうでした。(おそらく今回の標的遺伝子がちゃんとアノテーションされていないゲノムがある)
絶対に1種も漏らしたくないということでしたら、遺伝子のアノテーションを自分でやるステップが必要です。
あくまでも今回はササっとスクリーニングするための方法です!!😊