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種も漏らしたくないということでしたら、遺伝子のアノテーションを自分でやるステップが必要です。

あくまでも今回はササっとスクリーニングするための方法です!!😊

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA