不清楚python 数据结构和解析python
unclear python data structure and parse python
我有一个小数据集,我用它来获取 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'
在你的例子中,你有一个元组列表。
要访问每个列表的第一个元素,您只需执行以下操作:
list[0]
因为列表包含元组,所以它将 return 完整的元组。
然后一旦你得到你的元组,你就可以将前两个值作为:
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'
看起来像 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.
在我看来它们是元组列表。
[] 表示列表
()表示元组(只读列表)
实现您所要求的最简单方法是将列表中的项目编入索引,如下所示:
# 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]
我怀疑您可以使用更好的命名策略,但我对生物学的了解还不够多,无法在该部门为您提供帮助。
如果您确实希望将它们存储在名为 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'
这应该可以回答您的上述问题并满足上述要求。
有些改进是可能的,您可以随时提出要求;-)
我有一个小数据集,我用它来获取 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'
在你的例子中,你有一个元组列表。
要访问每个列表的第一个元素,您只需执行以下操作:
list[0]
因为列表包含元组,所以它将 return 完整的元组。
然后一旦你得到你的元组,你就可以将前两个值作为:
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'
看起来像 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.
在我看来它们是元组列表。
[] 表示列表
()表示元组(只读列表)
实现您所要求的最简单方法是将列表中的项目编入索引,如下所示:
# 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]
我怀疑您可以使用更好的命名策略,但我对生物学的了解还不够多,无法在该部门为您提供帮助。
如果您确实希望将它们存储在名为 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'
这应该可以回答您的上述问题并满足上述要求。
有些改进是可能的,您可以随时提出要求;-)