我正在寫一個函數,該函數應該通過DNA序列的.fasta文件,併爲文件中的每個序列創建一個核苷酸(nt)和二核苷酸(dnt)頻率字典。然後,我將每個字典存儲在名爲「頻率」的列表中。這是一段代碼,行事詭異:頻率不能累加到一個
for fasta in seq_file:
freq = {}
dna = str(fasta.seq)
for base1 in ['A', 'T', 'G', 'C']:
onefreq = float(dna.count(base1))/len(dna)
freq[base1] = onefreq
for base2 in ['A', 'T', 'G', 'C']:
dinucleotide = base1 + base2
twofreq = float(dna.count(dinucleotide))/(len(dna) - 1)
freq[dinucleotide] = twofreq
frequency.append(freq)
(我用biopython,順便說一下,這樣我就不必提交整個FASTA文件到內存同樣這是一個單鏈DNA,所以我不需要考慮反義dnt)
單個NT記錄的頻率增加到1.0,但dnt的頻率不會增加到1.0。這是因爲計算兩種頻率的方法在我眼中是相同的。
我離開了診斷打印報表,「檢查」變量:
for fasta in seq_file:
freq = {}
dna = str(fasta.seq)
check = 0.0
check2 = 0.0
for base1 in ['A', 'T', 'G', 'C']:
onefreq = float(dna.count(base1))/len(dna)
freq[base1] = onefreq
check2 += onefreq
for base2 in ['A', 'T', 'G', 'C']:
dinucleotide = base1 + base2
twofreq = float(dna.count(dinucleotide))/(len(dna) - 1)
check += twofreq
print(twofreq)
freq[dinucleotide] = twofreq
print("\n")
print(check, check2)
print(len(dna))
print("\n")
frequency.append(freq)
得到這個輸出:(只適用於一個序列)
0.0894168466523
0.0760259179266
0.0946004319654
0.0561555075594
0.0431965442765
0.0423326133909
0.0747300215983
0.0488120950324
0.0976241900648
0.0483801295896
0.0539956803456
0.0423326133909
0.0863930885529
0.0419006479482
0.0190064794816
0.031101511879
(0.9460043196544274, 1.0)
2316
在這裏我們可以看到頻率可能的16個不同dnt中的每一個,所有dnt頻率的總和(0.946)以及所有nt頻率的總和(1.0)和序列的長度。
爲什麼dnt頻率不加1.0?
感謝您的幫助。我對python很陌生,這是我的第一個問題,所以我希望這個提交是可以接受的。
確定你正在使用Python 2?看起來你正在使用'print()'函數,而不是'print'語句。 – TigerhawkT3
我正在使用python 2.我只是習慣於從一次冒險中寫出print()函數,這是我曾經在Uni使用過的一種冒險。 由於它從來沒有給我帶來麻煩,所以我從來沒有改變過打印語句。 – Bantha
在這種情況下,我建議使用'from __future__ import print_function',這樣(例如)你的'print(check,check2)'打印'check',然後'check2'分隔一個空格而不是打印元組' (check,check2)'。 – TigerhawkT3