我正在运行BLAST,并希望使用BLAST + 6格式处理输出。
例如,我想获取每个匹配的E值,查询覆盖率和身份,然后将它们插入一个方程式中,该方程式将三者均权重为一个“分数”。然后,我想将所有比分都放到一张桌子中,这样我就可以通过降低“得分”来对每个匹配进行排序。
我还想为数据库中的每个BLAST命中生成一个ORF,并将它们添加到表中的相应位置。
有人可以指出我可以搜索的任何资源/关键字,以了解如何处理表格数据吗?
示例:
blastn -query genes.fasta -subject genome.fasta -outfmt "6 qseqid pident qcovs evalue"
输出:
qseqid pident qcovs evalue
0 moaC 100.00 0.0 161.0
1 moaC 99.38 1.0 161.0
我想从每一列中获取值并将它们用作方程式中的变量,然后在相应的行中打印该值。我将对blast使用bash脚本或BioPython,因此我想将数据处理作为其中的一部分
而不是该示例的解决方案,我想看看是否有可以了解该主题的资源(到现在为止,我将使用电子表格程序来处理表格数据)
对于使用表格数据,我真的建议使用pandas。
首先,您要将输出转换为pandas DataFrame
,这是一种非常适合存储表格形式数据的数据结构。
对于此示例,我正在使用pandas DataFrame
和示例文件tblastn
和four_human_proteins.fasta
。
four_human_proteins.fasta
首先,我们要告诉rhodopsin_nucs.fasta
哪些列包含rhodopsin_nucs.fasta
。
>>> import pandas as pd
>>> from Bio.Blast.Applications import NcbiblastnCommandline
>>> cline = NcbiblastnCommandline(cmd='/path/to/BLAST+/2.8.1/bin/tblastn',
query='four_human_proteins.fasta',
subject='rhodopsin_nucs.fasta',
evalue='1e-10',
outfmt='"6 qseqid pident qcovs evalue"')
>>> print(cline)
/path/to/BLAST+/2.8.1/bin/tblastn -outfmt "6 qseqid pident qcovs evalue" -query four_human_proteins.fasta -evalue 1e-10 -subject rhodopsin_nucs.fasta
>>> blast_output = cline()[0].strip()
>>> print(blast_output)
sp|P08100|OPSD_HUMAN 96.552 100 0.0
sp|P08100|OPSD_HUMAN 93.391 100 0.0
sp|P08100|OPSD_HUMAN 95.092 94 0.0
sp|P08100|OPSD_HUMAN 84.795 98 0.0
sp|P08100|OPSD_HUMAN 82.164 98 0.0
sp|P08100|OPSD_HUMAN 96.396 89 2.65e-67
sp|P08100|OPSD_HUMAN 92.308 89 7.50e-36
sp|P08100|OPSD_HUMAN 93.220 89 1.81e-32
sp|P08100|OPSD_HUMAN 96.296 89 6.37e-32
sp|P08100|OPSD_HUMAN 88.462 89 4.64e-12
>>> headers = ['qseqid', 'pident', 'qcovs', 'evalue']
>>> rows = [line.split() for line in blast_output.splitlines()]
>>> df = pd.DataFrame(rows, columns=headers)
>>> print(df)
qseqid pident qcovs evalue
0 sp|P08100|OPSD_HUMAN 96.552 100 0.0
1 sp|P08100|OPSD_HUMAN 93.391 100 0.0
2 sp|P08100|OPSD_HUMAN 95.092 94 0.0
3 sp|P08100|OPSD_HUMAN 84.795 98 0.0
4 sp|P08100|OPSD_HUMAN 82.164 98 0.0
5 sp|P08100|OPSD_HUMAN 96.396 89 2.65e-67
6 sp|P08100|OPSD_HUMAN 92.308 89 7.50e-36
7 sp|P08100|OPSD_HUMAN 93.220 89 1.81e-32
8 sp|P08100|OPSD_HUMAN 96.296 89 6.37e-32
9 sp|P08100|OPSD_HUMAN 88.462 89 4.64e-12
现在现在可以轻松地对此DataFrame pandas
执行按列的操作。定义得分函数,并将结果添加为额外的列:
float
并且您可以通过此>>> convert = {'pident': float,
'qcovs': float,
'evalue': float,
'qseqid': str}
>>> df = df.astype(convert)
列轻松地对DataFrame进行排序
df