使用python提取蛋白质序列的相似位点

这是本人的第一篇博客,以后还会更新一些类似学习笔记的东西

话不多少,直接上代码

#!/usr/bin/python
import numpy as np
from collections import Counter

with open('A1.fasta','r') as A1:             #打开蛋白质序列
	with open('senA1.fasta','w') as A1sen:    #用于存放处理后序列
		for line in A1.readlines():        #按行读取
			line=line.strip('\n')          #去掉换行符
			if'>' not in line:          
				A1sen.write(line)          #按行读取 
					
			if'>'in line :             
				A1sen.write('.')     #用‘.’代替蛋白质名字信息

A1.close()
A1sen.close()
A1sen= open('senA1.fasta')            

ntxt=A1sen.read()                 #全部读到一个字符串里
txt=ntxt[:0]+ntxt[1:]             #去掉开头的一个点
slist=[0 for col in range(72)]     #创建含72个string的列表

for i in range (72):                #按点‘.’分割序列
	slist[i]= txt.split('.')[i]
comlist=str()                    #创建一个而用来存放矩阵竖列的变量
lsen=str()                          #创建一个用来存放特征序列的变量


for j in range(len(slist[0])):    
	for i in range(72):
		comlist=comlist+slist[i][j]

	if ( Counter(comlist).most_common(1)[0][0]!='-'):            #找出列字符串里出现频率最高的氨基酸
		if(Counter(comlist).most_common(1)[0][1]>36):            #大于一半的
			lsen=lsen+Counter(comlist).most_common(1)[0][0]      #一个一个存放起来
	comlist='-'                                                        #重置compare list

lsen=lsen[:100]                                          #取前100个
print len(lsen)                                           
print lsen
with open('A1feature.fasta','w')as feature:
	feature.write(lsen)                          #创建个fasta文件存起来



这里A1是一类蛋白质的序列,是我之前用muscle跑过的,所以长短都是一样的,是790个,有很多的gap(-),不知道muscle的同学可以上网搜一下,是一个多序列比对软件。

代码的功能是提取了这一类蛋白质前100个同一位置的最相似氨基酸序列,当然也可以不设置这100个限制

关于代码我详细的写了注释,欢迎各位研究生物信息学的大神一起讨论~~~


前面已经给出了计算 KNN 得分的 Python 实现,这里再给出一个完整的示例,包括读取蛋白质序列数据和计算 KNN 得分: ```python import numpy as np def knn_encode(protein_seq, k=3): """ K-nearest neighbor coding for protein sequences. Args: protein_seq: str, the protein sequence. k: int, the parameter k for KNN encoding. Returns: A numpy array with length 20*k. """ amino_acids = 'ACDEFGHIKLMNPQRSTVWY' aa_map = {aa: i for i, aa in enumerate(amino_acids)} n = len(protein_seq) features = np.zeros((n, 20)) for i, aa in enumerate(protein_seq): if aa in aa_map: features[i, aa_map[aa]] = 1 encoded = np.zeros(20*k) for i in range(n): if i >= k: knn_indices = np.argsort(-np.sum(features[i-k:i, :], axis=0))[:k] elif i < k: knn_indices = np.argsort(-np.sum(features[:i, :], axis=0))[:k] else: # i < k and i >= n - k knn_indices = np.argsort(-np.sum(features[i-k:i, :], axis=0))[:k] encoded[knn_indices + i*20] = 1 return encoded def knn_score(seq1, seq2, k=3): """ Calculate the KNN score between two protein sequences. Args: seq1: str, the first protein sequence. seq2: str, the second protein sequence. k: int, the parameter k for KNN encoding. Returns: A float value representing the KNN score. """ encoded1 = knn_encode(seq1, k=k) encoded2 = knn_encode(seq2, k=k) distance = np.sum(np.abs(encoded1 - encoded2)) return distance # 读取蛋白质序列数据 with open('protein_sequences.txt') as f: sequences = f.read().splitlines() # 计算任意两个序列之间的 KNN 得分 n = len(sequences) knn_scores = np.zeros((n, n)) for i in range(n): for j in range(i+1, n): score = knn_score(sequences[i], sequences[j]) knn_scores[i, j] = score knn_scores[j, i] = score # 输出 KNN 得分矩阵 print(knn_scores) ``` 其中,`protein_sequences.txt` 是包含多个蛋白质序列的文本文件,每行一个序列。通过将每个序列与其他序列计算 KNN 得分,可以得到一个 KNN 得分矩阵,其中第 i 行第 j 列的值为第 i 个序列和第 j 个序列之间的 KNN 得分。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值