生物信息学习(一)

由 admin 发布

第一次使用Markdown语言写日志,还是挺顺手的,从此告别Word。

一方面学习生物信息,一方面巩固Python,下面进入正题。


基因序列下载

NCBI: National Center for Biotechnology Information,可在其官网上下载到所需相关的基因序列。

官网:https://www.ncbi.nlm.nih.gov

将序列导入Python

将从NCBI下载到的基因序列(fasta格式文件),保存到便于找到的文件夹内。以下代码可以实现将所下载的序列导入Python。

fasta = {} #新建字典
with open('/sequence.fasta') as file:  #引号内为所下载文件
    sequence = ""
    for line in file:
        if line.startswith(">"):
            name = line[1:].rstrip()
            fasta[name] = ''
            continue
        fasta[name] += line.rstrip().upper()

其中fasta.items(name)为其名称,fasta.items(sequence)为其序列。

计算各碱基数

通过以下代码实现各个碱基数的统计(题外话,在PAT题库里见过类似的题目,不过是当时拿C语言写的,然而Python三行就搞定了,可见Python封神不无道理)

ntCounts = []
    for nt in ['A', 'C', 'G', 'T']:
        ntCounts.append(seq.count(sequence)) #sequece为所导入的序列

GC含量计算

GC含量是在DNA4种碱基中,鸟嘌呤和胞嘧啶所占的比率称为GC含量。GC含量愈高,DNA的密度也愈高,同时热及碱不易使之变性,因此利用这一特性便可进行DNA的分离或测定。可根据以下公式计算。

$$ \frac{G+C}{A+T+G+C}\times100\% $$

total = len(sequence)
     #更改为A,T可计算AT含量,也更改可计碱基含量算某一含量
    gcCount = sequence.count('G') + sequence.count('C') 
    gcContent = format(float(gcCount / total * 100), '.6f')

转录与逆转录

DNA转录即把T替换成U,我们得先导入re包,才能完成替换。

import re

通过以下代码即可完成。

rnaSeq = re.sub('T', 'U', seqeunce) 

同理,逆转录则为

rnaSeq = re.sub('T', 'U', seqeunce) 

RNA翻译

翻译过程严格按照碱基互补配对原则进行,编码蛋白质氨基酸序列的各个三联体密码连续阅读。


img

可根据如上密码子,编写代码:

codonTable = {
        'AUA':'I', 'AUC':'I', 'AUU':'I', 'AUG':'M',
        'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACU':'T',
        'AAC':'N', 'AAU':'N', 'AAA':'K', 'AAG':'K',
        'AGC':'S', 'AGU':'S', 'AGA':'R', 'AGG':'R',
        'CUA':'L', 'CUC':'L', 'CUG':'L', 'CUU':'L',
        'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCU':'P',
        'CAC':'H', 'CAU':'H', 'CAA':'Q', 'CAG':'Q',
        'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGU':'R',
        'GUA':'V', 'GUC':'V', 'GUG':'V', 'GUU':'V',
        'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCU':'A',
        'GAC':'D', 'GAU':'D', 'GAA':'E', 'GAG':'E',
        'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGU':'G',
        'UCA':'S', 'UCC':'S', 'UCG':'S', 'UCU':'S',
        'UUC':'F', 'UUU':'F', 'UUA':'L', 'UUG':'L',
        'UAC':'Y', 'UAU':'Y', 'UAA':'', 'UAG':'',
        'UGC':'C', 'UGU':'C', 'UGA':'', 'UGG':'W',
    }
    protein = ""
    #步长为3,即每3个碱基为一组,在如上字典找到对应氨基酸
    for codonStart in range(0, len(rna), 3): 
        codon = rnaSeq[codonStart:codonStart + 3]
        if codon in codonTable:
            protein += codonTable[codon]

protein即为所得到的蛋白质序列。

反向核酸序列互补转换

对于DNA来说,A转换为T,T转换为A,C转换为G,G转换为C;

对于RNA来说,A转换为T,U转换为A,C转换为G,G转换为C;

因而,可以编写如下代码:

seqeunce = seqeunce[::-1]
    dnaTable = {
        "A":"T", "T":"A", "C":"G", "G":"C"
    }
    rnaTable = {
        "A": "T", "U": "A", "C": "G", "G": "C"
    }
    res = ""
    #判断类型是DNA或者是RNA,在此之前可以写一个判断序列是DNA或者RNA的函数
    if type == "dna": 
        for ele in seqeunce:
            if ele in seqeunce::
                    res += dnaTable[ele]
    else:
        for ele in seq:
            if ele in seq:
                res += rnaTable[ele]    

res为所得转换后的序列。


今天到此为止。


参考文献

百度百科—翻译

CSDN—生物信息中的Python 01 | 从零开始处理基因序列

百度百科—密码子




暂无评论

发表评论