BioPython: аминокислотная последовательность содержит букву J и не может рассчитать молекулярную массу

Данные, с которыми я работаю, поступают в файл Excel с аминокислотной последовательностью в индексе 1. Я пытаюсь вычислить различные атрибуты на основе последовательности с помощью BioPython. Код, который у меня есть сейчас:

import xlrd
import sys
from Bio.SeqUtils.ProtParam import ProteinAnalysis

print '~~~~~~~~~~~~~~~ EXCEL PARSER FOR PVA/NON-PVA DATA ~~~~~~~~~~~~~~~'

print 'Path to Excel file:', str(sys.argv[1])
fname = sys.argv[1]
workbook = xlrd.open_workbook(fname, 'rU')

print ''
print 'The sheet names that have been found in the Excel file: '
sheet_names = workbook.sheet_names()
number_of_sheet = 1
for sheet_name in sheet_names:
    print '*', number_of_sheet, ':     ', sheet_name
    number_of_sheet += 1

with open("thefile.txt","w") as f:
    lines = []
    f.write('LENGTH.SEQUENCE,SEQUENCE,MOLECULAR.WEIGHT\n')
    for sheet_name in sheet_names:
        worksheet = workbook.sheet_by_name(sheet_name)
        print 'opened: ', sheet_name
        for i in range(1, worksheet.nrows):
            row = worksheet.row_values(i)
            analysed_seq = ProteinAnalysis(row[1].encode('utf-8'))
            weight = analysed_seq.molecular_weight()
            lines.append('{},{},{}\n'.format(row[2], row[1].encode('utf-8'), weight))
    f.writelines(lines)

Это работало, пока я не добавил расчет молекулярной массы. Это показало следующую ошибку:

Traceback (most recent call last):
  File "Excel_PVAdata_Parser.py", line 28, in <module>
    weight = analysed_seq.molecular_weight()
  File "/usr/lib/python2.7/dist-packages/Bio/SeqUtils/ProtParam.py", line 114, in molecular_weight
    total_weight += aa_weights[aa]
KeyError: 'J'

Я просмотрел файл данных Excel, и это показывает, что аминокислотная последовательность действительно содержит J. Кто-нибудь знает пакет BioPython, который улавливает там «неизвестные аминокислоты», или есть другое предложение?


person Anna Jeanine    schedule 10.02.2017    source источник
comment
Эта проблема, похоже, очень специфична для пакета, и это не какой-либо стандартный модуль python. Я бы посоветовал заглянуть на конкретный форум или на страницу проекта на github.   -  person Raf    schedule 10.02.2017


Ответы (2)


Как сказал peterjc, J - это неоднозначное кодирование аминокислот для лейцина (L) или изолейцина (I). Оба имеют одинаковую молекулярную массу:

>>> from Bio.SeqUtils.ProtParam import ProteinAnalysis
>>> ProteinAnalysis('L').molecular_weight()
131.1729
>>> ProteinAnalysis('I').molecular_weight()
131.1729

Таким образом, вы можете временно заменить все вхождения J на L или I для расчета молекулярной массы.

person BioGeek    schedule 10.02.2017
comment
Большое спасибо! Я напишу функцию для проверки последовательности и замены J, когда она встречается, на L. - person Anna Jeanine; 11.02.2017
comment
Я должен был это проверить, хорошо заметил. Для Biopython было бы разумно сделать это для J без вмешательства пользователя. Вы хотите сделать запрос на перенос или зарегистрировать проблему? - person peterjc; 12.02.2017

Biopython использует молекулярные массы белков из IUPAC, см. https://github.com/biopython/biopython/blob/master/Bio/Data/IUPACData.py

J представляет собой неоднозначную аминокислоту, кодирующую лейцин или изолейцин (L или I), и используется в ЯМР, где невозможно отличить их друг от друга.

В зависимости от того, зачем вам нужен молекулярный вес, вам может быть целесообразно использовать среднее значение веса, используя L и I?

person peterjc    schedule 10.02.2017
comment
Большое спасибо! Я напишу функцию для проверки последовательности и замены J, когда она встречается, на L. - person Anna Jeanine; 11.02.2017