獣医師が必死にバイオインフォマティクスPythonによる実践レシピをwin10で動かす(その5)


Biopythonで遊ぶ

使えるデータベースの確認
アクセスする際に自分の責任を明確にするためにもメールアドレスを書こう
一応Biopythonの仕様で1秒に4個以上のクエリーを投げ込むことはしないが、バグでどうなるかわからないので、要注意
過剰アクセスで1事業所が1週間アクセス禁止になった現場を見たことがある

from Bio import Entrez, Medline, SeqIO

Entrez.email = "put@your_email.here" 
handle = Entrez.einfo()
rec = Entrez.read(handle)
print(rec)

現状使えるDbListの一覧が見える
とりあえず犬のNGF(Nerve Growth Factor)のmRNA配列を取ってくる事を目標にする

#犬のNGFの遺伝子配列を取ってくる
handle = Entrez.esearch(db="nucleotide", term='NGF[Gene Name] AND "Canis Lupus"[Organism]')
rec_list = Entrez.read(handle)
id_list = rec_list['IdList']
hdl = Entrez.efetch(db='nucleotide', id=id_list, rettype='gb')

recs = list(SeqIO.parse(hdl, 'gb'))
print(recs)

これでNGFの情報が取得できた
設定はデフォルトのままなので20以上出てこない
けどどうせ3つしかないので良い
この後情報を抜くのにnameのカラムに記載があるものを選べば抜ける
なのでとりあえずXM_038690419の遺伝子情報を取得してみる

for rec in recs:
    if rec.name == 'XM_038690419':
        break
print(rec.name)
print(rec.description)
print(rec.seq)

目標は無事に達成
ついでにどんな情報があるのかも見てみる

for feature in rec.features:
    if feature.type == 'gene':
        print(feature.qualifiers['gene'])
    elif feature.type == 'exon':
        loc = feature.location
        print('Exon', loc.start, loc.end, loc.strand)
    else:
        print('not processed:\n%s' % feature)

for name, value in rec.annotations.items():
    print('%s=%s' % (name, value))

この配列ラブラドールレトリーバーから取られたものらしい
CDSの開始点は220番目から、終了は946番目の塩基
割と面白いこと書いてあるね