本地BLAST的使用方法及基本操作步骤

文章目录

  • BLAST+程序下载与安装
  • 基因组数据下载
  • 制作数据库
  • BLAST
  • 叮!


BLAST+程序下载与安装

  • BLAST+安装包下载地址:ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
  • 根据自己的系统选择不同的安装包,若是windows则直接下载win64.exe版本,按常规软件安装步骤安装即可,但是注意安装时要选择将软件路径加到环境变量中。
  • 若是ubuntu系统,可以直接输入 apt-get install ncbi-blast+ ,但这种方法下的不是最新版。
  • 若是想要体验最新版,也可以下载最新版安装包进行安装。网上能找到安装教程如link.(注意将Blast+设置到环境变量中,以利于后续使用)。

基因组数据下载

  • 首先要找到自己BLAST所要用到的目标基因组,可以在如下链接找到各种分类的物种基因组信息https://www.ncbi.nlm.nih.gov/genome/browse#!/overview/
  • 根据其中的分类找到自己需要的,并且下载对应的索引文件,这些在网页上都是能轻松操作的哈。我就是直接下载了prokaryotes.csv的文件,其中包含了ncbi已记录的原核生物的基因组信息。
  • 根据下载的索引文件获取基因组下载链接。索引文件中的GenBank FTP或者RefSeq FTP记录了基因组文件的存放位置,对这两列的地址进行处理即可。如Escherichia coli O157:H7 str. SakaiGenBank FTP为:
    ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/000/008/865/GCA_000008865.2_ASM886v2
    打开这个链接可知其基因组链接为:ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/000/008/865/GCA_000008865.2_ASM886v2/GCA_000008865.2_ASM886v2_genomic.fna.gz
    可以发现FTP中的最后一项重复一次再加上_genomic.fna.gz即为基因组文件即**.fna**文件的链接,因此使用编程软件获得所有基因组链接便轻而易举。获得下载链接后使用wget批量下载即可。

此处列出本人使用python操作的步骤(本人编程能力很差,多担待):

import pandas as pd                      # 导入pandas库
import os                                # 导入os库,python调用linux shell时需要用到
                              
df = pd.read_csv("prokaryotes.csv")  	 # 读取下载的文件
df['genome_ftp'] = df['GenBank FTP'] + '/' + \
				df['GenBank FTP'].apply(lambda x : x.split('/')[-1]) + \
				'_genomic.fna.gz'
# 上面是一行代码,即在dataframe中将GenBank FTP列的信息通过整理,得到了新列(即下载地址列)
# apply函数用于处理较为麻烦的事情,这里相当于每一个GenBank FTP地址都经过apply处理
# x就是GenBank FTP,将其使用split分割成列表,再取最后一项。
# 得到的新列就是我们需要的基因组的下载地址啦

df['genome_ftp'].to_csv('dlftp.txt', header = False, index = False)
# 这里只将下载地址保存下来,不需要索引,也不需要列标题,因此两个都是False

inword = "wget -i dlftp.txt -P ./pro_genomes/" 
# 字符串用于linux shell调用,wget很多选项按需使用,P选择下载目录,i 表示读取文件中的url
os.system(inword)                        # linux shell执行上面的下载命令

制作数据库

本地的BLAST与网页版的不同,网页版的可以直接将基因组文件(即fasta文件)传入就能进行BLAST了,但是本地版的BLAST需要先制作目标数据库,也就是基因组文件是需要先被制成一个个的数据库后才能开始BLAST。

通过上述方法下载得到的文件都是以 .gz 为后缀名的,还需要先解压才行,解压后直接制作数据库,制作数据库的命令如下:

makeblastdb -in db.fasta -dbtype nucl -out dbname
  • -in 需要制作数据库的序列文件(输入fna文件即可)
  • -dbtype 输入序列的类型,核酸为nucl,氨基酸为prot
  • -out 输出得到的数据库的名称,每个序列文件都会输出一个数据库,需要命名。说起来是一个数据库,但是其实就是产生的几个文件。一般来说可以创建一个文件夹,将这几个文件都保存在里面,在建的库较多时也不容易乱。
  • 此外还有一些参数,一般来说是用不上啦,有需要可以自行探索。

数据少时批量解压和建库的操作代码如下:

import os

files = os.listdir("pro_genomes/")         # 列出下载的基因组文件,得到的是一个列表
for genome in files:                   # 循环对列表中的每一个基因组文件进行处理
	jieya = "gzip -d pro_genomes/" + genome      # 使用gzip -d命令后原压缩包会被自动删除
	os.system(jieya)         # 通过os.system调用shell来处理上述语句 
	db_name = genome.strip('.fna.gz')    
	# 这里我先把建库的名字设好,就是基因组文件名的前缀(.fna)
	mdb = f"makeblastdb -in pro_genomes/{db_name}.fna -dbtype nucl \
	-out db/{db_name}/{db_name}" 
'''
这里是建库的步骤,mdb是一个字符串,在字符串前加上f表示后面的语句你可以按照正常的
写字符串的顺序写下,即不需要使用+号来连接字符串,在有外界变量时只需要对外界变量加入
中括号即可,是不是很方便呀!这里我将建的库都放在db文件夹中,为防混乱,这里建库的out
还建了一个文件夹即db/{db_name},生成的数据库文件是在这个文件夹中的,最后面的{db_name}
是代表数据库的名字,产生的数据库文件都会以这个名字为前缀,只是后缀不同
(如nhr、nin、nsq这些后缀,最新版的BLAST会产生6个文件)
注意空格不要打少咯!
'''
	os.system(mbd) 

某些特定要求的BLAST可能需要屏蔽某些低复杂度序列或者基因组内出现很多次的序列,因此需要利用blast+的mask工具windowmasker(核酸)、dustmasker(核酸)或者segmasker(氨基酸)进行屏蔽,屏蔽之后再根据其产生的信息进行后续的BLAST建库,如有这方面要求可以查询一下相关内容。

BLAST

数据库制作完成就能用来进行本地BLAST了,BLAST有很多种类型如blastp、blastn、tblastn等,根据自己需要选择。此处以tblastn为例,命令如下:

tblastn -query demo.fasta -out demo.blast -db dbname -outfmt 6 -evalue 0.01 -num_threads 20
  • -query 查询序列
  • -out 比对结果文件名,每个数据库比对都会产生一个结果
  • -db 之前制作好的数据库名,若要对比多个则需要使用编程软件批量进行
  • -outfmt 输出格式,blast输出有很多形式,使用比较多的有6、11
  • -evalue 即最大的evalue阈值,超过这个evalue的结果就不要了,默认为10
  • -num_threads 即使用的线程数,有的时候你BLAST的query是有很多条序列的,这时候它就派上用场啦,速度会显著加快的

BLAST还有一些其它参数,若有需要可以blast -help查询一下哈

例(单个BLAST):

# linux shell
tblastn -query sequence.fasta -out demo.blast -outfmt 6 -db db/GCA_900475215.1_42727_B01_genomic/GCA_900475215.1_42727_B01_genomic

由于批量操作的步骤与上面类似,就不再列出。要注意的是在BLAST时,dbname不是文件夹名,而是文件夹下的文件名的前缀(不要后缀)。比如我这里就是有db/GCA_900475215.1_42727_B01_genomic这个文件夹,文件夹里面有GCA_900475215.1_42727_B01_genomic.nhr、CA_900475215.1_42727_B01_genomic.nin、CA_900475215.1_42727_B01_genomic.nsq这几个文件,但我要输数据库的话就是按照上面的输入即db/GCA_900475215.1_42727_B01_genomic/GCA_900475215.1_42727_B01_genomic。
这里新手很容易犯错哦,如果输错的话会报错。

这里我烦了很久的:(

叮!

这样一个完整的基础的本地BLAST操作就结束啦,当然还需要自己使用编程工具将这些步骤串起来,形成自动化循环,才能进行大批量的BLAST。当然工作量大时可能还需要用到多线程或多进程等工具,充分利用机器的运行内存加快速度。

大家也可以参考我后面的其它多进程的文章呀(嘿嘿嘿)!

BLAST只是工具,在获得结果之后才是更重要的步骤,需要根据自己的需求处理得到的比对结果。似乎这个更麻烦,很麻烦。由于篇幅限制,之后若是有相关的内容也会分享的!

注意:我使用的环境是ubuntu,因此本文中调用的也是Linux shell。

你可能感兴趣的:(生信新手分享,本地BLAST,python,python,ubuntu,linux,大数据,数据库)