欢迎关注”生信修炼手册”!
存储基因和转录本的结构信息,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文件中只提供了exon
和CDS
这两种类型的结构信息,第九列的属性也只有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个属性
- gene_id
- gene_name
- transcript_id
- transcript_name
- gene_type
- transcript_type
gene_id
可以用来保存不同数据库中的基因ID,比如NCBI Entrez Id, Ensembl gene Id, 当然也可以和gene_name属性保持一致;gene_name
属性用来保存gene symbol, 相比id, symbol在文章中的使用频率更高。
transcript_id
和transcript_name
表征转录本的id和名称,可以是RefSeq ID,也可以是Ensembl transcript id, 用于区分不同的转录本。
gene_type
和transcript_type
表示基因和转录本的类型,比如是protein_coding
, 还是lncRNA
, rRNA
等。在分析时,我们通常会根据类型选择其中的部分转录本来分析,比如只分析蛋白编码的转录本。
以上6种属性就能够满足几乎100%的场景,对于不同数据库中的文件,只需要自己写脚本提取这些信息,就可以了。
·end·
—如果喜欢,快分享给你的朋友们吧—