在ProtParam 批量預(yù)測(cè)蛋白序列理化性質(zhì)參數(shù)

計(jì)算蛋白理化性質(zhì)一般在網(wǎng)站镶摘,protparam
此網(wǎng)站只可以一次輸入一條序列押桃,結(jié)果需要挨個(gè)復(fù)制。當(dāng)序列條數(shù)很多時(shí)也是著實(shí)費(fèi)力碗短。
此外直接用Bioperl寫腳本也可以凤优,Biopython 不確定是否可以悦陋。
直接使用 request 應(yīng)該也可以
goal :再看一下class 的使用,學(xué)一下html語(yǔ)法筑辨,format 格式化

issue : 結(jié)果數(shù)據(jù)保存在pre標(biāo)簽內(nèi)叨恨,單項(xiàng)數(shù)據(jù)不是在標(biāo)簽內(nèi),
使用 /following::text()[1] 報(bào)錯(cuò) It should be an element.
solution : 直接獲取 標(biāo)簽內(nèi)所有內(nèi)容挖垛,split 從列表中獲取信息

issue : 運(yùn)行速度很慢,不過(guò)應(yīng)該比手動(dòng)準(zhǔn)確秉颗,
solution :可能是服務(wù)器在國(guó)外痢毒,不必等到頁(yè)面加載完全進(jìn)行下一步操作,

issue: 對(duì)類的概念了解不是太清楚蚕甥,將參數(shù)信息合并到字典里哪替,每條序列保存為json格式
solution :只能寫腳本轉(zhuǎn)換為自己需要的格式。

issue: json格式有誤菇怀,
solutionon: 直接寫為tab分隔

test: 使用58條序列測(cè)試
result: 用時(shí) 2681 s 約44mins , 太慢了凭舶。晌块。。帅霜。不過(guò)還好啦匆背。瀏覽器最小化后,就可以做其他事了身冀,

此腳本只能在win 下使用钝尸,并需正確安裝webdriver驅(qū)動(dòng)

獲得數(shù)據(jù)

#!/usr/bin/env python
# coding: utf-8 
#usage: python scrpit inputfile outfilename
from selenium import webdriver
from Bio import SeqIO
import re,time,json,sys
st = time.time()
input_file = sys.argv[1]
out_file = sys.argv[2]

#import os
#os.chdir(r"C:\Users\Acer\Desktop\codee\python\expasy")

expasy = webdriver.Chrome()
expasy.get("https://web.expasy.org/protparam/")


class expasy_cal():
    '''get physical and chemical parameters for a given protein sequence file 
        based on web https://web.expasy.org/protparam/'''
    
    def inputseq(seq):
        """input the protein sequence"""
        time.sleep(0.3)
        while True:
            if expasy.find_element_by_xpath('//*[@id="sib_body"]/form/textarea').is_displayed():
                expasy.find_element_by_xpath('//*[@id="sib_body"]/form/p[1]/input[1]').click() #獲取新網(wǎng)頁(yè)
                expasy.find_element_by_xpath('//*[@id="sib_body"]/form/textarea').send_keys(seq)
                expasy.find_element_by_xpath('//*[@id="sib_body"]/form/p[1]/input[2]').click()
                break
            else:
                print("input box is not displayed")
             
    def compute():
        """get the parameters showed below"""
         #inbox.send_keys(seq)
        time.sleep(0.3) #等待頁(yè)面加載的時(shí)間
        while True:
            if expasy.find_element_by_xpath('//*[@id="sib_body"]/h2').is_displayed():
                pd={}
                parameters = expasy.find_element_by_xpath('//*[@id="sib_body"]/pre[2]').text.split("\n\n") #分割不同參數(shù)
                aaa='\n'.join(parameters)
                bbb=re.split("[:\n]",aaa)  #將參數(shù)值 與 值分割
                pd["number_of_amine_acid"] = bbb[1].strip()
                pd["molecular_weight"] = bbb[3].strip()
                pd["theoretical_pi"] = bbb[5].strip() 
                pd["instability_index"] = re.findall("[\d.]+",bbb[66])[0]  #filter 結(jié)果怎么是個(gè)對(duì)象
                pd["aliphatic_index"] = bbb[70].strip()
                pd["gravy"] = bbb[72].strip()
                return pd
                break
            else:
                print("loading")
                

with open(out_file,"w",encoding='utf-8') as f:
    f.write('{}\t{}\t{}\t{}\t{}\t{}\t{}\n'.format(
        'seq_id',
        'number_of_amine_acid',
        'molecular_weight',
        'theoretical_pi',
        'instability_index',
        'aliphatic_index',
        'gravy'))
    pros = SeqIO.parse(input_file,"fasta")
    i=0
    for pro in pros:
        print("="*10,"seq",i+1,"->",pro.id,"on the way","="*10)
        expasy_cal.inputseq(seq = pro.seq)
        cccc = expasy_cal.compute()
        number_of_amine_acid = cccc['number_of_amine_acid']
        molecular_weight = cccc['molecular_weight']
        theoretical_pi = cccc['theoretical_pi']
        instability_index = cccc['instability_index']
        aliphatic_index = cccc['aliphatic_index']
        gravy = cccc['gravy']
        f.write('{}\t{}\t{}\t{}\t{}\t{}\t{}\n'.format(
            pro.id,
            number_of_amine_acid,
            molecular_weight,
            theoretical_pi,
            instability_index,
            aliphatic_index,
            gravy))
        i+=1
        
        #single_id_pd = {pro.id:cccc}  #單條序列計(jì)算結(jié)果封裝到字典 好像這種不是json格式
        #print(single_id_pd)
        #json.dump(single_id_pd,f,indent = 4,ensure_ascii=False)  #是否要等到全部完成才寫入?
        #f.write(json.dumps(single_id_pd,indent = 4,ensure_ascii=False)+"\n")
        #expasy.get("https://web.expasy.org/protparam/")
        expasy.back() #好像back也需要重新加載頁(yè)面 也是慢
expasy.close()
et = time.time()
print("process finished")
print("taking time",et-st,"s")

結(jié)果

seq_id  number_of_amine_acid    molecular_weight    theoretical_pi  instability_index   aliphatic_index gravy
PgPUB56 458 50457.08    8.02    49.64   101.27  -0.206
PgPUB54 688 75204.03    8.46    50.28   108.21  -0.023

json格式 轉(zhuǎn)換為二維表格格式
存儲(chǔ)的格式可能錯(cuò)誤搂根,直接存儲(chǔ)為tab分格式的吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末珍促,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子剩愧,更是在濱河造成了極大的恐慌猪叙,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仁卷,死亡現(xiàn)場(chǎng)離奇詭異穴翩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)五督,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門藏否,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人充包,你說(shuō)我怎么就攤上這事副签。” “怎么了基矮?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵淆储,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我家浇,道長(zhǎng)本砰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任钢悲,我火速辦了婚禮点额,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘莺琳。我一直安慰自己还棱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布惭等。 她就那樣靜靜地躺著珍手,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琳要,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天寡具,我揣著相機(jī)與錄音,去河邊找鬼稚补。 笑死童叠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的孔厉。 我是一名探鬼主播拯钻,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼撰豺!你這毒婦竟也來(lái)了粪般?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤污桦,失蹤者是張志新(化名)和其女友劉穎亩歹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凡橱,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡小作,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稼钩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顾稀。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖坝撑,靈堂內(nèi)的尸體忽然破棺而出静秆,到底是詐尸還是另有隱情,我是刑警寧澤巡李,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布抚笔,位于F島的核電站,受9級(jí)特大地震影響侨拦,放射性物質(zhì)發(fā)生泄漏殊橙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一狱从、第九天 我趴在偏房一處隱蔽的房頂上張望膨蛮。 院中可真熱鬧,春花似錦季研、人聲如沸敞葛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春递沪,著一層夾襖步出監(jiān)牢的瞬間豺鼻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工款慨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留儒飒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓檩奠,卻偏偏與公主長(zhǎng)得像桩了,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子埠戳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355