用scikit计算不同的字母K-mers学习

时间:2014-03-31 15:33:10

标签: python scikit-learn bioinformatics biopython feature-extraction

我正致力于从蛋白质序列中提取不同氨基酸字母的频率。  我也在研究字母表的不同“缩小”表示(I.E,而不是20个字母,我希望有些字母相当于[K],[R] - > [KR]等等。

有效的方法是:1)从蛋白质序列中提取不同k聚体的频率计数(IE,序列长度为1,2,3的重叠计数),最好使用内置的scikit学习工具(如计数器等)? (我可以自己生成可能的组合,并从字符串中计算它,但这是非常低效的,我不想在我的管道中使用scikit学习工具,但这些工具用于单词,而不是单个长字中的多个字母..)

2)对于不同的字母表,是否有一种有效的方法来获取k-mer字母数/频率,使用scikit的countVectorizer等? (I.E,将转换表提供给方法,并直接获得简化库的2-mer频率,而不是自己为每个序列无效地重新计算可能的组合及其频率。)

维护订单等也很重要,因为我需要在结尾处获得功能“名称”(用于将输出附加为功能列的名称)。 非常感谢你!

1 个答案:

答案 0 :(得分:1)

你想要一个列表/字典,每个"字"在你的蛋白质。让我们假设您有以下蛋白质:

prot_1 = "mklfgsmhee"
prot_2 = "heelyiggis"

你想要一个返回长度为n的所有单词的函数,如下所示:

>>> words_prot_1 = wording(prot_1, 3)
>>> print words_prot_1
["mkl", "klf", "lfg", "fgs", "gsm", "smh", "mhe", "hee"]
>>> words_prot_2 = wording(prot_1, 3)
>>> print words_prot_2
["hee", "eel", "ely", "lyi", "yig", "igg", "ggi", "gis"]

循环你的蛋白质,创建一个字典或这样的列表:

kmers_3 = ["mkl", "klf", "lfg", "fgs", "gsm", "smh", "mhe", "hee",
           "eel", "ely", "lyi", "yig", "igg", "ggi", "gis"]

(注意重复的术语"嘻嘻"只有一次,这可以通过set(list)或在词典中插入键轻松完成。现在可以使用word_prot_1CountVectorizer添加到str.join()伪造文本。cv = CountVectorizer(vocabulary=kmers_3) cv.fit_transform(" ".join(words_prot_1)).toarray() 。类似的东西:

{{1}}