本地搭建植物KEGG数据库及进行注释

KEGG数据库包含丰富的功能信息及通路注释,可由此了解生物系统的功能和效用。

而官方已经不再免费提供FTP下载氨基酸以及核酸序列库,并且KAAS和Kofam等官方工具,要么在线注释提交序列过少,要么注释结果会关联到非相关物种,多多少少存在一些问题。

但通过KEGG API检索可以获得一些信息,如:
① KEGG GeneID和KEGG ORTHOLOG的对应关系


KEGG GeneID 与 KEGG ORTHOLOG 对应关系

② NCBI RefSeq与KEGG GeneID的对应关系


RefSeq ID 与 KEGG GeneID 对应关系

③ 所有物种信息
所有物种信息

因此可以曲线救国,通过KEGG API检索获得已有基因组注释序列的相关信息,将NCBI proteinid映射到KEGG GeneID,关联至KEGG ORTHOLOG注释信息,从而构建本地数据库进行注释。以下是对构建本地植物KEGG数据库及注释的一次记录。

下载已有基因组蛋白序列进行建库及注释

1.1 下载所有物种列表

curl https://rest.kegg.jp/list/organism > KEGG.Organism.txt

1.2 获取植物物种列表

grep "Plants" KEGG.Organism.txt > KEGG.Plants.txt

植物物种列表:KEGG.Plants.txt

1.3 提取植物物种列表的第一列,把第一列的值放入https://www.genome.jp/kegg-bin/show_organism?org={}括号内,获得每一个物种详细信息页面的链接

awk -F'\t' '{print "https://www.genome.jp/kegg-bin/show_organism?org=" $1}' KEGG.Plants.txt > KEGG.Plants.link.txt
物种详细信息页面链接:KEGG.Plants.link.txt

1.4 向网页发出GET请求,从返回内容中获取NCBI基因组信息,生成得到对应的蛋白序列下载链接

# 有133个物种,但只有130个物种有蛋白序列信息
缺少的为:Lotus japonicus(lja)  / Oryza sativa japonica (Japanese rice) (dosa) / Bathycoccus prasinos(bpg)
cat KEGG.Plants.link.txt | xargs -n 1 curl -L | grep -wio "https://ftp.ncbi.nlm.nih.gov/genomes[0-9_a-zA-Z\/.\-]*" > KEGG2NCBI.txt
NCBI ftp下载页面链接
cat KEGG2NCBI.txt | awk -F "/" '{print $NF}' | sed "s/$/&_protein.faa.gz/g" > KEGG2NCBI.suffix.txt
paste -d '/' KEGG2NCBI.txt KEGG2NCBI.suffix.txt > KEGG2NCBI.prodown.txt
# 注意NCBI ftp下载链接后面重复了一项,如
拟南芥的基因组页面链接为:https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/735/GCF_000001735.4_TAIR10.1
蛋白信息下载链接为:https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/735/GCF_000001735.4_TAIR10.1/GCF_000001735.4_TAIR10.1_protein.faa.gz
生成得到下载链接:KEGG2NCBI.prodown.txt

1.5 下载和解压所有蛋白序列(因为文件比较小,可以直接wget下载)

wget -i KEGG2NCBI.prodown.txt -P ./kegg_refseq
pigz -k -d *.faa.gz -p 16
下载所得蛋白序列文件:*.faa.gz & *.faa

1.6 合并蛋白序列,查看数量

cat *.faa > kegg_plants_refseq.faa
grep -c '>' kegg_plants_refseq.faa
kegg_plants_refseq.faa

1.7 diamond建库

diamond makedb --in kegg_plants_refseq.faa --db kp_refseq.dmnd -p 16

1.8 diamond比对注释

diamond blastx -q test.fa -d kp_refseq.dmnd \
--max-hsps 1 --max-target-seqs 1 --sensitive --outfmt 6 --evalue 1e-5 -p 16 \
-o kegg_test_match.out

输出的是熟悉的outfmt6格式


kegg_test_match.out
获取NCBIID与KO号对应关系

2.1 以拟南芥为例,查看ncbiid与KO号对应关系


ncbiid与KO号对应关系

要获取所有植物物种的对应关系,可以直接替换链接中的物种缩写,写个脚本

bash get_ncbi_protein_id.sh
#bash脚本如下:
# 首先,读取input.txt文件中的第二列数据,并将其存储在一个名为"ids"的变量中
ids=$(awk '{print $2}' KEGG.Plants.txt)
# 然后,遍历ids变量中的每一个值,并将其替换为预定义的格式
for id in $ids; do
 # 将每个值替换为http://rest.kegg.jp/conv/<id>/ncbi-proteinid的格式
 # 其中<id>表示原始值
 result=$(echo "http://rest.kegg.jp/conv/${id}/ncbi-proteinid")
 # 将替换结果追加到output.txt文件中
 echo $result >> KEGG.Plants.ncbiproid.temp.txt
done
cat KEGG.Plants.ncbiproid.temp.txt | xargs -n 1 curl -L> KEGG.Plants.ncbiproid.txt
KEGG.Plants.ncbiproid.txt

2.2 以拟南芥为例,查看 KEGG 的基因ID与 KO 注释对应关系


KEGG 的基因ID与 KO 注释对应关系

现在获取KEGG 的基因ID与 KO 注释列表

awk -F'\t' '{print "http://rest.kegg.jp/link/ko/" $2}' KEGG.Plants.txt > KEGG.Plants.Knum.temp.txt
cat KEGG.Plants.Knum.temp.txt | xargs -n 1 curl -L> KEGG.Plants.Knum.txt

2.3 Rstudio下整理KO关联信息,第一列为NCBIID,第二列为Knum

setwd("~/temp/kegg_get")
ncbiid <- read.table("KEGG.Plants.ncbiproid.txt",header = F,sep = "\t")
protid<- ncbiid %>% separate(V1, c("ncbi","protid"), "[:]")
protid <- protid[,c(2,3)]
colnames(protid) <- c("protid","geneid")
head(protid)
knum <- read.table("KEGG.Plants.Knum.txt",header = F,sep = "\t")
koid <- knum %>% separate(V2, c("ko","kid"), "[:]")
koid <- koid[,c(1,3)]
colnames(koid) <- c("geneid","kid")
kplant <- protid %>% left_join(koid)
kplant <- na.omit(kplant)
kplant <- kplant[,c(1,3)]
write.table(kplant,"Plants.NCBI2KEGG.txt",sep = "\t",row.names = F,quote=F)
Plants.NCBI2KEGG.txt

到这里可以把一些中间文件删去,仅保留以下文件,方便以后注释


保留文件
整理关联信息,获得KEGG注释

3.1 提取diamond比对结果,第一列为比对id,第二列为蛋白id,需要去除小数点后面的字符

cat kegg_test_match.out | awk -F "\t" '{split($2,a,"."); print $1 "\t" a[1]}' > kegg_test_match_exct.out

3.2 整理对应关系,获得KEGG注释

python get_kegg_annotation.py
#python脚本:get_kegg_annotation.py,需要提前安装pandas
import pandas as pd
# 读取文件并将它们存储在DataFrame中
df1 = pd.read_csv("kegg_test_match_exct.out", sep="\t", header=None, names=["col1", "col2"]) # "kegg_test_match_exct.out" 需要替换为当次注释的输出结果名称
df2 = pd.read_csv("Plants.NCBI2KEGG.txt", sep="\t", header=None, names=["col3", "col4"])
# 将两个DataFrame合并起来
df_merged = pd.merge(df1, df2, left_on="col2", right_on="col3")
# 将合并后的DataFrame的指定列输出到文件中
df_merged[["col1", "col2", "col4"]].to_csv("kplant_test_out.txt", sep="\t", index=False, header=False)
参考:
https://mp.weixin.qq.com/s/sqg5DGddKN9DPm8uTljW_g
https://cloud.tencent.com/developer/article/1991066
https://www.bioinfo-scrounger.com/archives/230/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容