Практикум 13
Задание 1.
Код: n = input() dic = {} with open(n, 'r') as f: a = f.readlines() for i in range(len(a) - 1): if '>' in a[i]: b = a[i + 1] b = b[0:3] if b in dic.keys(): dic[b] += 1 else: dic[b] = 1 ls = [] for i in dic.keys(): ls.append(i) ls.sort() for i in ls: print(f'{i}\t{dic[i]}')
Ниже представлена информация о используемых бактериями старт-кодонах:
Escherichia coli
ATG 3890
ATT 4
CTG 2
GTG 338
TTC 1
TTG 80
Candidatus Gracilibacteria
ACA 1
ATG 1129
GTG 41
TCA 1
TCT 1
TTG 23
Mycoplasma pneumoniae
AAA 1
ACA 1
ACT 1
ATA 3
ATC 1
ATG 626
ATT 7
CAA 1
CAC 1
CTA 1
CTC 3
CTG 2
GAA 1
GTG 60
GTT 1
TCC 2
TCT 1
TGA 1
TTA 2
TTC 1
TTG 49
Из приведённых выше данных следует, что стандартный старт-кодон (ATG) является самым распространённым у всех трёх бактерий. Вторым по частоте использования является GTG, который отличается от стандартного наличием гуанина вместо аденина, однако данные нуклеотиды относятся к пуриновым основаниям и обладают похожими конфигурациями, что свидетельствует о небольшом отличии данных кодонов. Третьим по частоте является TTG. Тимин комплементарен аденину, что могло привести к мутации при трансляции. Остальные старт-кодоны встречаются слишком редко относительно ATG, GTG и TTG. Поэтому мы можем предположить, что они возникли в результате ряда мутаций и большинство из них утратили свою функцию.
Задание 2.
Код: N = input() s = {} with open(N) as f: for i in f.readlines(): if i[0] == '>': s[i[1:].rstrip()] = '' b = i[1:].rstrip() else: s[b] += i.rstrip() c = 1 for i, j in s.items(): lst = [j[n:n+3] for n in range(0, len(j) - 3, 3)] if 'TGA' in lst or 'TAG' in lst or 'TAA' in lst: print(f'{c})\t{i}') c += 1
Вывод программы: 1) lcl|U00096.3_cds_b4587_250 [gene=insN] [locus_tag=b4587] [db_xref=ASAP:ABE-0285253,ECOCYC:G6130] [protein=IS911A regulator fragment] [pseudo=true] [location=join(270278..270540,271764..272190)] [gbkey=CDS]
2) lcl|U00096.3_cds_AAD13438.1_1459 [gene=fdnG] [locus_tag=b1474] [db_xref=UniProtKB/Swiss-Prot:P24183] [protein=formate dehydrogenase N subunit alpha] [transl_except=(pos:586..588,aa:Sec)] [protein_id=AAD13438.1] [location=1547401..1550448] [gbkey=CDS]
3) lcl|U00096.3_cds_AAD13456.1_3824 [gene=fdoG] [locus_tag=b3894] [db_xref=UniProtKB/Swiss-Prot:P32176] [protein=formate dehydrogenase O subunit alpha] [transl_except=(pos:586..588,aa:Sec)] [protein_id=AAD13456.1] [location=complement(4082772..4085822)] [gbkey=CDS]
4) lcl|U00096.3_cds_AAD13462.1_3997 [gene=fdhF] [locus_tag=b4079] [db_xref=UniProtKB/Swiss-Prot:P07658] [protein=formate dehydrogenase H] [transl_except=(pos:418..420,aa:Sec)] [protein_id=AAD13462.1] [location=complement(4297219..4299366)] [gbkey=CDS]
Первая последовательность является псевдогеном. В остальных трёх содержится кодон TGA, который кодирует селеноцистеин.
Задание 3.
Код: N = input() s = {} with open(N) as f: for i in f.readlines(): if i[0] == '>': s[i[1:].rstrip()] = '' b = i[1:].rstrip() else: s[b] += i.rstrip() c = 1 for i, j in s.items(): lst = [j[n:n+3] for n in range(0, len(j) - 3, 3)] if 'TGA' in lst or 'TAG' in lst or 'TAA' in lst: print(f'{c})\t{i}') c += 1
Escherichia coli
TGA 1246
TAA 2761
TAG 306
Candidatus Gracilibacteria
TGA 1
TAA 1000
TAG 188
Mycoplasma pneumoniae
TGA 0
TAA 526
TAG 220
У последних двух бактерий кодон TGA с высокой долей вероятностью полностью утратил функцию стоп-кодона и стал кодировать селеноцистеин. (ссылка на статью с информацией об причинах отсутствия стоп-кодона TGA в последовательностях: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4967479/)
Задание 4.
Код: = input() with open(s) as f: a = f.readlines() tga = 0 taa = 0 tag = 0 ss = '' for j in a: if j[0] == '>': print(ss[-3:]) if 'TGA' in ss[-3:]: tga += 1 elif 'TAA' in ss[-3:]: taa += 1 elif 'TAG' in ss[-3:]: tag += 1 ss = '' else: ss += j.strip() if 'TGA' in ss[-3:]: tga += 1 elif 'TAA' in ss[-3:]: taa += 1 elif 'TAG' in ss[-3:]: tag += 1 print(f"TGA {tga}\nTAA {taa}\nTAG {tag}")
Escherichia coli
TTA 18505
TTG 18301
CTA 5203
CTG 71305
CTC 14952
CTT 14728
Candidatus Gracilibacteria
TTA 15077
TTG 8048
CTA 4861
CTG 4147
CTC 4491
CTT 8053
Mycoplasma pneumoniae
TTA 9246
TTG 6554
CTA 3505
CTG 3054
CTC 2193
CTT 4623
Задание 5.
Код: file = input() s = '' with open(file, 'r') as f: for i in f.readlines(): if i[0] != '>': s += i.strip() with open("out.txt", 'w') as f: summ = 0 wind, step = 100000, 1000 for i in range(0, len(s), step): if i + wind - 1 < len(s): C = s[i:i+wind].count("C") G = s[i:i+wind].count("G") if G + C != 0: summ += (G - C) / (G + C) f.write(f'{i}\t{"{0:0.3f}".format((G - C) / (G + C))}\t{"{0:0.3f}".format(summ)}\n') else: f.write(f'{i}\t0.000\t{"{0:0.3f}".format(summ)}\n')
Ссылка на файл с графиком: https://docs.google.com/spreadsheets/d/1jGu8ReF28SiS7yxEu3Zu4PhosRXZQZ_3/edit?usp=sharing&ouid=116846341272336115491&rtpof=true&sd=true
Минимум расположен между 3870000-3970000 нуклеотидами и равен -28,328. Максимум находится между 1513000-1613000 нуклеотидами и равен 47,733. Минимум соответсвует локусу ori (origin), а максимум - ter (terminus)
Задание 6
Код (bank обозначает файл в формате genomebank, genome - файл с полным геномом): bank = input() genome = input() stls = [] with open(bank, 'r') as f: a = f.readlines() for i in range(len(a)): if a[i][0] == '>': t = a[i] if 'complement' in t: b = '-' + t[t.find('complement') + 11:t.find('..')] else: b = t[t.find('location') + 9:t.find('..')] if b not in stls: stls.append(b) gnm = '' anls = [] comdic = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} with open(genome) as n: for i in n.readlines()[1:]: gnm += i.strip() for q in stls: if '-' not in q: e = gnm[int(q) - 20:int(q)] else: e = gnm[int(q[1:]) - 20:int(q[1:])] e = list(e) for r in range(20): e[r] = comdic[e[r]] a ='' for t in e: a += t e = a[::-1] anls.append(e) lst = [['']] p = 0 while p < 6: p += 1 l = [] for j in lst[-1]: l.append(j +'A') l.append(j + 'C') l.append(j + 'T') l.append(j + 'G') lst.append(l) dic = {} for i in lst[-1]: dic[i] = 0 for i in dic.keys(): for m in anls: if i in m: dic[i] += 1 with open('out.txt', 'w') as f: for i, j in dic.items(): if j >= 100: f.write(f'{i}\t{j}\n')
Программа выводит 6-меры, которые встречаются 100 или больше раз (можно убрать предпоследнюю строчку кода, чтобы получить частоту встреч всех 6-меров):
AAAAAA 119
AAAAAT 102
AAAAAG 117
AAAAGG 109
AAAGGA 143
AAGGAA 138
AAGGAG 193
ATAAAA 104
AGGAAA 112
AGGAGA 151
AGGAGT 128
CAGGAG 131
TAAGGA 170
GAAAAA 116
GGAGAA 116
Чаше всего встречаются 6-меры похожие на последовательность Шайна-Дальгарна (AGGAGG), служащие для улучшения эффективности трансляции, такие, как AGGAGA, AAAAGG, AGGAAA, AGGAGT.