我有一个小数据集,用于通过BioPython的pairwise2模块获得全局对齐结果。到目前为止,我已经得到了对齐和得分结果,现在我对结果的结构以及如何解析它们有疑问
下面是我的代码:
import pandas as pd
from Bio import pairwise2
from Bio.SubsMat import MatrixInfo as matlist
matrix = matlist.blosum62
match = 5
mismatch = -4
gap_open = -10
gap_extend = -0.5
df = {'ID': ['H576','H577','H578'],
'CD': ['GCACGCATAAGTAGT', 'GCGAGGGGGGCTTC', 'GCGAGAGATCGGG']}
df = pd.DataFrame(df)
dictionary = df.set_index('ID')['CD'].to_dict()
seq = dictionary.get('H576')
for seq0 in df.CD:
alns = pairwise2.align.globalms(seq, seq0, match, mismatch, gap_open, gap_extend)
print(alns)
结果:
[('GCACGCATAAGTAGT', 'GCACGCATAAGTAGT', 75, 0, 15)]
[('GCACGCATAAGTAGT-----', 'GCG------AGGGGGGCTTC', -15.5, 0, 20), ('GCACGCATAAGTAGT-----', 'GC------GAGGGGGGCTTC', -15.5, 0, 20)], ....]
[('GCA------CGCATAAGTAGT', 'GCGAGAGATCG--------GG', -9.0, 0, 21), ('GC------ACGCATAAGTAGT', 'GCGAGAGATCG--------GG', -9.0, 0, 21)]GGGGGC--------TTCAGAGAGTTATAGGCTGTTTGACTAC', 'GTGAGAGATGCGCCGCGTATTC---GA-----AGCTTCTTTGACTAC', 55.5, 0, 47)],....]
我的问题:
显然,结果包含3个主要集合,但上面的结果是什么数据结构?套?元组?集和元组?
我只想查看每组中的第一组项目:
('GCACGCATAAGTAGT', 'GCACGCATAAGTAGT', 75, 0, 15)
('GCACGCATAAGTAGT-----', 'GCG------AGGGGGGCTTC', -15.5, 0, 20)
('GCA------CGCATAAGTAGT', 'GCGAGAGATCG--------GG', -9.0, 0, 21)
然后在循环中,将每个集合的第一个序列指定为seq0,将每个seq的第二个序列指定为seq1,然后我将对它们执行某些操作:
所以对于第一集:
seq0 = 'GCACGCATAAGTAGT'
seq1 = 'GCACGCATAAGTAGT'
第二集:
seq0 = 'GCACGCATAAGTAGT-----'
seq1 = 'GCG------AGGGGGGCTTC'
第三集:
seq0 = 'GCA------CGCATAAGTAGT'
seq1 = 'GCGAGAGATCG--------GG'
答案 0 :(得分:2)
在我看来,它们是元组列表。
[]表示列表
()表示元组(只读列表)
实现所要求的最简单方法是将项目从列表中索引,如下所示:
# Renamed seq0 so it doesn't interfere with below variable
for sequence0 in df.CD:
alns = pairwise2.align.globalms(seq, sequence0, match, mismatch, gap_open, gap_extend)
# This is how you would get the first group of items from each tuple
first_group_of_items = alns[0]
# Now to get the seq variables you asked for
# Since this variable is seq0, the above seq0 was renamed
seq0 = first_group_of_items[0]
seq1 = first_group_of_items[1]
我怀疑您可以使用更好的命名策略,但我对生物学知识不足以帮助您进入该部门。
答案 1 :(得分:1)
在你的情况下,你有一个元组列表。
要访问每个列表的第一个元素,您可以这样做:
list[0]
因为列表包含元组,所以它将返回完整的元组。
然后,一旦你得到你的元组,你可以将前两个值取为:
seq0 = tuple[0]
seq1 = tuple[1]
如果您不想存储中间价值,可以直接执行:
seq0 = list[0][0]
seq1 = list[0][1]
我希望它有所帮助。祝你今天愉快。
添加到示例中:
In [16]: A = [('GCACGCATAAGTAGT', 'GCACGCATAAGTAGT', 75, 0, 15)]
In [17]: A[0]
Out[17]: ('GCACGCATAAGTAGT', 'GCACGCATAAGTAGT', 75, 0, 15)
In [18]: A[0][0]
Out[18]: 'GCACGCATAAGTAGT'
In [19]: A[0][1]
Out[19]: 'GCACGCATAAGTAGT'
答案 2 :(得分:1)
看起来像list
()的tuples
[] 。
如果您确定要保留第一个,请保留第一个:
sequences = []
for seq0 in df.CD:
alns = pairwise2.align.globalms(seq, seq0, match, mismatch, gap_open, gap_extend)
sequences.append(alns[0])
这样你就会得到:
sequences == [('GCACGCATAAGTAGT', 'GCACGCATAAGTAGT', 75, 0, 15),
('GCACGCATAAGTAGT-----', 'GCG------AGGGGGGCTTC', -15.5, 0, 20),
('GCA------CGCATAAGTAGT', 'GCGAGAGATCG--------GG', -9.0, 0, 21)]
你需要的是什么,然后用它们做点什么,只需遍历列表:
for seq1, seq2, *rest in sequences:
# Do the job with seq1 and seq2...
如果您关心这三个值(并知道它们的含义),您应该正确命名它们,而不是像我一样:
for seq1, seq2, name, this, properly in sequences:
# Do the job with seq1, seq2, name, this, and properly.
答案 3 :(得分:1)
如果你真的希望它们存储在名为seq0
和seq1
的变量中(我们会在问题中忽略程序中alns
内容/输出的无效样本显示:
#! /usr/bin/env python
from __future__ import print_function
alns_seq = (
[('GCACGCATAAGTAGT', 'GCACGCATAAGTAGT', 75, 0, 15)],
[('GCACGCATAAGTAGT-----', 'GCG------AGGGGGGCTTC', -15.5, 0, 20),
('GCACGCATAAGTAGT-----', 'GC------GAGGGGGGCTTC', -15.5, 0, 20)],
[('GCA------CGCATAAGTAGT', 'GCGAGAGATCG--------GG', -9.0, 0, 21),
('GC------ACGCATAAGTAGT', 'GCGAGAGATCG--------GG', -9.0, 0, 21)]
)
for i, alns in enumerate(alns_seq, start=1):
seq0, seq1 = alns[0][:2]
print("Set No. %d:" % (i,))
print(" seq0 = '%s'" % (seq0,))
print(" seq1 = '%s'" % (seq1,))
的产率:
Set No. 1:
seq0 = 'GCACGCATAAGTAGT'
seq1 = 'GCACGCATAAGTAGT'
Set No. 2:
seq0 = 'GCACGCATAAGTAGT-----'
seq1 = 'GCG------AGGGGGGCTTC'
Set No. 3:
seq0 = 'GCA------CGCATAAGTAGT'
seq1 = 'GCGAGAGATCG--------GG'
这应该回答您的上述问题并满足上述要求。
可以进行一些改进,您可以随时索取; - )