日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
PythonDNA序列中子序列出現(xiàn)頻率

Python DNA序列在使用的時(shí)候有很多需要我們注意的東西,其實(shí)在不斷的學(xué)習(xí)中有很多問題存在,下面我們就詳細(xì)的看看如何進(jìn)行相關(guān)的技術(shù)學(xué)校。ms是我?guī)煹艿膔otation project:給定一堆Python DNA序列,即由字符A, C, G, T組成的字符串,統(tǒng)計(jì)所有長度為n的子序列出現(xiàn)的頻率。

站在用戶的角度思考問題,與客戶深入溝通,找到蕉嶺網(wǎng)站設(shè)計(jì)與蕉嶺網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋蕉嶺地區(qū)。

比如 ACGTACGT,子序列長度為2,于是 AC=2, CG=2, GT=2, TA=1,其余長度為2的子序列頻率為0.

最先想到的就是建一個(gè)字典,key是所有可能的子序列,value是這個(gè)子序列出現(xiàn)的頻率。Python DNA序列但是當(dāng)子序列比較長的時(shí)候,比如 n=8,需要一個(gè)有65536 (4的8次方) 個(gè)key-value pair的字典,且每個(gè)key的長度是8字符。這樣ms有點(diǎn)浪費(fèi)內(nèi)存。。

于是想到,所有的長度為n的子序列是有序且連續(xù)的,所以可以映射到一個(gè)長度為4的n次方的的list里。令 A=0, C=1, G=2, T=3,則把子序列 ACGT 轉(zhuǎn)換成 0*4^3 + 1*4^2 + 2*4 + 3 = 27, 映射到list的第27位。如此,list的index對應(yīng)子序列,而list這個(gè)index位置則儲存這個(gè)子序列出現(xiàn)的頻率。

于是我們先要建立2個(gè)字典,表示ACGT和0123一一對應(yīng)的關(guān)系:

 
 
 
  1. i2mD = {0:'A', 1:'C', 2:'G', 3:'T'}
  2. m2iD = dict(A=0,C=1,G=2,T=3)
  3. # This is just another way to initialize a 
    dictionary

以及下面的子序列映射成整數(shù)函數(shù):

 
 
 
  1. def motif2int(motif):
  2. '''convert a sub-sequence/motif to a non-negative 
    integer'''
  3. total = 0
  4. for i, letter in enumerate(motif):
  5. total += m2iD[letter]*4**(len(motif)-i-1)
  6. return total
  7. Test:
  8. >>> motif2int('ACGT')

雖然我們內(nèi)部把子序列當(dāng)成正整數(shù)來存儲(確切地說,其實(shí)這個(gè)整數(shù)是沒有存在內(nèi)存里的,而是由其在list的index表示的),為了方便生物學(xué)家們看,輸出時(shí)還是轉(zhuǎn)換回子序列比較好。

于是有了下面的整數(shù)映射成子序列函數(shù),其中調(diào)用了另外一個(gè)函數(shù)baseN(),來源在此,感謝作者~

 
 
 
  1. def baseN(n,b):
  2. '''convert non-negative decimal integer n to
  3. equivalent in another base b (2-36)'''
  4. return ((n == 0) and '0' ) or ( baseN(n // b, b).lstrip('0') + \
  5. "0123456789abcdefghijklmnopqrstuvwxyz"[n % b])
  6. def int2motif(n, motifLen):
  7. '''convert non-negative integer n to a sub-sequence/motif with length motifLen'''
  8. intBase4 = baseN(n,4)
  9. return ''.join(map(lambda x: i2mD[int(x)],'0'*(motifLen-len(intBase4))+intBase4))
  10. Test:
  11. >>> int2motif(27,4)
  12. 'ACGT'

以下代碼從命令行讀入一個(gè)存有DNA序列的fasta文件,以及子序列長度,并輸出子序列和頻率。注意以下代碼需要Biopython module。

 
 
 
  1. if __name__ == '__main__':
  2. import sys
  3. from Bio import SeqIO
  4. # read in the fasta file name and motif length
  5. # from command line parameters
  6. fastafile = sys.argv[1]
  7. motifLen = int(sys.argv[2])
  8. # list to store subsequence frequency
  9. frequencyL = [0]*4**motifLen
  10. # go over each DNA sequence in the fasta file
  11. # and count the frequency of subsequences
  12. it = SeqIO.parse(open(fastafile),'fasta')
  13. for rec in it:
  14. chrom = rec.seq.tostring()
  15. for i in range(len(chrom)-motifLen+1):
  16. motif = chrom[i:i+motifLen]
  17. frequencyL[motif2int(motif)] += 1
  18. # print frequency result to screen
  19. for i, frequency in enumerate(frequencyL):
  20. print int2motif(i, motifLen), frequency

以上就是創(chuàng)新互聯(lián)對Python DNA序列的相關(guān)介紹。


分享名稱:PythonDNA序列中子序列出現(xiàn)頻率
轉(zhuǎn)載注明:http://www.5511xx.com/article/djosgcc.html