Подсчет кодонов в ORF

#python #bioinformatics

Вопрос:

Я должен написать функцию count_codons для подсчета количества раз, когда каждый кодон встречается в ORF.

Желаемый результат:

count_codons(‘ATGTCATCATGA’)

должен вернуться

 {'CTT': 0, 'ATG': 1, 'ACA': 0, 'ACG': 0, 'ATC': 0, 'AAC': 0, 'ATA': 0, 'AGG': 0, 'CCT': 0, 'ACT': 0, 'AGC': 0, 'AAG': 0, 'AGA': 0, 'CAT': 0, 'AAT': 0, 'ATT': 0, 'CTG': 0, 'CTA': 0, 'CTC': 0, 'CAC': 0, 'AAA': 0, 'CCG': 0, 'AGT': 0, 'CCA': 0, 'CAA': 0, 'CCC': 0, 'TAT': 0, 'GGT': 0, 'TGT': 0, 'CGA': 0, 'CAG': 0, 'TCT': 0, 'GAT': 0, 'CGG': 0, 'TTT': 0, 'TGC': 0, 'GGG': 0, 'TAG': 0, 'GGA': 0, 'TGG': 0, 'GGC': 0, 'TAC': 0, 'TTC': 0, 'TCG': 0, 'TTA': 0, 'TTG': 0, 'TCC': 0, 'ACC': 0, 'TAA': 0, 'GCA': 0, 'GTA': 0, 'GCC': 0, 'GTC': 0, 'GCG': 0, 'GTG': 0, 'GAG': 0, 'GTT': 0, 'GCT': 0, 'TGA': 1, 'GAC': 0, 'CGT': 0, 'GAA': 0, 'TCA': 2, 'CGC': 0}  

Вот мой код, который не работает, что я должен изменить;

 Seq1 = 'ATGTCATCATGA'  def count_codons(Seq1):  split = split_codons(Seq1)#This is my split_codons function, that I will use to split the OFR into a list of codons  dict_codons = {}  for codon in split:  if dict_codons.has_key(codon):  dict_codons[codon]  = 1  else:  dict_codons[codon] = 0    

Комментарии:

1. Похоже, это должно сработать. В чем проблема?

Ответ №1:

Я не знаю, как вы разделяете свою последовательность, но вы могли бы использовать нарезку.
Кроме того, collections.Counter создаст нужный вам словарь:

 from collections import Counter  Seq1 = 'ATGTCATCATGA'  def count_codons(seq):  codons = [seq[i:i 3] for i in range(0, len(seq)-2, 3)]  return dict(Counter(codons))  print(count_codons(Seq1))  

Выход:

 {'ATG': 1, 'TCA': 2, 'TGA': 1}  

Если вы хотите сохранить записи для кодонов, которые не найдены в вашей последовательности, создайте счетчик один раз, а затем обновите его:

 from collections import Counter your_counter = {'CTT': 0, 'ATG': 0, 'ACA': 0, 'ACG': 0, 'ATC': 0, 'AAC': 0, 'ATA': 0, 'AGG': 0, 'CCT': 0, 'ACT': 0, 'AGC': 0, 'AAG': 0, 'AGA': 0, 'CAT': 0, 'AAT': 0, 'ATT': 0, 'CTG': 0, 'CTA': 0, 'CTC': 0, 'CAC': 0, 'AAA': 0, 'CCG': 0, 'AGT': 0, 'CCA': 0, 'CAA': 0, 'CCC': 0, 'TAT': 0, 'GGT': 0, 'TGT': 0, 'CGA': 0, 'CAG': 0, 'TCT': 0, 'GAT': 0, 'CGG': 0, 'TTT': 0, 'TGC': 0, 'GGG': 0, 'TAG': 0, 'GGA': 0, 'TGG': 0, 'GGC': 0, 'TAC': 0, 'TTC': 0, 'TCG': 0, 'TTA': 0, 'TTG': 0, 'TCC': 0, 'ACC': 0, 'TAA': 0, 'GCA': 0, 'GTA': 0, 'GCC': 0, 'GTC': 0, 'GCG': 0, 'GTG': 0, 'GAG': 0, 'GTT': 0, 'GCT': 0, 'TGA': 0, 'GAC': 0, 'CGT': 0, 'GAA': 0, 'TCA': 0, 'CGC': 0}  Seq1 = 'ATGTCATCATGA'  def count_codons(seq):  codons = [seq[i:i 3] for i in range(0, len(seq)-2, 3)]  return dict(Counter(codons))  your_counter.update(count_codons(Seq1)) print(your_counter)  

Выход:

 {'CTT': 0, 'ATG': 1, 'ACA': 0, 'ACG': 0, 'ATC': 0, 'AAC': 0, 'ATA': 0, 'AGG': 0, 'CCT': 0, 'ACT': 0, 'AGC': 0, 'AAG': 0, 'AGA': 0, 'CAT': 0, 'AAT': 0, 'ATT': 0, 'CTG': 0, 'CTA': 0, 'CTC': 0, 'CAC': 0, 'AAA': 0, 'CCG': 0, 'AGT': 0, 'CCA': 0, 'CAA': 0, 'CCC': 0, 'TAT': 0, 'GGT': 0, 'TGT': 0, 'CGA': 0, 'CAG': 0, 'TCT': 0, 'GAT': 0, 'CGG': 0, 'TTT': 0, 'TGC': 0, 'GGG': 0, 'TAG': 0, 'GGA': 0, 'TGG': 0, 'GGC': 0, 'TAC': 0, 'TTC': 0, 'TCG': 0, 'TTA': 0, 'TTG': 0, 'TCC': 0, 'ACC': 0, 'TAA': 0, 'GCA': 0, 'GTA': 0, 'GCC': 0, 'GTC': 0, 'GCG': 0, 'GTG': 0, 'GAG': 0, 'GTT': 0, 'GCT': 0, 'TGA':  1, 'GAC': 0, 'CGT': 0, 'GAA': 0, 'TCA': 2, 'CGC': 0}