详解GFF转换为GTF文件

2020-05-08 16:41:25 浏览数 (1)

欢迎关注”生信修炼手册”!

存储基因和转录本的结构信息,gtf和gff3两种格式都可以。在实际分析时,会需要转换两种格式。比如,NCBI 只提供了GFF格式的下载文件,我们需要转换成GTF文件之后再使用。

完成这一任务,可以自己编写脚本,也可以借助现成的工具。接下来看下每种工具的使用方法和特点。使用NCBI的GFF文件进行测试,链接如下

ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/405/GCF_000001405.38_GRCh38.p12/GCF_000001405.38_GRCh38.p12_genomic.gff.gz

1. gffread

gffread是由cufflinks的开发团队提供的一款读取gff文件的工具,可以实现gff文件转换为gtf文件,用法如下

代码语言:javascript复制
gffread -T GCF_000001405.38_GRCh38.p12_genomic.gff  -o hg38.gtf

生成的gtf示例如下

代码语言:javascript复制
NC_000001.11    BestRefSeq      exon    11874   12227   .               .       transcript_id "rna0"; gene_id "gene0"; gene_name "DDX11L1";

gffread 生成的gtf文件中只提供了exonCDS这两种类型的结构信息,第九列的属性也只有transcript_id, gene_id, gene_name这3种属性,最关键的是, 这些ID没有任何含义,我们更想要的是基因的Entrez ID和转录本的RefSeq 编号。

2. UCSC

UCSC采用GenePred 格式存储基因和转录本的结构信息, 通过UCSC的小工具,我们可以借助GenePred格式来实现GFF转换成GTF。用法如下

代码语言:javascript复制
gff3ToGenePred  GCF_000001405.38_GRCh38.p12_genomic.gff  hg38.GenePred
genePredToGtf database hg38.GenePred hg38.gtf

首先用gff3ToGenePred转换为GenePred格式,然后在利用genePredToGtf转换为GTF格式。

生成的gtf示例如下

代码语言:javascript复制
NC_012920.1    hg38.GenePred    transcript    15956    16023    .    -    .    gene_id "gene60958"; transcript_id "rna171196";  gene_name "gene60958";

相比gffreads, UCSC提供的类型更多,包括以下几种

1. exon 2. CDS 3. start_codon 4. stop_codon 5. transcript

虽然区间的类型变多了,但是属性的问题和gffread是一样的,除了gene_name属性有价值外,其他属性都没有价值。

当然,网上也有各种别人编写的脚本,但是或多或少多都存在问题。最佳的方案还是自己来编写,首先需要搞清楚GTF文件中,我们需要哪些类型的区间信息。

对于GTF的实际使用而言,只需要exon区间信息就可以区分不同的转录本了,而且在定量的过程中,也是只需要参考exon的位置信息。所以,自己编写转换脚本,只需要保留eoxn信息。

另外一个问题就是,第九列提供哪些属性。根据我的经验,只需要以下6个属性

  1. gene_id
  2. gene_name
  3. transcript_id
  4. transcript_name
  5. gene_type
  6. transcript_type

gene_id可以用来保存不同数据库中的基因ID,比如NCBI Entrez Id, Ensembl gene Id, 当然也可以和gene_name属性保持一致;gene_name属性用来保存gene symbol, 相比id, symbol在文章中的使用频率更高。

transcript_idtranscript_name表征转录本的id和名称,可以是RefSeq ID,也可以是Ensembl transcript id, 用于区分不同的转录本。

gene_typetranscript_type表示基因和转录本的类型,比如是protein_coding, 还是lncRNA, rRNA等。在分析时,我们通常会根据类型选择其中的部分转录本来分析,比如只分析蛋白编码的转录本。

以上6种属性就能够满足几乎100%的场景,对于不同数据库中的文件,只需要自己写脚本提取这些信息,就可以了。

·end·

—如果喜欢,快分享给你的朋友们吧—

0 人点赞