通过 blast 结果查看 测序数据fastq是否被污染,以及污染reads所属物种、所占比例

由于NGS测序时混库的原因,我们得到的数据有被其他物种污染的可能,所以当我们拿到测序数据时,如何确定我们的数据是否被污染呢?
下面我们通过blast的结果,来检查测序数据fastq 是否被污染,以及污染来源、所占比例。

1.下载blast

版本地址:ftp://ftp.ncbi.nlm.nih.gov/blast/executables/LATEST/
blast使用手册《BLAST Command Line Applications User Manual》

wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.10.0+-x64-linux.tar.gz

下载完成后解压

2.下载blast 所需数据库

下载blast的数据库,nt为核酸数据库,nr为蛋白质数据库

2.1 在NCBI官网下载

进入NCBI官网:https://www.ncbi.nlm.nih.gov/
在这里插入图片描述
在这里插入图片描述

这里这些 nt.xx.tar.gz 就是需要下载的 nt 库啦
在这里插入图片描述

2.2 直接使用blast的脚本下载

https://www.ncbi.nlm.nih.gov/books/NBK537770/

update_blastdb.pl --decompress nr [*]
update_blastdb.pl --decompress nt [*]

在这里插入图片描述
不过第二种方式下载的比较慢,因为他是串联下载的,还容易断掉,所以个人感觉还是用第一种方法直接wget的好,只需要把 nt.xx.tar.gz 中间的xx编号更换,就可以批量下载了。

wget ftp://ftp.ncbi.nlm.nih.gov/blast/db/nt.00.tar.gz

下载完成后,将 nt.xx.tar.gz 解压即可

tar zxvf nt.xx.tar.gz

3. NCBI Taxonomy 数据库下载

Taxonomy :数据库中,我们可以知道所有生物的分类和命名。
在这里插入图片描述

wget -c https://ftp.ncbi.nlm.nih.gov/pub/taxonomy/accession2taxid/nucl_gb.accession2taxid.gz
wget -c https://ftp.ncbi.nlm.nih.gov/pub/taxonomy/taxdump.tar.gz

下载完成后解压。

nucl_gb.accession2taxid 数据库格式如下:
在这里插入图片描述
第一列Accession : 序列标识码
第一列Accession.version : 带版本号的序列标识码
第三列: 序列的taxid 号,即物种分类号。如 Homo sapiens 的是9606.
第四列:序列的gi号

这个文件比较大,我们后边只用三四列信息,所以可以把这个库处理一下,只留下第3,4列。

cut -f 3,4 nucl_gb.accession2taxid > cutted_nucl_gb.accession2taxid

taxdump.tar.gz 解压后会有7个库,我们用 names.dmp ,其中包含物种的taxid号与物种学名。对应的格式如下:
在这里插入图片描述
第1列为 物种的taxid号。
第2列为物种名称。
我们后面会选择scientific name 对应的物种学名。

ok,到此,我们所需的所有数据库(nt ,nucl_gb.accession2taxid ,names.dmp )都准备好了。下面需要得到blast结果~

4 fastq文件前处理

从fastq中抽取序列,保存为fasta格式。我们这里从fq文件中提取20000行,也就是5000条reads。

zcat myfile.fastq.gz | head -n 20000 | awk '{if(NR%4==1){print ">"$1}else if(NR%4==2){print $0}}'|sed 's/@//g' > myfile.fa

5 对抽取序列进行blast

./blastn -query myfile.fa -out out.xml -max_target_seqs 1 -outfmt 5 -db database_dir/nt -num_threads 2 -evalue 1e-5

需要注意的是-db 不能只写到存放nt库的目录这一级,后面需要加上库的类型,这里使用的nt库,所以加上nt。 输出结果文件类型选择的 -outfmt 5 , 也就是XML格式的结果文件,因为这种结果信息比较全。XML文件的格式内容有时间再补充。

6 从XML结果文件提取gi号

提取的信息包括:

Iteration_query-def:reads id
Hit_id : 匹配序列的 id ,信息中包括gi号
Hit_def : 匹配序列物种信息

# -*- coding:utf-8 -*-
import re
from collections import defaultdict

xmlfile=open("blast_result.xml","r")
outfile=open("tiqu_gi.txt","w")

dict1=defaultdict(list)
for lines in xmlfile:
	line=lines.strip()
	read_id = re.match('<Iteration_query-def>.*</Iteration_query-def>',line)
	Hit_id = re.match('<Hit_id>.*</Hit_id>',line)
	Hit_def = re.match('<Hit_def>.*</Hit_def>',line)
	
	if read_id !=None:
		read_id=read_id.group()
		read_id = read_id.split("<")[1].split(">")[1]
		key=read_id

	elif Hit_id !=None:
		Hit_id = Hit_id.group()
		Hit_id = Hit_id.split("<")[1].split(">")[1]
		dict1[key].append(Hit_id)

	elif Hit_def !=None:
		Hit_def = Hit_def.group()
		Hit_def = Hit_def.split("<")[1].split(">")[1]
		dict1[key].append(Hit_def)

for key in dict1:
	outfile.write(key + "\t" + "\t".join(dict1[key])+"\n")

这样得到的处理文件如下:
共3列,TAB分割,第一列reads id,;第二例 gi号信息;第三列 物种信息。
在这里插入图片描述
此时的物种信息列,字段是不整齐的,如Homo sapiens ,虽然都是Homo sapiens,但是字段很不一致,不利于统计,所以需要进行学名统一。
逻辑就是从blast结果中得到gi号,通过gi号得到taxid ,通过taxid 得到物种学名。

# -*- coding:utf-8 -*-

tiqu_gi = open("tiqu_gi.txt","r")
gi2taxid = open("cutted_nucl_gb.accession2taxid","r")
taxid2name = open("names.dmp","r")
get_name = open("scientific_name.txt","w")

taxid_name_dict={}
for lines in taxid2name:
	if "scientific name" in lines:
		line = lines.strip().split("|")
		taxid = line[0].strip()
		name = line[1].strip()
		taxid_name_dict[taxid]=name
		
tiqu_dict=defaultdict(list)
for lines in tiqu_gi:
	line = lines.strip().split("\t")
	gi = line[1].split("|")[1]
	tiqu_dict[gi].append("\t".join(line))


gi_taxid_dict={}
for lines in gi2taxid:
	line = lines.strip().split("\t")
	GI = line[1]
	taxid = line[0]
	gi_taxid_dict[GI]=taxid

jiaoji=set(tiqu_dict.keys())&set(gi_taxid_dict.keys())

tax_list=taxid_name_dict.keys()

#tiqu_gi = open("result.txt","r")
tiqu_gi = open("tiqu_gi.txt","r")
for lines in tiqu_gi:
	line = lines.strip().split("\t")
	gi = line[1].split("|")[1]
	if gi in jiaoji:
		taxid=gi_taxid_dict[gi]
		if taxid in tax_list:
			get_name.write("\t".join(line)+"\t"+taxid_name_dict[taxid]+"\n")



结果文件共4列,最后一列为匹配得到的物种学名。
在这里插入图片描述
下面在进行各个物种reads在所有抽取reads中所占比例即可。

# -*- coding:utf-8 -*-
from collections import Counter

scientific_name=open("scientific_name.txt","r")
final_result =open("final_result.txt","w")

name_list_all=[]
for lines in scientific_name:
	line = lines.strip().split("\t")
	name = line[-1]
	name_list_all.append(name)

count_result = Counter(name_list_all)
count_list = count_result.items()
count_list.sort(key=lambda x:x[1],reverse=True)

final_result.write("Name\tHit_reads\tpercentage1\tpercentage2\n")
for i in count_list:
	name = i[0]
	number = i[1]
	reads_num = 5000
	percentage1 = "%.2f%%"%(100*float(number)/float(reads_num))
	percentage2 ="%.2f%%"%(100*float(number)/float(len(name_list_all)))
	final_result.write(name+"\t"+str(number)+"\t"+str(percentage1)+"\t"+str(percentage2)+"\n")

结果文件如下,排在前三个的 Hit 分别是 Homo sapiens ; eukaryotic synthetic construct ; Gorilla gorilla gorilla . 以及Hit在5000条reads所占比例(percentage1), 在所有Hit中所占比例(percentage2)。在这里插入图片描述

这样我们就可以知道我们数据匹配物种情况啦~
限于个人编程水平,脚本肯定有更好的方法,如有错误还请拍砖~

  • 15
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论
### 回答1: 要查看BLAST(Basic Local Alignment Search Tool)的结果,您需要按照以下步骤进行操作: 1. 打开您的BLAST搜索结果页面,您将看到一张表格,其中包含有关您的查询序列和匹配序列的信息。 2. 在结果页面上,您将看到有关每个匹配的统计信息,例如匹配的得分、匹配的长度、匹配的相似性和匹配的标识性等。 3. 您还可以查看比对的序列。通常,您将看到在匹配序列和查询序列之间的线性比对,其中相同的氨基酸或核苷酸用相同的颜色进行突出显示。 4. 如果您需要下载结果,请查看结果页面上的下载选项,并选择您需要下载的文件格式。 5. 您还可以根据需要对结果进行过滤和排序。例如,您可以按照匹配得分、匹配长度或匹配的相似性对结果进行排序,以便更轻松地查找与您的查询序列最相似的匹配。 希望这可以帮助您查看和理解BLAST的搜索结果! ### 回答2: 在使用BLAST(基本局部序列比对搜索工具)后,可以通过多种方法查看结果。 首先,BLAST提供了网页界面,可以通过输入查询序列后点击搜索按钮,BLAST会运行并生成搜索结果页面。在网页结果中,可以看到多个信息栏,包括查询序列、匹配到的序列、比对得分、比对长度、相似性等。用户可以通过点击查询序列名或更多详细信息的链接来进一步查看每个匹配结果的详细信息。 另外,BLAST还提供了命令行接口,它允许用户通过使用命令行参数运行BLAST并将结果保存在输出文件中。用户可以指定输出格式为文本(例如CSV或XML),然后通过打开输出文件来查看结果。此外,一些BLAST程序还支持直接在终端显示结果。 除了BLAST自带的界面和命令行接口外,还有一些第三方工具可用于可视化和解释BLAST结果。例如,NCBI的BLAST在线工具提供了交互性更强、更直观的结果浏览功能。另外,也有一些开源软件如BioPython库和Bioconductor包可用于处理和分析BLAST结果。 总之,查看BLAST结果可以通过BLAST的网页界面、命令行接口、第三方工具等多种方式实现。用户可以根据自己的需求和偏好选择合适的方法来查看和解释BLAST结果。 ### 回答3: 要查看BLAST(Basic Local Alignment Search Tool)的结果,可以按照以下步骤进行。 首先,你需要进行BLAST分析并获得结果。这可以通过在NCBI(National Center for Biotechnology Information)网站上使用BLAST工具来完成。在网站上选择适当的BLAST程序(如BLASTn用于核酸序列比对,BLASTp用于蛋白质序列比对等)并将你的查询序列输入到相应的框中。设置好参数,例如数据库选择和期望得分阈值等。 提交查询后,BLAST会开始运行分析,并显示一个结果页面。你可以在结果页面上找到各种信息。 首先,你会看到一个总览,其中包含查询序列的信息,匹配到的序列数量以及最佳匹配的序列。这可以让你了解到BLAST的总体情况。 下一部分是比对结果表格,其中列出了匹配到的序列及其相关信息。这些信息通常包括序列的名称、匹配到的区域长度、匹配的分数以及比对的相似性等。你可以通过点击每个序列的链接来查看详细的比对结果。 在比对结果中,你还可以查看图形化的比对图。这些图可以帮助你更直观地了解查询序列和目标序列的比对情况。 此外,还可以在结果页面上使用筛选和排序功能来定制显示的结果。例如,你可以按照分数降序排列结果,或根据特定的匹配特征进行筛选。 最后,你可以下载或保存结果以便后续分析。BLAST结果通常以文本文件或HTML格式提供,你可以将其保存到本地计算机。 总的来说,在BLAST结果页面上你可以找到关于查询序列匹配的详细信息,包括匹配的序列和其相关特征。你可以进一步分析这些信息,以了解与查询序列相似或相关的其他序列。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风风是超人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值