2016-06-28 2 views
0

То, что я хочу сделать, это оценить, оценка каждого пептида, т.е. рядВложенный цикл: List - Не получая желаемый результат

Мой код выглядит следующим образом:

import csv, math 

def train_data(fname): 
     #load csv training files 
     peptide= [] 
     allele= [] 
     score = [] 
     with open (fname) as train: 
       reader = csv.DictReader(train, delimiter='\t') 
       for row in reader: 
         peptide.append(row['peptide']) 
         allele.append(row['allele']) 
         score.append(row['score']) 

     return [peptide, allele, score] 

def ff(): 
     peptide, allele, score = train_data('sample.txt') 
     p={'A':(0.074+0.077)/2, 'R':(0.052+0.053)/2, 'N':(0.045+0.044)/2, 'D':(0.054+0.051)/2, 'C':(0.025+0.022)/2, 'Q':(0.034+0.035)/2, 'E':(0.054+0.056)/2, 'G':(0.074+0.074)/2, 'H':(0.026+0.025)/2, 'I':(0.068+0.064)/2, 'L':(0.099+0.096)/2, 'K':(0.058+0.058)/2, 'M':(0.025+0.024)/2, 'F':(0.047+0.048)/2, 'P':(0.039+0.041)/2, 'S':(0.057+0.059)/2, 'T':(0.051+0.053)/2, 'W':(0.013+0.014)/2, 'Y':(0.032+0.033)/2, 'V':(0.073+0.072)/2} 
     for i in range(len(peptide)): 
#    peptide[i]=list(peptide[i]) 
       peptide.append(peptide[i]) 
       for j in range(len(peptide[i])): 
         print(peptide[2][j]) 
         #est_score+=p[peptide[i][j]] 
       print ('---') 
     print(peptide[2][1]) 

if __name__=='__main__': 

     ff() 

Когда я запускаю это код, что я получаю в выходе все значения пептидные т.е. пептида [I] [J] для печати зЬтЬ в цикле, но то, что я хочу, чтобы получить только пептида [2] [J] значения , Также вне цикла он отлично работает. печати (пептид [2] [1]) дает о/р прекрасно то есть значение ''

мой CSV-файл, как это:

peptide score allele 
AAAGAEAGKATTEEQ 0.190842 DRB1_0101 
AAAGAEAGKATTEEQ 0.006301 DRB1_0301 
AAAGAEAGKATTEEQ 0.066851 DRB1_0401 
AAAGAEAGKATTEEQ 0.006344 DRB1_0405 
AAAGAEAGKATTEEQ 0.035130 DRB1_0701 
AAAGAEAGKATTEEQ 0.006288 DRB1_0802 
AAAGAEAGKATTEEQ 0.176268 DRB1_0901 
AAAGAEAGKATTEEQ 0.042555 DRB1_1101 
AAAGAEAGKATTEEQ 0.114855 DRB1_1302 
AAAGAEAGKATTEEQ 0.006377 DRB1_1501 
AAAGAEAGKATTEEQ 0.006296 DRB3_0101 
AAAGAEAGKATTEEQ 0.006313 DRB4_0101 
AAAGAEAGKATTEEQ 0.070413 DRB5_0101 

Что Я хочу сделать, это оценить счет каждого пептида, т.е. строки не все строки вместе, используя: est_score + = P [пептид [I] [J]]

+0

pepetide [i] - это строка. Для j в диапазоне (len (пептид [i])) будет проходить через значения j, но тогда вы печатаете каждый отдельный символ из пептида [2], не относящийся к пептиду [i]. –

+0

Не могли бы вы рассказать мне, что мне делать, если я хочу рассчитать счет для каждой строки отдельно? То, что он делает, вычисляет счет для всех строк. –

+1

Я не уверен, что понимаю, что вы подразумеваете под «вычислением оценки для каждой строки отдельно». Кажется, что у вашего файла есть оценка уже для каждой строки. Каков расчет? Ваш цикл for для i в диапазоне (len (пептид)) зацикливается на каждой строке, как есть. поэтому в стороне этот пептид петли [1] = AAAGA ..., оценка [1] = 0.190842 и аллель [1] = DRB1_0101. Я не знаю, что вы пытаетесь сделать с этими значениями. –

ответ

1
import csv, math 

p={'A':(0.074+0.077)/2, 'R':(0.052+0.053)/2, 'N':(0.045+0.044)/2, 'D':(0.054+0.051)/2, 'C':(0.025+0.022)/2, 'Q':(0.034+0.035)/2, 'E':(0.054+0.056)/2, 'G':(0.074+0.074)/2, 'H':(0.026+0.025)/2, 'I':(0.068+0.064)/2, 'L':(0.099+0.096)/2, 'K':(0.058+0.058)/2, 'M':(0.025+0.024)/2, 'F':(0.047+0.048)/2, 'P':(0.039+0.041)/2, 'S':(0.057+0.059)/2, 'T':(0.051+0.053)/2, 'W':(0.013+0.014)/2, 'Y':(0.032+0.033)/2, 'V':(0.073+0.072)/2} 

def train_data(fname): 
     #load csv training files 
     peptide= [] 
     allele= [] 
     score = [] 
     with open (fname) as train: 
       reader = csv.DictReader(train, delimiter='\t') 
       for row in reader: 
         peptide.append(row['peptide']) 
         allele.append(row['allele']) 
         score.append(row['score']) 

     return [peptide, allele, score] 

def ff(): 
     peptide, allele, score = train_data('peptide.txt') 
     for i in range(len(peptide)): 
       est_score = 0 
       for char in peptide[i]: 
        est_score += p[char] 
       print("est_score: " + str(est_score), "\t: read_score: " + str(score[i])) 
       print ('---') 
     print(peptide[2][1]) 

if __name__=='__main__': 

     ff() 

Est_score всегда тот же, поскольку в файле, который вы предоставили, пептид идентичен в каждой строке. Это печатает:

est_score: 0.9625000000000001 : read_score: 0.190842 
--- 
est_score: 0.9625000000000001 : read_score: 0.006301 
--- 
est_score: 0.9625000000000001 : read_score: 0.066851 
--- 
est_score: 0.9625000000000001 : read_score: 0.006344 
--- 
est_score: 0.9625000000000001 : read_score: 0.035130 
--- 
est_score: 0.9625000000000001 : read_score: 0.006288 
--- 
est_score: 0.9625000000000001 : read_score: 0.176268 
--- 
est_score: 0.9625000000000001 : read_score: 0.042555 
--- 
est_score: 0.9625000000000001 : read_score: 0.114855 
--- 
est_score: 0.9625000000000001 : read_score: 0.006377 
--- 
est_score: 0.9625000000000001 : read_score: 0.006296 
--- 
est_score: 0.9625000000000001 : read_score: 0.006313 
--- 
est_score: 0.9625000000000001 : read_score: 0.070413 
--- 
A 
0

для меня это только печать peptide[2][j], но печать его много раз, это то, что вы хотите?

A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 
A 
A 
G 
A 
E 
A 
G 
K 
A 
T 
T 
E 
E 
Q 
--- 
A 

Как python2, так и python3 дают мне тот же результат.

+0

{'T ': 0,052,' K ': 0,058,' G ': 0,074,' Q ': 0,0345,' D ': 0,0525,' E ': 0,055,' M ': 0,0245,' C ': 0,0235,' W ': 0,0135, 'I': 0,066, 'L': 0,0975, 'S': 0,0599999999999999996, 'P': 0,04, 'F': 0,0475, 'A': 0,0755, 'V': 0,0725, 'N': 0,0455, 'R': 0.0525, 'Y': 0.0325, 'H': 0.025500000000000002} Я хочу использовать словарь, то есть приведенные выше значения, чтобы предсказать/вычислить оценку ... оценкам_score -> est_score. для каждого пептида в строке. Но то, что делает код, это добавить оценку для всех пептидов, то есть строк –