编写一个程序,从纯文本文件中读取DNA序列。计算每个碱基出现的频率。该程序还需给出最常见碱基的出现频率。附加GC含量计算。

1. 背景

如题,这是《python生物信息学数据管理》的一道练习题。

2. 难点分析

计算碱基分别的频率并不难,关键是如何判定最高频碱基,然后将碱基和频率匹配打印。

3. 我的思路

我的第一想法是字典,原因有三:
第一,字典是包含了键和值的配对的。有了配对,可以很方便进行打印。
第二,字典支持排序,排序可以解决最值问题。
第三,字典支持按键或者键值进行索引,排序后通过索引很容易就能就能找到最高频碱基和与匹配的频率,并将其赋值给新对象,进而格式化输出。
以下是我想法的实现:

##python3.7.3
data = {}
with open('telomeraseCDS.txt', 'r') as file:
  seq = file.read()
for i in "ATCG":
  results = (seq.count(i)) / len(seq)
  print("frequency of {}: {:.2%}" .format(i, results))  
  data.update({results: i})  #这里可以思考为什么不以i作为key
data_sorted =  dict(sorted(data.items(), reverse = True)) #对字典进行降序排列并返回字典
fre_num, base_name = next(iter(data_sorted.items()))    #获取第一个键及其键值,并赋值给新对象
print('highest frequency:{}:{:.2%}' .format(base_name, fre_num)) 

#计算GC含量
#我的思路是根据已有的字典,通过键值找到键。
#列表推导式可以实现这一想法:
GC_freq = [key for key,  value in data_sorted.items()  
           if value == "G" or value == "C"]  #列表推导式可以嵌套多个条件语句
GC_result = sum(GC_freq)
print('GC content:{:.2%}' .format(GC_result))

4.附录

4.1 telomeraseCDS.txt文件内容:

ATGCCGCGCGCTCCCCGCTGCCGAGCCGTGCGCTCCCTGCTGCGCAGCCACTACCGCGAGGTGCTGCCGC
TGGCCACGTTCGTGCGGCGCCTGGGGCCCCAGGGCTGGCGGCTGGTGCAGCGCGGGGACCCGGCGGCTTT
CCGCGCGCTGGTGGCCCAGTGCCTGGTGTGCGTGCCCTGGGACGCACGGCCGCCCCCCGCCGCCCCCTCC
TTCCGCCAGGTGTCCTGCCTGAAGGAGCTGGTGGCCCGAGTGCTGCAGAGGCTGTGCGAGCGCGGCGCGA
AGAACGTGCTGGCCTTCGGCTTCGCGCTGCTGGACGGGGCCCGCGGGGGCCCCCCCGAGGCCTTCACCAC
CAGCGTGCGCAGCTACCTGCCCAACACGGTGACCGACGCACTGCGGGGGAGCGGGGCGTGGGGGCTGCTG
CTGCGCCGCGTGGGCGACGACGTGCTGGTTCACCTGCTGGCACGCTGCGCGCTCTTTGTGCTGGTGGCTC
CCAGCTGCGCCTACCAGGTGTGCGGGCCGCCGCTGTACCAGCTCGGCGCTGCCACTCAGGCCCGGCCCCC
GCCACACGCTAGTGGACCCCGAAGGCGTCTGGGATGCGAACGGGCCTGGAACCATAGCGTCAGGGAGGCC
GGGGTCCCCCTGGGCCTGCCAGCCCCGGGTGCGAGGAGGCGCGGGGGCAGTGCCAGCCGAAGTCTGCCGT
TGCCCAAGAGGCCCAGGCGTGGCGCTGCCCCTGAGCCGGAGCGGACGCCCGTTGGGCAGGGGTCCTGGGC
CCACCCGGGCAGGACGCGTGGACCGAGTGACCGTGGTTTCTGTGTGGTGTCACCTGCCAGACCCGCCGAA
GAAGCCACCTCTTTGGAGGGTGCGCTCTCTGGCACGCGCCACTCCCACCCATCCGTGGGCCGCCAGCACC
ACGCGGGCCCCCCATCCACATCGCGGCCACCACGTCCCTGGGACACGCCTTGTCCCCCGGTGTACGCCGA
GACCAAGCACTTCCTCTACTCCTCAGGCGACAAGGAGCAGCTGCGGCCCTCCTTCCTACTCAGCTCTCTG
AGGCCCAGCCTGACTGGCGCTCGGAGGCTCGTGGAGACCATCTTTCTGGGTTCCAGGCCCTGGATGCCAG
GGACTCCCCGCAGGTTGCCCCGCCTGCCCCAGCGCTACTGGCAAATGCGGCCCCTGTTTCTGGAGCTGCT
TGGGAACCACGCGCAGTGCCCCTACGGGGTGCTCCTCAAGACGCACTGCCCGCTGCGAGCTGCGGTCACC
CCAGCAGCCGGTGTCTGTGCCCGGGAGAAGCCCCAGGGCTCTGTGGCGGCCCCCGAGGAGGAGGACACAG
ACCCCCGTCGCCTGGTGCAGCTGCTCCGCCAGCACAGCAGCCCCTGGCAGGTGTACGGCTTCGTGCGGGC
CTGCCTGCGCCGGCTGGTGCCCCCAGGCCTCTGGGGCTCCAGGCACAACGAACGCCGCTTCCTCAGGAAC
ACCAAGAAGTTCATCTCCCTGGGGAAGCATGCCAAGCTCTCGCTGCAGGAGCTGACGTGGAAGATGAGCG
TGCGGGACTGCGCTTGGCTGCGCAGGAGCCCAGGGGTTGGCTGTGTTCCGGCCGCAGAGCACCGTCTGCG
TGAGGAGATCCTGGCCAAGTTCCTGCACTGGCTGATGAGTGTGTACGTCGTCGAGCTGCTCAGGTCTTTC
TTTTATGTCACGGAGACCACGTTTCAAAAGAACAGGCTCTTTTTCTACCGGAAGAGTGTCTGGAGCAAGT
TGCAAAGCATTGGAATCAGACAGCACTTGAAGAGGGTGCAGCTGCGGGAGCTGTCGGAAGCAGAGGTCAG
GCAGCATCGGGAAGCCAGGCCCGCCCTGCTGACGTCCAGACTCCGCTTCATCCCCAAGCCTGACGGGCTG
CGGCCGATTGTGAACATGGACTACGTCGTGGGAGCCAGAACGTTCCGCAGAGAAAAGAGGGCCGAGCGTC
TCACCTCGAGGGTGAAGGCACTGTTCAGCGTGCTCAACTACGAGCGGGCGCGGCGCCCCGGCCTCCTGGG
CGCCTCTGTGCTGGGCCTGGACGATATCCACAGGGCCTGGCGCACCTTCGTGCTGCGTGTGCGGGCCCAG
GACCCGCCGCCTGAGCTGTACTTTGTCAAGGTGGATGTGACGGGCGCGTACGACACCATCCCCCAGGACA
GGCTCACGGAGGTCATCGCCAGCATCATCAAACCCCAGAACACGTACTGCGTGCGTCGGTATGCCGTGGT
CCAGAAGGCCGCCCATGGGCACGTCCGCAAGGCCTTCAAGAGCCACGTCTCTACCTTGACAGACCTCCAG
CCGTACATGCGACAGTTCGTGGCTCACCTGCAGGAGACCAGCCCGCTGAGGGATGCCGTCGTCATCGAGC
AGAGCTCCTCCCTGAATGAGGCCAGCAGTGGCCTCTTCGACGTCTTCCTACGCTTCATGTGCCACCACGC
CGTGCGCATCAGGGGCAAGTCCTACGTCCAGTGCCAGGGGATCCCGCAGGGCTCCATCCTCTCCACGCTG
CTCTGCAGCCTGTGCTACGGCGACATGGAGAACAAGCTGTTTGCGGGGATTCGGCGGGACGGGCTGCTCC
TGCGTTTGGTGGATGATTTCTTGTTGGTGACACCTCACCTCACCCACGCGAAAACCTTCCTCAGGACCCT
GGTCCGAGGTGTCCCTGAGTATGGCTGCGTGGTGAACTTGCGGAAGACAGTGGTGAACTTCCCTGTAGAA
GACGAGGCCCTGGGTGGCACGGCTTTTGTTCAGATGCCGGCCCACGGCCTATTCCCCTGGTGCGGCCTGC
TGCTGGATACCCGGACCCTGGAGGTGCAGAGCGACTACTCCAGCTATGCCCGGACCTCCATCAGAGCCAG
TCTCACCTTCAACCGCGGCTTCAAGGCTGGGAGGAACATGCGTCGCAAACTCTTTGGGGTCTTGCGGCTG
AAGTGTCACAGCCTGTTTCTGGATTTGCAGGTGAACAGCCTCCAGACGGTGTGCACCAACATCTACAAGA
TCCTCCTGCTGCAGGCGTACAGGTTTCACGCATGTGTGCTGCAGCTCCCATTTCATCAGCAAGTTTGGAA
GAACCCCACATTTTTCCTGCGCGTCATCTCTGACACGGCCTCCCTCTGCTACTCCATCCTGAAAGCCAAG
AACGCAGGGATGTCGCTGGGGGCCAAGGGCGCCGCCGGCCCTCTGCCCTCCGAGGCCGTGCAGTGGCTGT
GCCACCAAGCATTCCTGCTCAAGCTGACTCGACACCGTGTCACCTACGTGCCACTCCTGGGGTCACTCAG
GACAGCCCAGACGCAGCTGAGTCGGAAGCTCCCGGGGACGACGCTGACTGCCCTGGAGGCCGCAGCCAAC
CCGGCACTGCCCTCAGACTTCAAGACCATCCTGGACTGA

4.2 运行结果:
运行结果图

5. 版本问题

  1. 数据结构的选择:将频率作为键,碱基作为值可能会导致问题,因为不同的碱基可能有相同的频率,而字典的键必须是唯一的。
  2. GC 含量计算:当前的 GC 含量计算可能存在问题,因为它直接使用了字典中的频率值进行求和,而不是重新计算 GC 含量。

6. 欢迎探讨

欢迎评论或私信探讨!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值