1.准备本地数据库文件

NR(Non-Redundant Protein Sequence Database)非冗余蛋白库,是所有GenBank+EMBL+DDBJ+PDB中的非冗余蛋白序列。Taxonomy物种分类数据库,包括大于7万余个物种的名字和系谱,这些物种都至少在遗传数据库中有一条核酸或蛋白序列。NRTaxonomy数据库都是NCBI的子数据库,会提供比较全面的对应关系。在本地数据库按物种拆分的话,必须下载这两个数据库的文件。

1.1 NR库下载

ftp下载地址:ftp://ftp.ncbi.nlm.nih.gov/blast/db/FASTA

NR数据库更新是相当频繁的,如果追求新,估计每个月甚至每周就重新下一次,但它又非常大,对于商业流程使用不可能更新得这么频繁,可以半年或一年更新一次。

1.2 Taxonomy数据库下载

ftp下载地址:ftp://ftp.ncbi.nlm.nih.gov/pub/taxonomy/

同样,taxonomy更新也很快。



我们分库需要用到两个文件,一个是accession2taxid中的prot.accession2taxid文件:



该文件将accessiontaxid关系对应起来(也有GI号,2016年以前大家用的是GI和taxid的对应文件,现在该文件已淘汰)。其格式为:



另一个是taxdump文件,里面包含了物种层级和物种名称等文件。解压后文件:



readme.txt文件中解释了每个文件的每一列信息(注意|是列间隔,而非列本身):

*.dmp files are bcp-like dump from GenBank taxonomy database.

General information.
Field terminator is "\t|\t"
Row terminator is "\t|\n" nodes.dmp file consists of taxonomy nodes. The description for each node includes the following
fields:
tax_id -- node id in GenBank taxonomy database (Taxonomy记录号)
parent tax_id -- parent node id in GenBank taxonomy database (上一层分类级别的tax_id)
rank -- rank of this node (superkingdom, kingdom, ...) 该tax_id所处的分类层级)
embl code -- locus-name prefix; not unique
division id -- see division.dmp file
inherited div flag (1 or 0) -- 1 if node inherits division from parent
genetic code id -- see gencode.dmp file
inherited GC flag (1 or 0) -- 1 if node inherits genetic code from parent
mitochondrial genetic code id -- see gencode.dmp file
inherited MGC flag (1 or 0) -- 1 if node inherits mitochondrial gencode from parent
GenBank hidden flag (1 or 0) -- 1 if name is suppressed in GenBank entry lineage
hidden subtree root flag (1 or 0) -- 1 if this subtree has no sequence data yet
comments -- free-text comments and citations Taxonomy names file (names.dmp):
tax_id -- the id of node associated with this name (为taxonomy的记录号)
name_txt -- name itself (即对应tax_id号的物种名称)
unique name -- the unique variant of this name if name not unique
name class -- (synonym, common name, ...) Divisions file (division.dmp):
division id -- taxonomy database division id
division cde -- GenBank division code (three characters)
division name -- e.g. BCT, PLN, VRT, MAM, PRI...
comments Genetic codes file:
genetic code id -- GenBank genetic code id
abbreviation -- genetic code name abbreviation
name -- genetic code name
cde -- translation table for this genetic code
starts -- start codons for this genetic code Deleted nodes file (delnodes.dmp):
tax_id -- deleted node id Merged nodes file (merged.dmp):
old_tax_id -- id of nodes which has been merged
new_tax_id -- id of nodes which is result of merging Citations file (citations.dmp):
cit_id -- the unique id of citation
cit_key -- citation key
pubmed_id -- unique id in PubMed database (0 if not in PubMed)
medline_id -- unique id in MedLine database (0 if not in MedLine)
url -- URL associated with citation
text -- any text (usually article name and authors).
-- The following characters are escaped in this text by a backslash:
-- newline (appear as "\n"),
-- tab character ("\t"),
-- double quotes ('\"'),
-- backslash character ("\\").
taxid_list -- list of node ids separated by a single space

其中最关键的是names.dmpnodes.dmp文件。names.dmp示例(共四列,重要的也就taxid和物种名的前两列信息):



nodes.dmp示例(共13列,重要的也就taxid、上层级taxid、分类层级这前三列信息):



为了让分类更简单,我们按taxonomy数据库本身分类的分法,即division.dmp文件,共12类物种。

2.按物种拆分NR库

2.1 第一步:获得Aceesson和分类物种的对应关系

根据以上的prot.accession2taxid.gznodes.dmpdivision.dmp文件,可通过编写脚本来获得accession和以上12类物种的对应关系。脚本略,自己写。假设结果文件命名为acc2sp.xls,格式如下:

2.2 第二步:获得分类物种的序列

根据acc2sp.xls这个文件以及NR总库序列文件nr.gz,我们就可以获得各类物种的序列信息了。当然除了taxonomy数据库本身分的这12类,我们也可以将它们合并来自定义子库。比如这12类中没有动物,我们可以将Invertebrates.fa、 Mammals.fa、 Primates.fa、 Rodents.fa 和Vertebrates.fa合并为动物作为一类,也可以将"Bacteria"、"fungi"、"Viruses"、"Phages""Environmental.samples"等合并为微生物作为一类(这在宏组学注释中常用)。当然NR中也有这12类中没包含的序列,我们可将其归为unknown.fa(不同于Unassigned.fa,它是没有物种信息)。

脚本自己写,最后得到的是各个子数据库的fasta序列文件。

2.3 第三步:建库和比对

blast或diamond比对工具进行序列数据库建库,后面比对选择对应的字库就可。

blastall:

formatdb -p T  -i Plants.fa
blastall -i query.fa -d Plants.fa -o blastout.nr -p blastp -F F -m 7 -e 1e-5 -b 10 -v 10 -a 5

或diamond:

diamond makedb --in Plants.fa -d Plants.fa
diamond blastp --evalue 1e-5 --threads 4 --outfmt 5 -q query.fa -d Plants.fa.dmnd -o blastout.nr --seg no --max-target-seqs 20 --more-sensitive -b 0.5 --salltitles

【数据库】本地NR数据库如何按物种拆分?的更多相关文章

  1. 构建NCBI本地BLAST数据库 (NR NT等) | blastx/diamond使用方法 | blast构建索引 | makeblastdb

    参考链接: FTP README 如何下载 NCBI NR NT数据库? 下载blast:ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+ 先了解 ...

  2. 【数据库】本地KEGG数据库如何拆分子库?

    目录 KEGG本地库文件 按物种拆分KEGG数据库 1.获得物种分类信息 2.获得物种分类的序列信息并建库 3.获得物种分类的K-ko对应文件 根据相似性原理,序列相似,功能相似,所有功能注释无非是用 ...

  3. NR 数据库简介

    目前有很多的数据库都存储了蛋白序列,比如NCBI Refseq, protein, swissprot 等,在各个数据库之间,或者是在某个数据库中,蛋白序列有大量冗余:为了方便使用,ncbi 构建了n ...

  4. [saiku] 将saiku自带的H2嵌入式数据库迁移到本地mysql数据库

    saiku数据库的表和用户默认创建是在启动项目的时候,通过初始化 saiku-beans.xml 中的 h2database 这个 bean 执行org.saiku.service.Database类 ...

  5. 从服务器将Oracle数据库导出到本地Oracle数据库的方法

     1.将服务器上的Oracle数据库导入到本地 在CMD模式下执行以下命令:   exp username1/password@服务器端数据库 file=本地硬盘:/文件名.dmp   例如: exp ...

  6. sql server 2008 把远程的数据库的数据转移到本地数据数据库里

    如题:把远程的数据库对应表里的数据转移到本地数据数据库的对应表里 比如把192.168.188.160的DB的A表的数据转移到本地的DB的A表里 第一步:连接远程服务器前准备 exec sp_addl ...

  7. cordova调用本地SQLite数据库的方法

    第一篇技术博客,写下来和大家分享今天所学,其次自己也巩固一下. 整个下午的时间用来钻研如何用cordova调用移动端本地SQLite数据库.首先我并不是用eclipse来编程的,而是用cordova建 ...

  8. Xamarin android使用Sqlite做本地存储数据库

    android使用Sqlite做本地存储非常常见(打个比方就像是浏览器要做本地存储使用LocalStorage,貌似不是很恰当,大概就是这个意思). SQLite 是一个软件库,实现了自给自足的.无服 ...

  9. WebService访问oracle数据库本地调试

    WebService访问oracle数据库本地调试-一步一个坑 上篇文章提到我们额数据库挂了,重装了数据库,然后呢我需要在本地调试WebService,看看那些数据结构缺失,迁移到新数据库中去.踩坑之 ...

随机推荐

  1. ScatterLayout分散布局在kv中的引用

    from kivy.uix.scatterlayout import ScatterLayout from kivy.app import App class ScatterLayoutWidget( ...

  2. 基于自定义Validator来验证枚举类型

    基于自定义Validator来验证枚举类型 一.背景 二.技术要点 三.实现一个自定义枚举校验. 1.需求. 2.实现步骤 1.自定义一个 Sex 枚举. 2.自定义一个 Enum 注解 3.编写具体 ...

  3. websocket入门案例(echo)

    websocket是用来干什么的,具体的请自行百度. 本文实现一个简单的websocket的入门小例子,实现客户端发送一句换,服务器端返回.即一个简单的交互. 一.服务器端的实现 1.创建一个类实现S ...

  4. MyBatis源码分析(三):MyBatis初始化(配置文件读取和解析)

    一. 介绍MyBatis初始化过程 项目是简单的Mybatis应用,编写SQL Mapper,还有编写的SqlSessionFactoryUtil里面用了Mybatis的IO包里面的Resources ...

  5. STP生成树协议在二层环境中的应用

    一 STP简介 1.单词: rstp快速生成树协议 filter过滤 protection保护 2.作用: 通过阻塞特定接口来防止二层交换环路,从而做到既可以提高网络可靠性的同时又能避免环路带来的问题 ...

  6. UVM:6.2.3 sequencer 的grab 操作

    转载:UVM:6.2.3 sequencer 的grab 操作_tingtang13的博客-CSDN博客 1.grab 比lock 优先级更高. 2.lock 是插到sequencer 仲裁队列的后面 ...

  7. Ubuntu virtualenv 创建 python2 虚拟环境 激活 退出

    首先默认安装了virtualenv 创建python2虚拟环境 your-name@node-name:~/virtual_env$ virtualenv -p /usr/bin/python2 py ...

  8. GoLang设计模式12 - 空对象模式

    空对象设计模式是一种行为型设计模式,主要用于应对空对象的检查.使用这种设计模式可以避免对空对象进行检查.也就是说,在这种模式下,使用空对象不会造成异常. 空对象模式的组件包括: Entity:接口,定 ...

  9. 【java+selenium3】时间控件 (九)

    1.问题描述: 在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就有点难了. 如图 ...

  10. VSCode Java 开发环境配置 详细教程

    VSCode Java 开发环境配置 详细教程 配置java 下载 用于现在大多数使用者用的是java 8,小白的我先安装java 8好了,^ w ^. 下载地址:Java 8 | Java SE 打 ...