【问题标题】:How to use lists and loops to count the occurrences of dinucleotide pairs?如何使用列表和循环来计算二核苷酸对的出现次数?
【发布时间】:2021-09-27 02:22:20
【问题描述】:

我有一个 DNA 文本文件,我需要专门使用列表和循环来计算二核苷酸对的出现次数(例如:AA、AC、AT、AG、CA、CC 等),然后再次使用列表和循环将计数打印到一个新的文本文件中,作为一个表格,其中两列由制表符分隔:二核苷酸序列和计数。我知道如何做到这一点(将每一对存储在变量中,然后使用 count 计算出现次数,然后打开文本文件并将每个单独的计数打印到文本文件中)但我现在才刚刚开始学习列表和循环并且对如何我会那样做。

例如:我就是这样做的:

dna1.txt 是我计算机上 dna 序列文本文件的(随机)示例:

随机序列(即 dna1.txt):

agggaatcgctggtgaagaggttgtgacctcttataaccccattgttaatgaggtccacg ctaagtaatgagtggctggtataggtgacgtctagaagtcatttctgtacagttactgcc gtggatatcattaggacgacactggggtgctcccacgcaccacgtgtacaggacgac tgcgatgatatagaaggtgagcttaaaacgttctacaaccccaatgaatcatagccgggt agattgccaggcgtgtggtaacgggtacgtggcggatctcgtccagtatgccgcagtcac acccgaatctttcgtcgactacggagcgactcgtatcgagacgggcttgaattgactcct catggattaggctgaggtcaaccttcgcatggagcctgggcatttaaaggtcgactgtcg

dna_txt = open("dna1.txt")
dna_txtcontents = dna_txt.read()
aa_count = dna_txtcontents.count("aa")
print str(aa_count)

然后为每一对继续,然后将每个单独的计数存储在一个新的文本文件中,但是我如何通过使用列表和循环来计算每对的出现次数,然后将计数存储在一个新的文本文件中,从而使自己更容易?哦,还要确保无论序列是大写还是小写,程序都能正常工作?

谢谢!!

【问题讨论】:

  • aa_count = dna_txtcontents("AA") 会抛出错误。您是在声称此代码有效,还是说这就是您对列表的处理方式?
  • 对不起,我的意思是在最后添加 .count ,但是这是可行的,但这是长版本。对我将如何做同样的事情但列表和循环而不是列表和循环感到困惑?
  • 我不是生物学家,ACTG 的所有可能对都可能吗?还是只能AT配对,和GC
  • 的DNA文本文件包含的DNA序列例如:>随机序列ctacgataaccatccatgacatcgaaggctgcagcctatgaagcattgggcgtttactgg acatggggtgaaagtgggtgcagttcaaagagttgttttttgctgtccgaccgactggag由核苷酸对agtgatccgatacgccaagggcttcattacgggtaagaacatttggtatattaatgtaat aagccgttcggtgggtgtca,我的意思是多少AA的,交流的,CA的等等都在一个序列中,如这一个?
  • 为确保程序适用于小写和大写,您可以编写dna_txtcontents = dna_txt.read().upper(),这样所有字母都变为大写。

标签: python dna-sequence


【解决方案1】:

您可以使用itertools.product 创建所有二核苷酸对。要使其不区分大小写,请将所有内容都转换为小写(或大写)。

import itertools

with open("dna1.txt") as dna_txt:
    dna_txtcontents = dna_txt.read().upper()

nt_pair_counts = {}
for nt_pair in itertools.product('ACTG', repeat=2):
    nt_pair = "".join(nt_pair)
    nt_pair_counts[nt_pair] = dna_txtcontents.count(nt_pair)

with open("out.txt", "wt", encoding="utf-8") as fd:
    for nt, count in nt_pair_counts.items():
        print(nt, count, sep="\t", file=fd)

【讨论】:

  • 这就是我在上面的评论中得到的:我相信唯一有效的核苷酸对是 AA, AT, TT, TA, CC, CG, GG, GC,即只有 AT 可以配对(彼此和他们自己),GC 也是如此。
  • 是的,从生物学上讲,腺苷 (A) 仅与胸苷 (T) 形成碱基对,而鸟苷 (G) 仅与胞嘧啶 (C) 形成碱基对。然而,我将这个问题解释为文件中有一个 DNA 序列,并且计算序列AAAT 等出现的频率很有趣。二核苷酸序列的数量有时会揭示生物学功能,例如CpG海岛。
  • 当然,我只是想指出itertools.product("ACTG", repeat=2) 产生了一堆永远不会出现的额外对(假设 DAN 序列是有效的)。对于很长的序列,运行例如 seq.count("AG") 是一种浪费。
  • 我不确定我是否在关注你 ddejohn。以下是来自GRIN2D gene 的前几个核苷酸:GGGACAGGGGATGCAGG。很明显,序列AG 从第六个核苷酸开始出现,即使 A 不与 G 形成碱基对。
  • 啊,我误会了。我的印象是,如果A 不能与G 形成碱基对,那么该特定对就不会出现在序列中。再说一遍,我不是生物学家!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多