以下代码均为个人原创,如有疑问,欢迎交流。新浪微博:拾毅者

本节内容:

  • 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特征-从生成到处理相关推荐

  1. 特征工程+特征组合+特征交叉+特征变换+生成特征

    特征组合+特征交叉(交叉特征,组合特征,特征组合)+特征变换+生成特征+特征提取+ 特征缩放+特征选择+特征分箱+时间特征+特征关联+文本特征+特征采样 特征关联---->corr() 特征分箱 ...

  2. 用opencv训练LBP特征分类器生成xml文件

    用opencv训练LBP特征分类器生成xml文件 需要工具:opencv_createsamples.exe .opencv_traincascade.exe .opencv_world3414.dl ...

  3. 蛋白质功能预测中PSSM矩阵的生成

    一.蛋白质功能预测 蛋白质功能预测   近年来高通量实验方法快速发展,随之产生大量新型蛋白质,发现的蛋白质数量与其功能注释之间的差距越来越大,蛋白质功能预测成为分子生物学研究领域的核心问题.传统的蛋白 ...

  4. psql where里有自定义函数慢_使用gplearn自定义特征自动生成模块

    背景:数据科学领域中,数据一直都是主要驱动力,特征工程作为其中重要一环,成为无论是kaggle类的数据竞赛,还是工业界应用中关注的重点.特征工程中有重要的一个环节叫做特征融合,好的特征融合能帮助构造当 ...

  5. 生成特征_使用gplearn自定义特征自动生成模块

    背景:数据科学领域中,数据一直都是主要驱动力,特征工程作为其中重要一环,成为无论是kaggle类的数据竞赛,还是工业界应用中关注的重点.特征工程中有重要的一个环节叫做特征融合,好的特征融合能帮助构造当 ...

  6. 特征线性可分styleGan(粗中细三层次改变图像特征)生成模型有什么用可以模拟数据的分布进而转化为判别模型

    不敢相信,上面这些人脸,全都是假的. 是英伟达的AI生成的. 借用风格迁移的思路,团队为GAN创造了一种新的生成器. 连GAN之父Goodfellow老师也忍不住发推称赞优秀! 这个结构不需要人类监督 ...

  7. PSSM矩阵(位置权重矩阵)

    PSSM矩阵(位置权重矩阵) 定义 -参考维基百科 -同时参考这篇优秀的博客: http://www.nohup.cc/article/112/ 可以反映出每个位置上不同碱基出现的频率,矩阵每一列表示 ...

  8. python数据生成正态分布图_Python 与金融数据生成机器学习的特征数据

    记得 关注.分享.点在看 呀- 这样您就能持续收到优质的推送啦 接下来几期我们将使用机器学习方法帮助我们预测未来股票交易数据的走势.在此之前我们需要对数据进行预处理以供机器学习方法使用.这一期我们将以 ...

  9. Blast生成蛋白质序列位置特异性矩阵-PSSM矩阵详细版

    在学习蛋白质蛋白质相互作用时看到了PSSM矩阵,就学习了一下如何生成的,具体步骤如下. 1.下载安装 网址:https://ftp.ncbi.nlm.nih.gov/blast/executables ...

最新文章

  1. DevExpress控件之GridControl、GridView
  2. QT中Widget去除系统提供工具以及系统默认边框
  3. python 指针_python入门指针
  4. Java基础学习总结(42)——Log4j 2使用教程
  5. 09.span query 查询
  6. Android开发面试题之Android四大组件
  7. 鸡尾酒排序算法c语言,[golang] 数据结构-鸡尾酒排序
  8. java 网络实验_20145220 实验五 Java网络编程
  9. windows中的一个小bug
  10. 修改 timezone
  11. papers for mac 破解版永久激活方法
  12. SSH 远程管理软件 SecureCRT 下载安装教程
  13. 电磁计算仿真方法和FEKO软件简介
  14. 世界银行的WDI世界发展指标数据EXCEL版本(1960-2017年)
  15. 走向ASP.NET架构设计---第二章:设计 测试 代码 (前篇)
  16. 模块化开发RequireJS之shim配置
  17. 秋名山老司机(bugku-web)
  18. windows10、windows11、windows-server官方下载安装
  19. switch()函数 ----by xhxh
  20. php rm-rf,rm-rf误操作的恢复过程

热门文章

  1. python装饰器是什么意思_这个python 装饰器代码是什么意思?
  2. 图形化mysql出现乱码_关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)...
  3. python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别
  4. mysql创建generator字段_springmvc+mybatsi-generator生成不了字段注释的解决方案
  5. 类成员初始化顺序php,PHP-php类成员变量初始化的问题?
  6. c打开指定路径文件_C++ 读取指定路径下所有的文件 (C++ get the list of files in a directory)...
  7. 【通知】深度学习之人脸图像算法重印,欢迎读者支持!
  8. 中国电力行业运行形势及十四五供需状况分析报告2021-2027年
  9. 中国高炉煤气脉冲袋式除尘器市场需求分析与竞争战略规划研究报告2022-2028年版
  10. haddler处理队列 netty_如何实现延迟队列