首页 >> 学习 >> 应用实例 >> 实例1:公共数据库数据下载
实例1:公共数据库数据下载

本节重要性:★★★★★    本节难度:★★★★★

生物信息学研究中,经常需要从公共数据库中下载数据,如从NCBI的GenBank中下载核酸/蛋白质序列或PubMed数据库下载生物医学文献信息,从Ensembl数据库中下载基因组序列,从PDB数据库中下载蛋白质三级结构数据等。这些数据库一般都提供数据下载接口,如NCBI提供Efetch工具,可以批量下载数据。

我们先看一个从GenBank下载序列数据的shell脚本:

[peter@ibi98 seq_download]$ cat get_seq_from_GenBank.sh
#!/bin/bash
if [ $# != 2 -o "$1" == "-h" ]	#如果命令行参数不是2个或第一个参数是-h,就显示用法并退出
then
        echo "Usage: cat SeqIDFile |$0 Database(nuccore|nucleotide|
		popset|protein|sequences) SeqType(xml|gp|gb|fasta)"  #该URL中间不要有换行
        exit 1
fi
db=$1		#第1个命令行参数是数据库
seqtype=$2	#第2个命令行参数是序列类型
while read id	#从标准输入读取序列的ID
do
        wget -q -O - "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/
		efetch.fcgi?db=$db&id=$id&rettype=$seqtype"	#该URL中间不要有换行
done

上例中的下载地址https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=$db&id=$id&rettype=$seqtype是NCBI为使用脚本下载提供的Efetch下载地址。EfetchNCBI提供的Entrez编程工具(Entrez Programming Utilities, E-utilities)的一部分,提供多种资源的下载地址,通过改变URL中的参数,可以从不同的数据库中下载不同格式的数据。下面是执行结果:

[xiezy@ibi98 seq_download]$ head -2 seq_id	#序列ID文件
BAH04252.1
BAH04251.1
[peter@ibi98 seq_download]$ cat seq_id |./get_seq_from_GenBank.sh protein fasta
>BAH04252.1 LEAFY, partial [Cardamine alpina]
WNPTRATVQALPPVPPPPQQQPATTQTAAFGMRLGGLEGLFGAYGIRFYTAAKIAELGFTASTLVGMRDE
ELEEMMNSLSHIFRWELLVGERYGIKAAVRAERRRLQEEEEESSKRRHLLLSAAGDSGTHHALDALSQED
DWTGLSEEPVQQQDNQTDAAGNNGGYWEAGKGK

>BAH04251.1 LEAFY, partial [Cardamine alpina]
WNPTRATVQALPPVPPPPQQQPATTQTAAFGMRLGGLEGLFGAYGIRFYTTAKIAELGFTASTLVGMRDE
ELEEMMNSLSHIFRWELLVGERYGIKAAVRAERRRLQEEEEESSKRRHLLLSAAGDSGTHHALDALSQED
DWTGLSEEPVQQQDNQTDAAGNNGGYWEAGKGK

......

如果没给参数,会提示程序的用法:

[peter@ibi98 seq_download]$ cat seq_id |./get_seq_from_GenBank.sh
Usage: cat SeqIDFile |./get_seq_from_GenBank.sh Database(nuccore|nucleotide|popset|
protein|sequences) SeqType(xml|gp|gb|fasta)

下面的shell脚本的作用是从PubMed数据库下载文献信息:

[peter@ibi98 get_pubmed]$ cat pubmed.sh
#!/bin/bash
if [ "$1" == "-h" -o "$1" == "--help" ]	#显示程序使用方法
then
        echo "Usage: $0 <StartID> <EndID> >> OutFile"
        exit 0
fi

if [ $# -ne 2 ]				#显示程序使用方法
then
        echo "Usage: $0 <StartID> <EndID> >> OutFile"
        exit 1
fi

start=$1	#起始文献ID
end=$2		#结束文献ID
stop=0

while [ $stop -lt $end ]
do
        stop=$((start+399))		#每次下载400篇
        if [ $stop -gt $end ]	#如果不够400篇,就下载到第二个参数定义的那一篇
        then
                stop=$end
        fi
        ids=`seq -s',' $start $stop`	#把ID用逗号连起来
        ((start+=400))

	#下载medline格式的文献信息
        wget -q -O - "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?
		db=pubmed&id=$ids&retmode=text&rettype=medline"  #该URL中间不要有换行
	sleep 2	#停顿2秒,避免下载太频繁,IP被封
done

PubMed数据库搜集了超过27,000,000篇来自MEDLINE(Medical Literature Analysis and Retrieval System Online)的生物和医学文献的信息,并在不断更新中。数据库中包括题目、作者和摘要等文献信息都可以下载,是生物学和医学文本挖掘研究常用的资源。下面是上例一次执行的部分结果:

[peter@ibi98 get_pubmed]$ ./pubmed.sh 10000001 10000010

PMID- 10000001
OWN - NLM
STAT- Publisher
DA  - 19990217
LR  - 19990217
IS  - 0163-1829 (Print)
IS  - 0163-1829 (Linking)
VI  - 44
IP  - 8
DP  - 1991 Aug 15
TI  - Quantum-optical properties of polariton waves.
PG  - 3736-3756
FAU - Artoni
AU  - Artoni M
FAU - Birman
AU  - Birman JL
LA  - eng
PT  - Journal Article
PL  - United States
TA  - Phys Rev B Condens Matter
JT  - Physical review. B, Condensed matter
JID - 9878217
EDAT- 1991/08/15 00:00
MHDA- 1999/02/19 00:00
CRDT- 1991/08/15 00:00
PST - ppublish
SO  - Phys Rev B Condens Matter. 1991 Aug 15;44(8):3736-3756.

PMID- 10000002

结果内容较多,上面只显示了前面部分结果。

如果知道了序列或文献的ID,利用上面的脚本,可以方便地下载相应的序列和文献信息。从其他数据库下载数据方法也是类似的,核心的命令就是wget或curl。

<<上一节  下一节>>