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)

参考资料:

  1. Method: GFF/GTF conversion and differences
  2. NGS数据格式之gff/gtf
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 原文:http://blog.sina.com.cn/s/blog_751bd9440102v72b.html 一...
    简单点lili阅读 4,070评论 0 8
  • fastafasta格式是最基本的表示序列信息(核苷酸或者蛋白质)的格式。这里简单介绍下,fasta格式的文件通常...
    tianzhanlan阅读 4,804评论 0 10
  • 我们在做生物分析的时候,经常会碰到GFF格式的文件以及GTF格式的注释文件。他们有着相似的名字,甚至连内容都极为相...
    dasdadf阅读 52,905评论 4 63
  • 慢慢看,憋着急!很有用! 前言: 首先呢,在你的Linux系统中新建一个文件,Thanos.txt(紫薯侠赐予你力...
    刘小泽阅读 3,269评论 6 33
  • 英雄兮项羽,这天下之主不要也罢,就留给那工于心计的刘邦,上天入地,碧落黄泉,自有你遨游之处。 —— 题记 项羽究竟...
    幽幽墨叹阅读 373评论 0 0