2014-01-13 108 views
2

我要計算所有列的每個字母出現的頻率: 比如我有這樣的三個序列:頻率的信

seq1=AATC 
seq2=GCCT 
seq3=ATCA 

在這裏,我們有:在第一列頻率'A'是2,'G'是1。 將第二列:的「A」的頻率爲1,「C」是1,「T」爲1(在列的其餘部分是相同的) 第一個,我嘗試做計算頻率我的代碼試試這個:

例如:

s='AATC' 

dic={} 
for x in s: 
    dic[x]=s.count(x) 

這給:{'A':2,'T':1,'C':1} 現在,我想申請這對columns.for,我使用這個指令:

f=list(zip(seq1,seq2,seq3)) 

給出:

[('A', 'G', 'A'), ('A', 'C', 'T'), ('T', 'C', 'C'), ('C', 'T', 'A')] 

所以,我在這裏計算()中字母的頻率: 我該怎麼做?

,如果我對序列的文件工作,我該如何使用此代碼它適用於文件的順序?例如 例如我的文件包含100個序列,每次我採取三個序列並應用此代碼。

回答

0

與我的回答你的最後一個問題,你應該在一個函數包裝您的功能:

def lettercount(pos): 
    return {c: pos.count(c) for c in pos} 

然後你就可以輕鬆地將其從zip適用於元組:

counts = [lettercount(t) for t in zip(seq1, seq2, seq3)] 

或者,它結合到現有的循環:

... 
counts = [] 
for position in zip(seq1, seq2, seq3): # sets at same position 
    counts.append(lettercount(position)) 
    for pair in combinations(position, 2): # pairs within set 
     ... 
+0

OK,比k you.Now,我想要計算這個序列的熵。熵= p_0 * log p_0 + p_1 * log p_1 + ... + p_n * log p_n。 p是給定列中字母x的頻率。 (這是一列的熵)。例如第一列的熵({'A':2,'G':1})是2/3 log(2/3)+1/3 log(1/3) – user3184809

+1

您可以自己解決這個問題。創建一個函數'def entropy(count):'並讀取['math'文檔](http://docs.python.org/2/library/math。HTML#電源和對數函數)。另外,請注意,兩個人花時間寫了有用的答案,你甚至沒有投票給他們:http://stackoverflow.com/help/someone-answers – jonrsharpe

1

這裏:

sequences = ['AATC', 
      'GCCT', 
      'ATCA'] 
f = zip(*sequences) 
counts = [{letter: column.count(letter) for letter in column} for column in f] 
print(counts) 

輸出(格式化):

[{'A': 2, 'G': 1}, 
{'A': 1, 'C': 1, 'T': 1}, 
{'C': 2, 'T': 1}, 
{'A': 1, 'C': 1, 'T': 1}] 

突出特點:

  • 而不是明確指定seq1seq2等等,我們把它們放在一個名單。
  • 我們解開與*運營商名單。
  • 我們使用字典理解在列表解析裏生成在每列字母計數。這基本上是你爲單序列案例做的,但更具可讀性(IMO)。