背景
在做蛋白质结构改造的道路上,需要强大的计算机编程的辅助,在深度学习领域,找到了一个强大的工具,因此研究一下如何与湿实验进行结合。
工具
DeeplearningApproach Anconda python以及各种依赖包 计算机 湿实验数据
实现思路
1.首先,配置好DeeplearningApproach,怎么配置看另一篇文章《深度学习预测酶活性参数提升酶约束模型构建从头环境搭建》。
2.利用已经有数据的突变位点进行预测,比如我要预测一个蛋白序列的L59,W60,Y153,R416位点突变为丙氨酸(A),因此我需要先配置好我的tsv文件,这里的突变我写了一个脚本,代码如下:
import copy
import csv
class ZhaoWeiDian(object):
def __init__(self):
self.no_site1 = 'R' # 输入该位点原始AA(大写单字母)
self.no_site2 = 'A' # 输入该位点原始AA(大写单字母)
# self.aa_list = ['A'] #只改变为单个位点单个突变时使用
self.aa_list = ['R', 'G', 'V', 'L', 'I', 'P', 'F', 'Y', 'W', 'S', 'T', 'C', 'M', 'N', 'Q', 'D', 'E', 'K', 'A', 'H']
self.unit_site = 416
self.double_site = 231
pro = '输入您的蛋白序列'
self.pro_list = []
for p in pro: # 将蛋白字符串变成列表
self.pro_list.append(p)
def sort1(self):
a = self.pro_list
b = self.unit_site
c = self.aa_list
f = self.no_site1
for n,i in enumerate(a):
if n + 1 == b: # 判断是否是我要的位点
d = a[n] # 将原序列的该位点赋予d
a = copy.deepcopy(a) # 这里需要一个深拷贝,否则会改变WT序列,当然如果是同一位点预测为其他19种氨基酸不用也可
for rep_site in c:
if c == f:
pass
else:
a[n] = rep_site # 原序列的该位点替换为我需要的位点
i = a[n] # 提取出改变后的氨基酸
g = ''.join(a) # 将列表变为字符串,供输出使用
man_result = '已经将第%d位氨基酸%s改为%s,输出序列如下:%s' % ((n + 1), d, i, g)
# man_result = '(1R)-1-hydroxy-1-(3-hydroxyphenyl)propan-2-one ' + 'CC(=O)C(C1=CC(=CC=C1)O)O ' + g # 加号与逗号的区别
print(man_result)
break
else:
pass
def sort2(self):
a = self.pro_list
b = self.unit_site
c = self.aa_list
d = self.double_site
f = self.no_site1
h = self.no_site2
mm, pp = f + str(b), h + str(d)
bb = {mm:'WT',pp:'WT'}
aa = [bb]
for n,i in enumerate(a):
if n + 1 == b:
m = a[n]
a = copy.deepcopy(a)
for rep_site in c:
if rep_site == f:
pass
else:
a[n] = rep_site
q = a[n]
for k,l in enumerate(a):
if k + 1 == d:
p = a[k]
s = copy.deepcopy(a)
for rep_site in c:
if rep_site == h:
pass
else:
s[k] = rep_site
r = s[k]
g = ''.join(s)
aa = copy.deepcopy(aa)
bb[mm], bb[pp] = q, r # 赋值行为,如果不放在深拷贝下面,就用第一次的值替换掉了WT
aa.append(bb)
man_result = '已经将第%d&%d位氨基酸%s&%s改为%s&%s,输出序列如下:%s' % ((n + 1), (k+1), m , p , q , r , g)
# man_result = '(1R)-1-hydroxy-1-(3-hydroxyphenyl)propan-2-one ' + 'CC(=O)C(C1=CC(=CC=C1)O)O ' + g # 加号与逗号的区别
print(man_result)
break
else:
pass
break
else:
pass
name = [mm, pp]
self.write(aa,name)
return aa
def write(self,aa,name):
with open(f'./output/{name[0]}+{name[1]}.csv','w',newline='',encoding='utf-8') as file_obj:
writer = csv.DictWriter(file_obj, fieldnames=name)
writer.writeheader()
for cc in aa:
writer.writerow(cc)
a = ZhaoWeiDian()
# unit_res = a.sort1()
double_res = a.sort2()
print(double_res)
3.通过提取WT,L59,W60,Y153,R416的Kcat值绘制柱形图(当然不画图用眼看也可以,就几个数据),和已有的实验数据进行比对:
![](https://i-blog.csdnimg.cn/blog_migrate/12abc3789e13ceb85ff322da53abf716.png)
实验数据
![](https://i-blog.csdnimg.cn/blog_migrate/9356064a6bbf5d038abf2ea4e8ce786e.png)
深度学习预测数据
![](https://i-blog.csdnimg.cn/blog_migrate/896d71336843ee2de69f3cc7bc5b735c.png)
预测A231位点突变为其他19种氨基酸
深度挖掘
1)如何利用DeeplearningApproach特性?
做一个tsv文件库,这个库里包含所有该蛋白活性位点附近的氨基酸的单位点突变和双位点突变,与WT的Kcat值做对比,筛选有益突变进行实验。
2)可不可以使DeeplearningApproach更贴合某一个确切的实验,使其Kcat值更精确,然后利用Kcat做代谢通量分析,也许可以从两方面入手:
- 调整参数,以此来优化过拟合/欠拟合现象,再做一些超参数优化,使其和已有的实验结果更贴切。
- 利用实验的大量数据(至少百万条)重新训练模型,得到专一性强的模型(几乎不可能实现,只是一种猜想)
注意
本实验数据为拟造,旨在介绍方法。