• 模式植物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
    • 2
    • 3

    建库及文件提取

    1. 使用diamond makedb建库

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

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

    下载idmapping数据库

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

    解压idmapping.tb.gz文件

    gunzip idmapping.tb.gz
    
    • 1


    该文件的第一列为数据库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
    
    • 1

    使用Python脚本提取

    输出结果

    3. GO term文件提取

    下载go-basi.obo,GO_Term

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

    原始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.gff
    
    wget https://solgenomics.net/ftp//tomato_genome/assembly/build_4.00/S_lycopersicum_chromosomes.4.00.fa
    
    gffread 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    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
    
    • 1

    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=){
            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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    运行

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

    3. 提取最佳结果ID文件

    使用Python脚本:

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

    运行

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

    结果文件:

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


    运行:

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

    结果文件:

    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
    
    • 1

    结果文件:


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

    富集分析

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

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

    上传背景基因

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

    <,>

    自己进行GO term的提取

    下载go-basi.obo,GO_Term

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

    原始go-basi.obo文件格式

    Python脚本:

    运行:

    python get_go_term.py go-basic.obo
    
    • 1

    使用R进行合并

    library(clusterProfiler)
    
    • 1
    ## 加载背景基因文件“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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13


    开始富集分析:

    # 导入差异基因
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    **柱状图**
    barplot(go_rich,
            drop=T,
            showCategory = 10) 
    
    • 1
    • 2
    • 3
    • 4

    **气泡图**
    dotplot(go_rich)
    
    • 1
    • 2


    网络图

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


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

    算是比较方便。

    准备文件GO_database

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

    运行脚本:

    sh 01.run.swissprot.sh
    
    • 1

    结果文件:

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

    GO注释文件脚本:

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

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

    结果文件:

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

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


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

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

    往期文章:

    1. 复现SCI文章系列专栏

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


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

    5. 转录组分析教程

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


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

  • 相关阅读:
    深眸科技以需求定制AI视觉解决方案,全面赋能产品外观缺陷检测
    [C++] 小游戏 斗破苍穹 2.2.1至2.11.5全部版本(上) zty出品
    08. Java内存模型(JMM)
    第三十八章 构建数据库应用程序 - 处理表单提交请求
    Java NIO 三大核心(Buffer、Channel、Selector)理解
    第八章 Linux文件系统权限
    论文解读|清华&Meta提出HorNet,用递归门控卷积进行高阶空间相互作用
    java中的IO流(字节流)
    WPF基础的一些基本操作
    Spark SQL 的总体工作流程
  • 原文地址:https://blog.csdn.net/kanghua_du/article/details/133869904