GTF与GFF文件格式的区别与转换

GTF与GFF文件格式的区别与转换

GTF与GFF文件都是用于存储注释信息的文本类型,经常可以看到二者格式之间的相互转换。二者的名字相似,连内容都极为相似,那么二者的差异究竟在哪里呢?

GFF (general feature format): 可以用于任何基因组注释的存储

GTF (gene transfer format): 严格的用于基因注释信息的存储

GFF

GFF文件是一种用来描述基因组特征的文件,现在我们所使用的大部分都是第三版)(GFF3)。gff文件除gff1以外均由9列数据组成,前8列在gff的3个版本中信息都是相同的,只是名称不同。

第9列attributes的内容存在很大的版本特异性,9列信息(以gff3为例)分别是:

1

2

3

4

5

6

7

8

9

seqid

annotation source

feature type

start

end

score

strand

phase

attributes

seqid :参考序列的id。

annotation source:注释的来源。如果未知,则用点(.)代替。一般指明产生此gff3文件的软件或方法。

feature type: 类型,此处的名词是相对自由的,建议使用符合SO惯例的名称(sequenceontology),如gene,repeat_region,exon,CDS等。

start coordinate:开始位点,从1开始计数(区别于bed文件从0开始计数)。

end coordinate:结束位点。

score:得分,对于一些可以量化的属性,可以在此设置一个数值以表示程度的不同。如果为空,用点(.)代替。

strand:“+”表示正链,“-”表示负链,“.”表示不需要指定正负链。

phase :步进。对于编码蛋白质的CDS来说,本列指定下一个密码子开始的位置。可以是0、1或2,表示到达下一个密码子需要跳过的碱基个数。

attributes:属性。一个包含众多属性的列表,格式为“标签=值”(tag=value),不同属性之间以分号相隔,这一列最后没有分号。如:

ID=geneAExon1;Name=geneA;Parent=geneA;Organism=human

几个attributes举例:

ID:type的标识;

Name:type的展示名称。Name的值在可视化的时候得到展示。因此,Name可以根据自己展示的需要随意取值;

Parent :指明type所从属的上一级ID。用于将exons聚集成transcript,将transripts聚集成gene。

GFF允许使用#作为注释符号,例如很多GFF文件都会使用如下的两行来表明其版本其创建日期:

## gff-version 2

## created 11/11/11

GFF文件每一列所代表的含义前面表格中有,但请注意,它的第3列feature type是不受约束的,你可以使用任意的名称,但也不要太淘气~用一些适当的名称对于后面的分析会有很大的帮助。

我们需要注意的是GFF文件的第9列,从第二版开始(GFF2),所有的属性都以标签=值的方式呈现,各个属性之间以;作为分隔符

ID=geneAExon1;Name=geneA;Parent=geneA;Organism=human

在最新版本的GFF文件中(GFF3),有一些是已经预先定义的属性特征,并且这些特征往往还有特殊的含义:ID这个标签实在各行都要有的;另外有一个Parent的属性,它指明type所从属的上一级ID。

GTF

当前所广泛使用的GTF格式为第二版(GTF2),它主要是用来描述基因的注释。GTF格式有两个硬性标准:

根据所使用的软件的不同,feature types是必须注明的。

第9列必须以gene_id以及transcript_id开头

GTF文件的第9列同GFF文件不同,虽然同样是标签与值配对的情况,但标签与值之间以空格分开,且每个特征之后都要有分号;(包括最后一个特征)

1

2

3

4

5

6

7

8

9

seqname

source

feature

start

end

score

strand

frame

attributes

seqname: 序列的名字。通常格式染色体ID或是contig ID。

source:注释的来源。通常是预测软件名或是公共数据库。

start:开始位点,从1开始计数。

end:结束位点。

feature :基因结构。CDS,start_codon,stop_codon是一定要含有的类型。

score :这一列的值表示对该类型存在性和其坐标的可信度,不是必须的,可以用点“.”代替。

strand:链的正向与负向,分别用加号+和减号-表示。

frame:密码子偏移,可以是0、1或2。

attributes:必须要有以下两个值:

gene_id value; 表示转录本在基因组上的基因座的唯一的ID。 gene_id与value值用空格分开,如果值为空,则表示没有对应的基因。

transcript_id value; 预测的转录本的唯一ID。transcript_id与value值用空格分开,空表示没有转录本。

attribures之后有可能会有comments选项,以“#”开头,一直到行末尾。

区别

gtf2的内容和gff3也是很相似的,区别只在其中的3列:

-

GTF2

GFF3

feature type

根据软件名称注明

可以是任意名称

attributes

空格分隔

‘=’分隔

格式转换

使用Cufflinks里面的工具"gffread":

#gff2gtf

gffread my.gff3 -T -o my.gtf

#gtf2gff

gffread merged.gtf -o- > merged.gff3

使用脚本进行格式转换

GTF to GFF

import sys

inFile = open(sys.argv[1],'r')

for line in inFile:

#skip comment lines that start with the '#' character

if line[0] != '#':

#split line into columns by tab

data = line.strip().split('\t')

#parse the transcript/gene ID. I suck at using regex, so I usually just do a series of splits.

#transcript_id和gene_ids是GTF第九列肯定存在的

transcriptID = data[-1].split('transcript_id')[-1].split(';')[0].strip()[1:-1]

geneID = data[-1].split('gene_id')[-1].split(';')[0].strip()[1:-1]

#replace the last column with a GFF formatted attributes columns

#I added a GID attribute just to conserve all the GTF data

data[-1] = "ID=" + transcriptID + ";GID=" + geneID

#print out this new GFF line

print '\t'.join(data)

脚本运行

python myScript.py myFile.gtf > myFile.gff

GTF to GFF

import sys

inFile = open(sys.argv[1],'r')

for line in inFile:

#skip comment lines that start with the '#' character

if line[0] != '#':

#split line into columns by tab

data = line.strip().split('\t')

ID = ''

#if the feature is a gene

if data[2] == "gene":

#get the id

ID = data[-1].split('ID=')[-1].split(';')[0]

#if the feature is anything else

else:

# get the parent as the ID

ID = data[-1].split('Parent=')[-1].split(';')[0]

#modify the last column

data[-1] = 'gene_id "' + ID + '"; transcript_id "' + ID

#print out this new GTF line

print '\t'.join(data)

参考资料:

Method: GFF/GTF conversion and differences

NGS数据格式之gff/gtf

相关推荐

被印在世界杯纪念币上的史上最佳门将列夫·雅辛
《塞尔达传说:旷野之息》塞尔达武器袋如何扩容?
英超365bet体育投注

《塞尔达传说:旷野之息》塞尔达武器袋如何扩容?

📅 06-28 👁️ 4595
语音便签app有哪些
365信息网

语音便签app有哪些

📅 07-31 👁️ 7587
mysql的data文件无法删除的简单介绍
365bet世界杯欢迎您

mysql的data文件无法删除的简单介绍

📅 07-06 👁️ 9537
浴室鸳鸯浴指南:完美浴室体验的准备与姿势推荐 – 69情趣生活馆
过关游戏有哪些
365信息网

过关游戏有哪些

📅 07-12 👁️ 9586
荷兰猪吃什么食物,吃苜蓿草、三叶草、苏丹草等
足球城记:2018年世界杯唯一在亚洲的举办城市,是它
英超365bet体育投注

足球城记:2018年世界杯唯一在亚洲的举办城市,是它

📅 07-22 👁️ 2348
布冯6次世界杯之梦戛然而止!比肩马特乌斯,意大利队长已是传奇