模式植物GO背景基因集制作

一边学习,一边总结,一边分享!

写在前面

关于GO背景基因集文件的制作,我们在很早以前也发过。近两天,自己在分析时候,也是被搞了头疼。想重新制作一份GO背景基因集,进行富集分析。但是结果,也不如意。以及在制作的过程中,也是跟随着以前的教程制作,发现以前整理的教程比较乱,那么借此机会,也进行整理,重新进行记录。

本期教程

点击访问原文:模式植物GO背景基因集制作

前言

我们在做转录组数据分析时,大多数都会进行功能富集分析,预测目的基因所具有的的功能。富集工具常用到的R语言中clusterProfiler包,里面包含了上千个功能富集的背景数据文件,功能非常强大,目前已经更新到V4.0版本。

在agriGO数据库中下载

前期准备文件

  1. 所需注释的物种基因核酸序列或蛋白序列
  2. swissprot数据
  3. idmapping.tb.gz文件
  4. go-basic.obo文件

数据下载

你可以分别进去对应的网址下载最新的数据库即可。

  1. Swissprot数据库:https://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/
  2. dimapping数据:https://ftp.proteininformationresource.org/databases/idmapping/
wget -o GO_database/swissprot.gz  https://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/swissprot.gz
wget -o GO_database/go-basic.obo http://purl.obolibrary.org/obo/go/go-basic.obo
wget -o GO_database/idmapping.tb.gz https://ftp.proteininformationresource.org/databases/idmapping/idmapping.tb.gz

建库及文件提取

1. 使用diamond makedb建库

diamond makedb --in GO_database/swissprot.gz --threads 60 --db GO_database/swissprot

2. GO号与swissprot蛋白ID文件的提取

下载idmapping数据库

https://ftp.proteininformationresource.org/databases/idmapping/idmapping.tb.gz

解压idmapping.tb.gz文件

gunzip idmapping.tb.gz


该文件的第一列为数据库ID,第八列为GO_ID,是我们这一次要与未知的结果进行转换的关键部分。

提取idmapping.tb.gz文件ID~GO.list file

awk -v FS="\t" -v OFS="\t" '{print $1,$8}' idmapping.tb | grep "GO" > idmapping.GO.list

使用Python脚本提取

输出结果

3. GO term文件提取

下载go-basi.obo,GO_Term

http://purl.obolibrary.org/obo/go/go-basic.obo

原始go-basi.obo文件格式

脚本提取


输出结果


基因文件序列的准备

下载所需的背景基因序列,核酸序列或蛋白序列度都可以

我们这里以番茄基因组4.0版本为例子。

#!/bin/bash
## download the tomato reference geneome to 4.1 
wget https://solgenomics.net/ftp//tomato_genome/annotation/ITAG4.0_release/ITAG4.0_gene_models.gffwget https://solgenomics.net/ftp//tomato_genome/assembly/build_4.00/S_lycopersicum_chromosomes.4.00.fagffread ITAG4.0_gene_models.gff -T -o ITAG4.0_gene_models.gtf
##
gffread ITAG4.0_gene_models.gff -T -o ITAG4.0_gene_models.gtf
##
gffread -w tomato_4.0.fa -g S_lycopersicum_chromosomes.4.00.fa ITAG4.0_gene_models.gtf

注意:若你不想这用操作,下载蛋白序列即可

1. 比对

diamond blastx -d GO_database/swissprot.dmnd -q ../Tomato_4.0/tomato_4.00.fa -k 1 -e 0.00001 -o tomato.gene.m8

2. 筛选出最佳结果

这步,若你认为有必要进行,那就进行筛选。筛选的参数可以自己调整。

使用*.pl教程

die "perl $0 *.m8 *.m8.out\n" if(@ARGV!=2);
open IN, "$ARGV[0]" or die "can not open file: $ARGV[0]\n";
open OA, ">$ARGV[1]" or die "can not open file: $ARGV[1]\n";my ($line,@inf,%score_data,%m8_data,%order);
my $n=1;
while($line=<IN>){chomp $line;@inf=split /\t/,$line;if($inf[11]>$score_data{$inf[0]}){$score_data{$inf[0]}=$inf[11];$m8_data{$inf[0]}=$line;}else{next;}       $order{$line}=$n++;
}
foreach my $i (sort {$order{$a}<=>$order{$b}} keys %order){@inf=split /\t/,$i;if(exists $m8_data{$inf[0]}){print OA "$m8_data{$inf[0]}\n";}
}
close IN;
close OA;

运行

perl m8_best_pick.pl tomato.gene.m8 tomato.gene.m8.best.out

3. 提取最佳结果ID文件

使用Python脚本:

或,你可以使用wak命令提取就可以。

运行

python ../get_blastx_wiss_id.py 02.tomato.gene.best.m8 > 03.tomato.transcript.swissprot.list

结果文件:

4. 合并文件,获得目标基因-GO ID


运行:

python get_go_annotation.py GO_batabase/idmapping.GO.list 03.tomato.transcript.swissprot.list

结果文件:

5. 拆分文件


注意:
我们的基因ID中,没有以mRNA:Solyc00g500003.1.1命名,如Solyc00g500003.1.1.我们需要将split_with_go.py进行适当修改即可。

运行:

python ../split_with_go.py 04.tomato_go.annotation  05.tomato.4.0.Go.list

结果文件:


到这里基本结束了,你获得Gene ID与对应GO ID

富集分析

你可以使用相关的云平台做GO功能富集分析,例如使用基迪奥生信平台GO功能富集工具

在线网址:OmicShare Tools - 基迪奥生信云工具:

上传背景基因

云平台支持的背景文件的数据格式

<,>

自己进行GO term的提取

下载go-basi.obo,GO_Term

http://purl.obolibrary.org/obo/go/go-basic.obo

原始go-basi.obo文件格式

Python脚本:

运行:

python get_go_term.py go-basic.obo

使用R进行合并

library(clusterProfiler)
## 加载背景基因文件“gene-GO"
go_anno <- read.delim('tomato_go.annotation.new', header = FALSE, stringsAsFactors = FALSE)
names(go_anno) <- c("gene_id", "GO_ID")
head(go_anno)### 导入GO注释文件
go_class <- read.delim("go_term.list", header = F, stringsAsFactors = F)
names(go_class) <- c("GO_ID", "Description","Ontology")
head(go_class)## 合并背景基因
go_ann <- merge(go_anno, go_class, by = 'GO_ID', all.x = F)
head(go_ann)


开始富集分析:

# 导入差异基因
gene_list <- read.table("tomato.gene.5000.txt", stringsAsFactors = F)
head(gene_list)
names(gene_list) <- c("gene_id")
gene_select <- gene_list$gene_id## 富集分析
go_rich <- enricher(gene = gene_select,TERM2GENE = go_ann[c('GO_ID','gene_id')],TERM2NAME = go_ann[c('GO_ID','Description')],pvalueCutoff = 0.05,pAdjustMethod = 'BH',qvalueCutoff = 0.2,maxGSSize = 200) 
head(go_rich)

**柱状图**
barplot(go_rich,drop=T,showCategory = 10) 

**气泡图**
dotplot(go_rich)


网络图

enrichplot::cnetplot(go_rich,circular = F, colorEdge = T)


写在最后,为了方便,我将前面的步骤进行分别写在一个脚本中。只要前期的数据准备好,输入所需的物种序列的序列即可。

算是比较方便。

准备文件GO_database

  1. swissprot.gz
  2. go-basic.obo
  3. idmapping.tb

运行脚本:

sh 01.run.swissprot.sh

结果文件:

  1. go_term.list
  2. idmapping.GO.list

GO注释文件脚本:

sh 02_run.GO_enrichment_file.sh test.fa
  • test.fa为注释文件序列

**注意:**若你不更改blast的脚本,这里默认只支持核酸序列。

结果文件:

在结果文件中05_gene.GO.list即最终结果文件。

后面的分析与前面的一致。


若你不想制作,我们这里提供完整的GO_database文件夹中的文件。你只需要在此基础上,运行你所需的物种序列即可。

原文访问:[模式植物GO背景基因集制作(https://mp.weixin.qq.com/s/08hAZs24mi_KBOa4QZRLdQ)

往期文章:

1. 复现SCI文章系列专栏

2. 《生信知识库订阅须知》,同步更新,易于搜索与管理。


3. 最全WGCNA教程(替换数据即可出全部结果与图形)

  • WGCNA分析 | 全流程分析代码 | 代码一

  • WGCNA分析 | 全流程分析代码 | 代码二

  • WGCNA分析 | 全流程代码分享 | 代码三

5. 转录组分析教程

转录组上游分析教程[零基础]


小杜的生信筆記,主要发表或收录生物信息学的教程,以及基于R的分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/163602.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVAEE初阶相关内容第十五弹--网络編程

写在前 简单描述一下关于路由器的三层转发和交换机的二层转发。 路由器是三层转发-->在网络层转发。【需要解析出IP协议中的源IP、目的IP来规划路径】 交换机是二层转发-->在数据链路层转发。【只需要关注下一步发展到哪个相邻的设备上&#xff0c;不需要IP地址&#…

JAVA生成ORC格式文件

一、背景 由于需要用到用java生成hdfs文件并上传到指定目录中&#xff0c;在Hive中即可查询到数据&#xff0c;基于此背景&#xff0c;开发此工具类 ORC官方网站&#xff1a;https://orc.apache.org/ 二、支持数据类型 三、工具开发 package com.xx.util;import com.alibab…

【计算机网络笔记】分组交换中的报文交付时间计算例题

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 系列文章目录题目解答 题目 在下图所示的采用“存储-转发”方式的分组交换网络中所有链路的数据传输速率为100 Mbps&#xff0c;分…

node+vue+mysql后台管理系统

千千博客系统&#xff0c;该项目作为一套多功能的后台框架模板&#xff0c;适用于绝大部分的后台管理系统开发。基于 vue.js&#xff0c;使用 vue-cli3 脚手架&#xff0c;引用 Element UI 组件库&#xff0c;数据库直连mysql方便开发快速简洁好看的组件。 功能包含如下&#…

EtherNet/IP转Modbus TCP协议网关的接口

远创智控的YC-EIPM-TCP网关产品&#xff0c;它有什么作用呢&#xff1f;一起来了解一下吧&#xff01; 远创智控YC-EIPM-TCP网关产品可以通过各种数据接口和工业领域的仪表、PLC、计量设备等产品连接&#xff0c;实时采集这些设备中的运行数据、状态数据等信息&#xff0c;并把…

【javascript】内部引入与外部引入javascript

创建a.html 内部引入&#xff1a; 外部引入&#xff1a; 创建a.js 注意&#xff1a; 我这里的a.js和a.html是放在同一个目录下&#xff0c;如果a.js放在js的目录下&#xff0c;a.html 调用a.js的时候 <script src"/js/a.js"></script>

sqlmap --os-shell选项原理解析

文章目录 sqlmap --os-shell选项原理解析原理解析总结 sqlmap --os-shell选项原理解析 以sqli第一关为例。 --os-shell 是 SQLMap 工具的一个参数&#xff0c;用于在成功注入数据库后&#xff0c;执行操作系统命令并获取其输出。 sqlmap -u "http://192.168.188.199/sq…

【C++】特殊类的设计(只在堆、栈创建对象,单例对象)

&#x1f30f;博客主页&#xff1a; 主页 &#x1f516;系列专栏&#xff1a; C ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ &#x1f60d;期待与大家一起进步&#xff01; 文章目录 一、请设计一个类&#xff0c;只能在堆上创建对象二、 请设计一个类&#xff0c;只能…

GO-unioffice实现word编辑

导包 import ("fmt""log""os""time""github.com/unidoc/unioffice/common/license""github.com/unidoc/unioffice/document" ) 创建word文件 func CreateFile(name string) {filename : name ".docx&quo…

【数据结构】栈

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 栈-Stack 1. 什么是栈2. 栈的使用3.…

项目管理之分析项目特点的方法

在管理项目时&#xff0c;了解项目的目标和实现方法可以帮助我们更好地规划和执行项目。根据项目的目标和实现方法的不同&#xff0c;可以将项目分为四种类型&#xff1a;地、水、火和气。 对于工程项目&#xff0c;采用基于活动任务的计划管理方法&#xff0c;使用活动网络图…

docker报错问题解决:Error Invalid or corrupt jarfile app.jar

文章目录 1.问题描述2.问题分析3.问题解决 1.问题描述 此时处在 /home/ubuntu/app 目录下&#xff0c;并且在该目录下有一个 jenkins-0.0.1-SNAPSHOT.jar。 我在 /home/ubuntu/app 目录下执行了 docker 容器运行命令&#xff1a; # 映射 8859 端口 # 容器名为 jenkins-demo #…

李宏毅机器学习笔记-半监督学习

半监督学习&#xff0c;一般应用于少量带标签的数据&#xff08;数量R&#xff09;和大量未带标签数据的场景&#xff08;数量U&#xff09;&#xff0c;一般来说&#xff0c;U>>R。 半监督学习一般可以分为2种情况&#xff0c;一种是transductive learning&#xff0c;…

【C++中cin、cin.get()、cin.getline()、getline() 的区别】

文章目录 引入cin基本用法输入多个变量换行符存放在缓冲区中 cin.get()基本用法重载函数换行符残留在缓冲区中 cin.getline()基本使用重载函数换行符不会残留在缓冲区中 string 流中的 getline()总结用法总结几个输入实例输入格式输入格式输入格式输入格式 输出格式 写在最后 引…

【Linux】userdel 命令使用

userdel命令用于删除用户帐号。 语法 userdel [选项] [用户帐号] 命令选项及作用 执行令 userdel--help 执行命令结果 参数 -f, --force 强制删除用户账号 -h, --help 显示此帮助信息并推出 -r, --remove 删除主目录和邮件池 -R, -…

【Qt控件之微调框、进度条】QSpinBox、QDoubleSpinBox、QDial、QProgressBar介绍及使用

概述 QSpinBox类提供了一个微调框小部件。 QSpinBox适用于处理整数和离散的值集&#xff08;例如&#xff0c;月份名称&#xff09;&#xff1b;对于浮点数值&#xff0c;请使用QDoubleSpinBox。 QSpinBox允许用户通过点击上下按钮或按键盘上的上下箭头来增加/减少当前显示的值…

《算法通关村第二关——终于学会链表反转了》

《算法通关村第二关——终于学会链表反转了》 今天学习链表反转 为什么反转这么重要呢&#xff1f;因为反转链表涉及结点的增加、删除等多种操作&#xff0c;能非常有效考察思维能力和代码驾驭能力。另外很多题目也都要用它来做基础&#xff0c; 例如指定区间反转、链表K个一…

网工内推 | IT主管、高级网工,上市公司,必须持有HCIE认证

01 深圳市飞荣达科技股份有限公司 招聘岗位&#xff1a;高级网络工程师 职责描述&#xff1a; 1. 参与、负责集团公司IT基础技术架构的规划设计、实施及维护、性能优化&#xff0c;包括数据中心机房、网络架构、虚拟化平台、信息安全设备及灾备系统等&#xff1b; 2. 负责集团…

Kubernetes技术与架构-服务

从软件系统架构设计分层的角度看&#xff0c;Kubernetes的Service是基于Pod的上层&#xff0c;业务应用部署在Pod中&#xff0c;使用Service绑定Pod部署的应用&#xff0c;Service可以对外或者对上层提供服务&#xff0c;当Pod集群在系统调度的过程中发生弹性伸缩的时候&#x…

基于模型预测人工势场的船舶运动规划方法,考虑复杂遭遇场景下的COLREG(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…