DNA互補(bǔ)鏈 Complementing a Strand of DNA
根據(jù)Waston和Crick的雙螺旋學(xué)說(shuō),DNA是存在兩條鏈,并且根據(jù)A-T, C-G反向互補(bǔ)。
由于DNA存在兩條鏈,因此在分析基因組DNA序列時(shí),我們需要要對(duì)這兩條鏈分別處理。處理這個(gè)任務(wù)的工具有很多種,比如說(shuō)EMBOSS/revseq.
問(wèn)題:給定FASTA格式的DNA序列,判斷在這些序列中,有多少條序列的反向互補(bǔ)鏈和原來(lái)的鏈?zhǔn)窍嗤摹?/p>
解答:本來(lái)想用命令行工具,但是仔細(xì)一看這個(gè)題目居然還由條件判斷部分,那就只能上biopython了
from Bio import SeqIO
cout = 0
for record in SeqIO.parse("rosalind_rvco.txt","fasta"):
if str(record.seq) == str(record.reverse_complement().seq):
count += 1
print(count)
氨基酸翻譯 Protein Translation
給定一條DNA序列,我們希望知道這條序列是否是基因組的編碼區(qū),如果是編碼區(qū),那么我們就需要知道它會(huì)翻譯成什么樣的氨基酸。

盡管大部分生物享有相同的翻譯機(jī)制,比如說(shuō)起始密碼子為(AUG),終止密碼子為(UAA,UAG,UGA), 但在部分物種和含DNA的細(xì)胞器上存在著遺傳密碼變體(genetic code variation),比如說(shuō)脊椎動(dòng)物的線粒體將AGA和AGG當(dāng)作終止密碼子。
問(wèn)題:給定一條DNA序列和AA序列,判斷從DNA到AA的翻譯使用了哪個(gè)翻譯表?
這個(gè)題目非常簡(jiǎn)單,但是卻讓我發(fā)現(xiàn)原來(lái)從DNA到AA的翻譯有那么多方式,NCBI上的編號(hào)顯示一共有將近30種。解題策略就是用Biopython使用不同的密碼表去翻譯,然后判斷結(jié)果和AA是否相同。
from Bio.Seq import translate
from Bio.Seq import CodonTable
def check_table(dna,aa):
for i in CodonTable.ambiguous_dna_by_id:
if translate(dna,table=i,to_stop=True) == aa:
return i
data = [line.strip() for line in open("rosalind_ptra.txt")]
check_table(data[0],data[1])
序列質(zhì)量分布
這題是關(guān)于高通量測(cè)序下機(jī)數(shù)據(jù)(FASTQ)的質(zhì)量分布,題目非常的簡(jiǎn)單,就是對(duì)給定的序列統(tǒng)計(jì)低于某個(gè)閾值的read數(shù),原本打算使用fastp,但是做了好幾次都出錯(cuò)。后來(lái)發(fā)現(xiàn)發(fā)現(xiàn)是fastq的phred質(zhì)量編碼出了問(wèn)題,在歷史上曾經(jīng)出現(xiàn)過(guò)三種編碼方式
- fastq-sanger: Phread+33
- fastq-solexa: Phred+64
- fastq-illumina: Phred+64
考慮到Rosalind這道題目的還是熟悉Biopython,為了通過(guò)就只能用Biopython了
from Bio import SeqIO
for record in SeqIO.parse("rosalind_phre.txt","fastq-sanger"):
total = sum(record.letter_annotations['phred_quality'])
mean = total / len(record.letter_annotations['phred_quality'])
if mean < 27:
count += 1
FASTQ質(zhì)量分布 Base Quality Distribution
對(duì)于測(cè)序儀器而言,一般剛開(kāi)始的幾個(gè)堿基由于機(jī)器剛啟動(dòng)會(huì)存在不穩(wěn)定導(dǎo)致質(zhì)量不夠,后面幾個(gè)堿基會(huì)因?yàn)榉磻?yīng)DNA聚合酶活性不夠等因素導(dǎo)致質(zhì)量不佳。
FastQC質(zhì)控過(guò)程就有一個(gè)指標(biāo)判斷每個(gè)位置上的堿基分布是否符合要求,稱之為"Per Base Sequence Quality"
問(wèn)題: 統(tǒng)計(jì)fastq文件每個(gè)位置上的堿基的質(zhì)量平均值,要求給出低于平均值的位置。
答案: 使用biopython讀取序列,使用numpy進(jìn)行矩陣運(yùn)算
from Bio import SeqIO
import numpy as np
lists = []
for record in SeqIO.parse("rosalind_bphr.fq","fastq-sanger")
lists.append(record.letter_annotations['phred_quality'])
means = np.mean(np.array(lists), axis=0)
np.sum(means < 24)