【问题标题】:create list of organisms based on pattern matching of sequence to a genome根据序列与基因组的模式匹配创建生物体列表
【发布时间】:2021-07-15 22:56:49
【问题描述】:

我有一个包含两列的数据框,第一列是生物的名称,第二列是一串字母的序列。我正在尝试创建一个算法来查看生物体的序列是否位于一个更大的基因组字符串中,该基因组也由字母组成。如果它在基因组中,我想将生物体的名称添加到列表中。因此,例如,如果流感在下面的基因组中,我希望将流感添加到列表中。

dict_1={'organisms':['flu', 'cold', 'stomach bug'], 'seq_list':['HTIDIJEKODKDMRM', 
'AGGTTTEFGFGEERDDTER', 'EGHDGGEDCGRDSGRDCFD']}
df=pd.DataFrame(dict_1)

     organisms             seq_list
0          flu      HTIDIJEKODKDMRM
1         cold  AGGTTTEFGFGEERDDTER
2  stomach bug  EGHDGGEDCGRDSGRDCFD

genome='TLTPSRDMEDHTIDIJEKODKDMRM'

如果存在其中 p 是有机体而 t 是基因组的匹配索引,则第一个函数会找到匹配的索引。第二部分是我遇到麻烦的部分。我正在尝试使用 for 循环来搜索 df 中的每个条目,但是如果我得到匹配项,我不确定如何引用 df 中的第一列以将名称添加到空列表中。感谢您的帮助!

def naive(p, t):
occurences = []
for i in range(len(t) - len(p) + 1):
    match = True
    for j in range(len(p)):
        if t[i+j] != p[j]:
            match = False
            break
    if match:
        occurences.append(i)
return occurences


Organisms_that_matched = []
for x in df:
   matches=naive(genome, x)
   if len(matches) > 0:
      #add name of organism to Organisms_that_matched list

【问题讨论】:

    标签: python design-patterns sequence matching genome


    【解决方案1】:

    我不确定您是否正在了解在列表中横向和应用自定义逻辑的不同方法,但您可以使用list comprehensions

    import pandas as pd
    
    dict_1 = {
        'organisms': ['flu', 'cold', 'stomach bug'],
        'seq_list':  ['HTIDIJEKODKDMRM', 'AGGTTTEFGFGEERDDTER', 'EGHDGGEDCGRDSGRDCFD']}
    df = pd.DataFrame(dict_1)
    genome = 'TLTPSRDMEDHTIDIJEKODKDMRM'
    
    organisms_that_matched = [dict_1['organisms'][index] for index, x in enumerate(dict_1['seq_list']) if x in genome]
    
    print(organisms_that_matched)
    

    【讨论】:

    • 您好 Rorra,我用一组不同的数据尝试了您的解决方案,但由于某种原因,我的 x 值报告为 Nonetype。如果我通过数据框只使用 x 进行 for 循环,则 x 的值打印得很好。对这个问题有什么建议吗?
    • @juiser12 更新问题,分享数据框(如果是大文件,你可以使用 github 的 gists)然后我可以查看它
    • 谢谢你。
    猜你喜欢
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2021-03-28
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多