日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

PSSM特征-从生成到处理

發布時間:2025/3/20 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PSSM特征-从生成到处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下代碼均為個人原創,如有疑問,歡迎交流。新浪微博:拾毅者

本節內容:

  • pssm生成
  • pssm簡化
  • 標準的pssm構建
  • 滑動pssm生成

在基于蛋白質序列的相關預測中。使用PSSM打分矩陣會得將預測效果大大提高,同一時候,假設使用滑動的PSSM,效果又會進一步提高。這里主要以分享代碼為主,以下介紹下PSSM從生成到處理的全過程。

1.PSSM的生成

PSSM的生成有多種方式,這里使用的psiblast軟件。ncbi-blast-2.2.28+/bin/psiblast。下載地址:http://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Web&PAGE_TYPE=BlastNews#1 用法。輸入一個序列,加上相關參數,直接輸出PSSM文件

代碼

#一個命令函數,依據pdb文件。使用blast生成pssm文件 def command_pssm(content, output_file,pssm_file):os.system('/ifs/share/lib/blast/ncbi-blast-2.2.28+/bin/psiblast \-query %s \-db /ifs/data/database/blast_data/nr \-num_iterations 3 \-out %s \-out_ascii_pssm %s &' %(content, output_file,pssm_file))

上面是運行的命令,封裝成函數,以下為實際代碼:

#對每一個序列進行PSSM打分 def pssm(proseq,outdir):inputfile = open(proseq,'r')content = ''input_file = ''output_file = ''pssm_file = ''chain_name = []for eachline in inputfile:if '>' in eachline:if len(content):temp_file = open(outdir + '/fasta/' + chain_name,'w')temp_file.write(content)input_file = outdir + '/fasta/' + chain_nameoutput_file = outdir + '/' + chain_name + '.out'pssm_file = outdir + '/' + chain_name + '.pssm' command_pssm(input_file, output_file,pssm_file)temp_file.closecontent = ''chain_name = eachline[1:5] + eachline[6:7]content += ''.join(eachline)#print content#print chain_nameif len(content):temp_file = open(outdir + '/fasta/' + chain_name,'w')temp_file.write(content)input_file = outdir + '/fasta/' + chain_nameoutput_file = outdir + '/' + chain_name + '.out'pssm_file = outdir + '/' + chain_name + '.pssm'command_pssm(input_file, output_file,pssm_file) temp_file.closeinputfile.close()

測試用例:

''' #生成pssm文件,迭代次數為3 proseq = '/ifs/home/liudiwei/experiment/step2/data/protein.seq' outdir = '/ifs/home/liudiwei/experiment/step2/pssm' pssm(proseq,outdir) '''

PSSM輸出例子:

2.簡化PSSM數據

通常我們須要的僅僅是前面的20列

以下通過代碼來實現上面的功能:

#格式化pssm每行數據 def formateachline(eachline):col = eachline[0:5].strip()col += '\t' + eachline[5:8].strip() begin = 9 end = begin +3for i in range(20): begin = beginend = begin + 3col += '\t' + eachline[begin:end].strip()begin = endcol += '\n'return col

簡化pssm。僅僅要得到前面的20個氨基酸的打分值

def simplifypssm(pssmdir,newdir):listfile = os.listdir(pssmdir)for eachfile in listfile:with open(pssmdir + '/' + eachfile,'r') as inputpssm:with open(newdir + '/' + eachfile,'w') as outfile:count = 0for eachline in inputpssm:count +=1if count <= 3:continueif not len(eachline.strip()):breakoneline = formateachline(eachline)outfile.write(''.join(oneline)) ''' Test example pssmdir = '/ifs/home/liudiwei/experiment/step2/pssm/oldpssm' newdir = '/ifs/home/liudiwei/experiment/step2/pssm/newpssm' simplifypssm(pssmdir, newdir) '''

3.得到標準的PSSM

通過上面抽取出來的PSSM,以下通過代碼來獲得一個滑動的PSSM

#標準的pssm,直接依據標準的pssm滑動 def standardPSSM(window_size,pssmdir,outdir):listfile = os.listdir(pssmdir)for eachfile in listfile:outfile = open(outdir + '/' + eachfile, 'w') with open(pssmdir + '/' + eachfile, 'r') as inputf:inputfile = inputf.readlines()for linenum in range(len(inputfile)):content = []first = [];second = [];third=[];last=[]if linenum < window_size/2:for i in range((window_size/2 - linenum)*20):second.append('\t0')if window_size/2 - linenum > 0:countline = window_size - (window_size/2 - linenum)else:countline = window_size #get needed line countlinetemp = 0for eachline in inputfile:if linetemp < linenum-window_size/2:linetemp += 1continueif linetemp == linenum:thisline = eachline.split('\t')for j in range(0,2):if j>0:first.append('\t')first.append(thisline[j].strip())if countline > 0:oneline = eachline.split('\t')for j in range(2,len(oneline)):third.append('\t' + oneline[j].strip())countline -=1else:breaklinetemp += 1while countline:for i in range(20):last.append('\t0')countline -=1content += first + second + third + lastoutfile.write(''.join(content) + '\n')outfile.close()'''Test example pssmdir = '/ifs/home/liudiwei/experiment/step2/pssm/newpssm' newdir = '/ifs/home/liudiwei/experiment/step2/pssm/standardpssm' window_size = 5 standardPSSM(window_size,pssmdir, newdir) '''

4.依據滑動窗體求出滑動的PSSM

#依據窗體大小,計算出滑動后的20個氨基酸打分值 def computedPSSM(window_size,pssmdir,outdir):listfile = os.listdir(pssmdir)for eachfile in listfile:outfile = open(outdir + '/' + eachfile, 'w') with open(pssmdir + '/' + eachfile, 'r') as inputf:inputfile = inputf.readlines()for linenum in range(len(inputfile)):content = []first = [];second = []if window_size/2 - linenum > 0:countline = window_size - (window_size/2 - linenum)else:countline = window_size #get needed line countlinetemp = 0for eachline in inputfile:if linetemp < linenum-window_size/2:linetemp += 1continueif linetemp == linenum:thisline = eachline.split('\t')for j in range(0,2):if j>0:first.append('\t')first.append(thisline[j].strip())if countline > 0: oneline = eachline.split('\t')[2:len(eachline)]tline = []for i in range(len(oneline)):tline.append(int(oneline[i]))if len(second)==0:second += tlineelse:second = list(map(lambda x: x[0]+x[1], zip(second, tline)))countline -=1 else:break linetemp += 1 format_second = []for i in range(len(second)):format_second.append('\t' + str(second[i]))content += first + format_second outfile.write(''.join(content) + '\n')outfile.close() ''' pssmdir = '/ifs/home/liudiwei/experiment/step2/pssm/newpssm' newdir = '/ifs/home/liudiwei/experiment/step2/pssm/computedpssm' window_size = 5 computedPSSM(window_size,pssmdir, newdir) '''

平滑的PSSM,僅僅是pssmdir不同,直接調用standardPSSM函數

def smoothedPSSM(window_size,pssmdir,outdir):standardPSSM(window_size,pssmdir, outdir)'''Test example pssmdir = '/ifs/home/liudiwei/experiment/step2/pssm/computedpssm' newdir = '/ifs/home/liudiwei/experiment/step2/pssm/smoothedpssm' window_size = 5 smoothedPSSM(window_size,pssmdir,newdir) '''

最后得到的是一個滑動的PSSM矩陣,特征的維數隨窗體的大小逐漸增減。



本欄目python代碼分享持續更新中,歡迎關注:Dream_Angel_Z博客 新浪微博:拾毅者

總結

以上是生活随笔為你收集整理的PSSM特征-从生成到处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。