如何提高tRNA与mRNA正确结合效率——codon pair优化

蛋白质合成过程中,核糖体蛋白和密码子与反密码子对在核糖体的 P 位和 A 位上形成的空间结构影响了翻译的精确性和速率,而这种空间结构的稳定性是影响密码对使用偏好性的主要原因。详细内容具体可以参考下西北农林科技大学2011赵胜博士毕业论文《478种生物的密码对使用偏好性及其与翻译效率的相关性研究》。

  本文旨在通过大肠杆菌的CDS获取其codon pair并进行频次以及编码氨基酸的归类,然后通过循环算法查找可替换的高频codon pair。本文算法可批量获得多条序列的多个codon pair的修改。根据本文的数据来源和结果整理,其密码子频率和文献中报道的数据基本一致,这说明了本文采用的数据具有高度的可靠性。该codon pair的替换使用有了坚实的理论基础。

   规模化发酵,想要提高蛋白的表达量,需要从筛选高表达的菌株和表达载体、目标基因在质粒上的转录效率、mRNA二级结构稳定性(发卡结构、GC含量、吉布斯自由能)、核糖体与mRNA的结合和起始效率、重复序列,密码子偏好性,串联稀有密码子等等所有影响蛋白翻译过程考虑,其中串联稀有密码子跟codon pair理念有点类似,但不完全相同。condon pair应该说是影响蛋白表达的最后一个环节,如何快速的找到低频codon pair以及完成替换对生产和研究是非常有意义的工作。

一、从大肠杆菌的CDS获取code pair,并根据所编码的氨基酸对其核苷酸序列进行频次统计和归类

import pandas as pd
import numpy as np
from itertools import combinations
from tqdm import tqdm
from collections import Counter
features = pd.read_csv('/home/lxh/Documents/Lysin/mimazi.csv')
sum2_mat = np.array(features.iloc[0:32,:])
list = sum2_mat.tolist()
list1 = {}
for a in list:
  list1.update({a[0]:a[1]})
  list1.update({a[5]:a[6]})

f = open(r"/home/lxh/Documents/Lysin/大肠杆菌蛋白/Escherichia coli _gene_result.txt","r")
seq = [(a.replace("\n","").split("(")[0].split()[1],a.replace("\n","").split("(")[1].split(",")[0].split("..")) for a in f.readlines() if "Annotation:" in a]
f.close()
NC = []
for a in seq:
  if a[0] not in NC:
    NC.append(a[0])


DNA = []
protein = []
for aa in tqdm(NC):
  bb = ""
  f1 = open(f"/home/lxh/Documents/Lysin/大肠杆菌蛋白/{aa}_DNA.txt","r")
  for a in f1.readlines():
    if a[0] != ">":
      bb += a.replace("\n","")
    else:
        DNA.append(bb)
        protein1 = ''.join([list1[bb[r:r + 3]] for r in range(0,(len(bb) -2),3)])
        protein.append(protein1)
        bb = ""
  f1.close()


num2 = []
num3 = []
for a in DNA:
  num = [a[r:r + 6] for r in range(0,len(a) - 5,3)]
  num3 += num

len(num3)
for a in protein:
  num1 = [a[r:r + 2] for r in range(len(a) - 1)]
  num2 += num1

num4 = []
for a in num2:
  if a not in num4:
    num4.append(a) 

PP = {}
for a in tqdm(num4):
  seq2 = []
  for b in range(len(num2)):
    if a == num2[b]:
      seq2.append(num3[b])
  PP.update({a:dict(sorted(dict(Counter(seq2)).items(),reverse = True,key=lambda item: item[1]))})

f = open("/home/lxh/Documents/Lysin/序列优化/密码子对codon-pair统计.txt","w")
for a in PP:
  f.write(str(a) + "  " + str(PP[a]) + "\n")

f.close()

二、计算每条优化序列中codon pair的频次并找到序列中低频的codon pair

f = open("/home/lxh/Documents/Lysin/序列优化/密码子对codon-pair统计.txt","r")
PP = {}
for a in f.readlines():
  aa = a.replace("{","")
  bb = aa.replace("}\n","")
  cc = bb.replace(":","")
  dd = cc.replace(",","")
  ee = dd.replace("'","").split()
  redict = {}
  for b in range(int(len(ee[1:]) / 2)):
    redict.update({ee[1:][2 * b]:int(ee[1:][2 * b + 1])})
  PP.update({ee[0]:redict})

f.close()


seq1 = []
f = open(r"/home/lxh/Documents/Lysin/优化序列.txt","r")
seq1name = []
for a in f.readlines():
  if (a[0] not in ['\n']) & (a[0] == ">"):
    seq1name.append(a.replace("\n",""))
  elif (a[0] not in ['\n']):
    seq1.append(a.replace("\n",""))

f.close()

countnum = 200
f = open("/home/lxh/Documents/Lysin/序列优化/密码子对codon-pair统计_GS4_W99Y.txt","w")
i = -1
recorrect = {}
for a in seq1:
  recorrect1 = []
  i += 1
  num = [a[r:r + 6] for r in range(0,len(a) - 5,3)]
  print(seq1name[i])
  f.write(seq1name[i] + "\n")
  j = -1
  for b in num:
    j += 1
    for x in PP.values():
      if b in x.keys():
        #print(3 * j + 1,"-",3 * j + 6,b,":",x[b],(max(x.values()),min(x.values())))
        f.write(str(3 * j + 1) + "-" + str(3 * j + 6) + "  " + b + "  " + str(x[b]) + "  " + str(max(x.values())) + "  " + str(min(x.values())) + "\n")
        if x[b] < countnum:
          recorrect1.append((num[j -1],str(3 * j + 1) + "-" + str(3 * j + 6) + ": " + b,num[j + 1]))
  recorrect.update({seq1name[i]:recorrect1})

f.close()

三、将低频的code pair进行替换

val = []
for x in list1.values():
  if x not in val:
    val.append(x)

sum = {}
for a in val:
  sum1 = []
  for b in list1:
    if list1[b] == a:
      sum1.append(b)
  sum.update({a:sum1})




sum3 = []
for a in recorrect:
  sum2 = []
  for b in recorrect[a]:
    c = b[1].split(": ")
    for x in PP.values():
      if c[1] in x.keys():
        d = sum[list1[c[1][0:3]]]
        sum1 = []
        for e in d:
          if (e + c[1][3:] in x.keys()):
            if  (x[e + c[1][3:]] > countnum):
              for y in PP.values():
                if (b[0][0:3] + e in y.keys()):
                  if (y[b[0][0:3] + e] > countnum):
                    sum1.append(({b[0][0:3] + e:y[b[0][0:3] + e],c[0] + f"({c[1]}:{x[c[1]]})" + ":" + e + c[1][3:]:x[e + c[1][3:]]}))
        if sum1 == []:
          for e in d:
            if (c[1][0:3] + e in x.keys()):
              if (x[c[1][0:3] + e] > countnum):
                for y in PP.values():
                  if (e + b[0][3:] in y.keys()):
                    if (y[e + b[0][3:]] > countnum):
                      sum1.append(({c[0] + f"({c[1]}:{x[c[1]]})" + ":" + c[1][0:3] + e:x[c[1][0:3] + e],e + b[0][3:]:y[e + b[0][3:]]}))
          if sum1 == []:
            for f in x.keys():
              if (f[0:3] != c[1][0:3]):
                if (f[3:] != c[1][3:]):
                  if x[f] > countnum:
                    for y in PP.values():
                      if (b[0][0:3] + f[3:] in y.keys()):
                        if (y[b[0][0:3] + f[3:]] > countnum):
                          for z in PP.values():
                            if (f[0:3] + c[1][3:] in z.keys()):
                              if (z[f[0:3] + c[1][3:]] > countnum):
                                sum1.append(({b[0][0:3] + f[3:]:y[b[0][0:3] + f[3:]],c[0] + f"({c[1]}:{x[c[1]]})" + ":" + f:x[f],f[0:3] + c[1][3:]:z[f[0:3] + c[1][3:]]}))
            sum2.append(sum1)
          else:
            sum2.append(sum1)
        else:
          sum2.append(sum1)
  sum3.append(sum2)   

四、统计结果

  1.大肠杆菌codon pair频次的部分统计结果如下:

MK  {'ATGAAA': 2957, 'ATGAAG': 1237}
KR  {'AAACGC': 2160, 'AAACGT': 1709, 'AAGCGT': 903, 'AAGCGC': 899, 'AAACGG': 547, 'AAACGA': 335, 'AAAAGA': 318, 'AAGCGG': 315, 'AAGCGA': 269, 'AAAAGG': 135, 'AAGAGA': 96, 'AAGAGG': 39}

2.所要优化序列的codon pair频次部分结果呈现如下:

>E.coil
1-6  ATGTCC  622  1531  622
4-9  TCCCGT  594  1184  8
7-12  CGTTTT  2061  2061  26
10-15  TTTGTC  1734  1734  231

上述1-6表示核苷酸的位置,后面紧跟该位置的核苷酸序列、该位置核苷酸序列的频次、1-6核苷酸所编码氨基酸的所有密码子频率最高值、1-6核苷酸所编码氨基酸的所有密码子频率最低值。

3.序列中低频次codon pair统计

[('GTTGAT', '46-51: GATTGG(185)', 'TGGGCA'),

('GCAGTT', '256-261: GTTTGG(156)', 'TGGACC'),

('TATAAT', '277-282: AATTGG(93)', 'TGGAAT')]

列表中第一串字母表示46-51位低频次codon pair的前一个codon pair,列表中最后一串字母表示46-51位低频次codon pair的后一个codon pair,中间的codon pair想必不用解释了吧,其中括号中的数值表明了该位置codon pair的频次数值。该值越大表明其使用效率或者说频率较高。越低说明其codon pair序列使用频次较低。

4.替换高频使用的codon pair序列

[[{'GTTGAC': 1185, '46-51(GATTGG:185):GACTGG': 2307}],
 [{'GCAGTC': 526, '256-261(GTTTGG:156):GTCTGG': 1601}, 
 {'GCAGTA': 797, '256-261(GTTTGG:156):GTATGG': 460}, 
 {'GCAGTG': 1167, '256-261(GTTTGG:156):GTGTGG': 690}], 
 [{'TATAAC': 1221, '277-282(AATTGG:93):AACTGG': 1717}]]

46-51位序列位GATTGG,其codon pair值为185,可以替换为GACTGG,只改变了前三位密码子GAC,因此前一个codon pair需要将后三位密码子更换为GAC,更换后相邻的两个氨基酸的codon pair值都不低于我们设定值200,符合我们的要求。

如果有需要的做类似相关工作的伙伴,可以关注我,相互交流心得。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值