如何选择数据的最佳匹配模式(单倍型)?Python 2.7版

2024-10-01 02:23:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的实习做一个药物遗传学分析。 对于这个剖析器,我需要确定患者最可能的单倍型。 到目前为止我所拥有的:

数据库中的单倍型定义,包含以下内容:

  • 单倍型名称
  • 组成单倍型的等位基因/单核苷酸多态性列表
  • *单独-每个等位基因/单核苷酸多态性的位置(染色体、起始点、终止点)

看起来有点像:

...
['UGT1A1*16', 'T;A;T;C;G;A;G;C']
['UGT1A1*17', 'T;A;T;C>T;G;A;G;C']
...

每个等位基因(例如每个A、T、C或g)的位置如下: [6, 18130687, 18130687]表示[chromosome, start, stop],例如C>G表示参考位置是C,但是这个单倍型定义的区别是它是G而不是C

然后我检查了所有这些位置,看看病人在这些位置有哪些等位基因。由于一个人在每个位置都有两个等位基因,我得到如下结果:

UGT1A1 = ['T-T', 'A-A', 'T-T', 'C-T', 'C-G', 'A-A', 'G-G','C-C']

格式为:'<allele_1>-<allele_2>'等位基因1和等位基因2可以互换。(我不知道哪些等位基因属于同一类,因为我没有分阶段信息)

现在我需要以最理想的方式匹配我在病人身上观察到的等位基因。每对中的每一个等位基因都必须使用,而且每对只能使用一次。在我的例子中,我在第4对和第5对中有不同的等位基因'C-T' and 'C-G',因此可以创建4种不同的单倍型,如:

[T, A, T, C, C, A, G, C]
[T, A, T, C, G, A, G, C]
[T, A, T, T, C, A, G, C]
[T, A, T, T, G, A, G, C] <-- the same as UGT1A1*17

假设我现在选择一组等位基因是TATTGAGC,另一组必须是TATCCAGC。第一个与UGT1A1*17的单倍型相同,但另一个只有8个等位基因中的7个与任何其他单倍型重叠。 实际的数据集要大得多,单倍型等位基因长度可以超过200个等位基因,加上有10到100个不同的定义,最后但并非最不重要的是,有大约60个不同的基因(每一个都有这些单倍型定义)。你知道吗

那么,有没有一种有效的方法来获得组成单倍型的所有等位基因组合,同时允许最少的错配?你知道吗

如何做到这一点的提示是受欢迎的,如在;使用dicts的方式像。。。或者将某些信息转储到sql数据库中(以便在处理数据时节省内存)或其他类似的内容。你知道吗

谢谢你花时间通读这一切!你知道吗


Tags: 数据名称患者信息数据库定义方式遗传学
2条回答

现在还不完全清楚你在问什么,但希望这能让你走上正轨。你知道吗

the comment by e.s上展开,但是使用帮助函数使代码更清晰,生成所有单倍型的方法是:

from itertools import product

alleles = ['T-T', 'A-A', 'T-T', 'C-T', 'C-G', 'A-A', 'G-G','C-C']

def normalize(pair):
    a, b = pair.split('-')
    if a == b:
        return a
    else:
        return a + b

normalized_alleles = [normalize(pair) for pair in alleles]
for haplotype in product(*normalized_alleles):
    print(haplotype)

这张照片:

('T', 'A', 'T', 'C', 'C', 'A', 'G', 'C')
('T', 'A', 'T', 'C', 'G', 'A', 'G', 'C')
('T', 'A', 'T', 'T', 'C', 'A', 'G', 'C')
('T', 'A', 'T', 'T', 'G', 'A', 'G', 'C') 

不清楚你所说的“以最少的错配获得构成单倍型的所有等位基因组合”是什么意思,所以我不知道这是不是最有效的方法。你知道吗

我不能给你一个完整的解决方案,但这里是我将采取的步骤来解决这一问题的概述:

大多数人都在建议如何创造所有可能的等位基因组合,但这并不能真正帮助你找出哪些单倍型最适合你的等位基因。我的建议是列出所有可能的参考单倍型对,然后将你的等位基因映射到这些对中的每一对,然后选择最好的一对。应该很容易通过SNP并根据该位置有多少等位基因与一对单倍型匹配来分配分数,也就是说,如果两个单倍型在一个位置都有A,则A/A将与两者匹配,而A/C将只与一个匹配。每个单倍型对的SNPs总和,取得分最高的一对,就完成了。你知道吗

相关问题 更多 >