Учебный сайт Светланы Яровенко
» Семестры » » Первый семестр » Скрипты

Скрипт AminoFreq

Данный скрипт написан на языке программирования Python.

Он способен получать на вход файл фаста-формата с несколькими аминокислотными последовательностями и, проанализировав его, создавать новый файл, который будет содержать частоту встречаемости аминокислот.

Пользователю нужно ввести (по просьбе программы) имя исходного файла с последовательностями и имя желаемого файла, который он получит в итоге.

Скачать данный скрипт можно здесь, а ниже представлен разбор его кода.

Разбор кода

1. Задание класса:
# protein class
class Protein:

    #class arguments
    seqId = ""
    descr = ""
    seq = ""
  
    def __init__(self,i,d,s):
        self.seqId = i
        self.descr = d
        self.seq = s

В данных строчках задаётся класс "Белок", обладающий следующими параметрами:


2. Цикл, создающий список:
for line in fastaFile:                                   
    line = line.strip()                            
    
    if len(line) == 0:
        continue

    # for finding the first line 
    if line[0] == ">":      
        lineList = line.split(None,1)
        myId = lineList[0]
        myId = myId.strip(">")
        if len(lineList) > 1:
            myDescr = lineList[1].strip()
        else:
            myDescr = ""
        myProtein = Protein(myId, myDescr, mySeq)
        proteinList.append(myProtein)
        mySeq = ""
        myId = ""

    # making sequence
    else:
        mySeq = mySeq + line.translate(None,"\n\r \t")
        myProtein.seq = myProtein.seq + mySeq
        mySeq = ""

Данный цикл анализирует файл с последовательностями и вычленяет из него информацию, касающаяся белка. Создаётся новый объект класса "Белок", который добавляется в список, содержащий в себе информацию о всех полученных белках.


До данного цикла задаются переменные:

# parameters
mySeq = ""
myDescr = ""
myId = ""
proteinList = []

3. Функция, создающая словарь с аминокислотами:
def aminoMake(proteinList):
    """
    This function makes a dictionary with amino acids as keys
    and the number of it's appear in the fasta file as value.
    """
    aminoAcids = {}
    for protein in proteinList:
        sequence = protein.seq
        for acid in sequence:
            if acid in aminoAcids:
                aminoAcids[acid] += 1
            else:
                aminoAcids[acid] = 1
    return aminoAcids

Как написано в комментарии к функции, её главная задача — создание словаря, в котором ключами являются аминокислоты, содержащиеся в данном белке, а значениями — количество раз их появления в последовательности, кодирующей данный белок. Цикл анализирует по буквам последовательность, записывая, сколько раз встречается та или иная аминокислота.


4. Подсчёт общего количества аминокислот:
 acidSum = 0
for acidNum in aminoAcid.values():
    acidSum += acidNum 

Данный цикл нужен нам для того, чтобы найти общее количество аминокислот данного белка. Это даст нам позже возможность подсчитать встречаемость каждой аминокислоты.


5. Создание нового файла и запись в него полученных данных:
newName = raw_input("Please enter your new file's name: ") + ".txt"
newFile = open("newName", "w")
newFile.write("Aa: \t Frequency: \n")

for acid in aminoAcid.keys():
    frequency = (float(aminoAcid[acid])/acidSum)*100
    freqStr = acid + "\t" + str(frequency) + "%" + "\n"
    newFile.write(freqStr) 

В первых строчках создаётся новый файл, в который будет записываться информация об аминокислотах. Далее у нас цикл. Он проходит по всем ключам созданного ранее словаря (т.е. аминокислотам) и считает их встречаемость в белке, деля значение, которое соответствует ключу, на общее количество аминокислот.


6. Самая редкая и самая часто встречаемая аминокислоты:
quaList = aminoAcid.values()
quaList.sort()


for acid in aminoAcid.keys():
    if aminoAcid[acid] == quaList[0]:
        fileStr = "The most infrequent amino acid is %s.\n" % acid
        newFile.write(fileStr)
    if aminoAcid[acid] == quaList[-1]:
        fileStr1 = "The most common amino acid is %s.\n" % acid
        newFile.write(fileStr1)

Для начала мы создаём список из количества каждой аминокислоты в последовательности. Потом сортируем его, располагая элементы в порядке возрастания.

Дальше идёт цикл, который выписывает самое маленькое значение, т.е. самый первый элемент списка, и находит соответствующую ему аминокислоту. Аналогично с самым большим значениеv (самый последний элемент списка).

В итоге, в файл записывается, какая аминокислота встречается реже других, а какая — чаще.

Наверх