python解析gff文件中的转录本

系统 2233 0

1.下载基因组注释文件,选择对应的版本: ftp://ftp.ncbi.nlm.nih.gov/genomes/Homo_sapiens/ARCHIVE/BUILD.37.3/GFF/ 

2.GTF 为General Transfer Format ,熟悉格式 http://www.huoyunjn.com/wuliuxinwen/2/33709819.htm。

第三列 feature  - 后面start和end之间区域代表的特征,如果此区域是基因,则此处为gene,如果是外显子,则为exon,如果是转录本,则为transcript,如果是非编码RNA则为lncRNA,如果是重复序列,则为TE,等等,主要表明这一块区域的特征。

3.每一个transcript对应的exon,所有长度加起来就是这个转录本的长度。与这个transcript后面的两列相减是有差别的。

4.用python 字典来统计每个转录本的长度。

            
              import pandas as pd
import pdb
df = pd.read_table(r'C:\Users\guosheng\Desktop\out.gff',sep = '\t',header= None)
out=open('./out.txt','a')
df =df[df.iloc[:,2].str.contains('exon')]  #提取第三列为exon的行
df['diff'] =df.iloc[:,4]-df.iloc[:,3]+1 #每个外显子的长度
name =  list(df.iloc[:,2])  #把data.frame中的一列转换为list
des =list(df.iloc[:,8])
length = list(df['diff'])   
dic ={}      
for index,value in enumerate(name):
    key=des[index].split(';')[-1].split('=')[-1] #获取每个转录本的名字
    old=0
    new=length[index]
    if dic.has_key(key):       #判断这个key是否在原有的字典中
        old=dic[key]
        del(dic[key])
    dic[key]=int(old)+int(new)
#print dic
for tran in dic:
    out.write(tran+'\t'+str(dic[tran])+'\n')
out.flush()
out.close()

            
          

5.后续找出每个基因的所有转录本,用heapq库找出最长的一个。库用法https://blog.csdn.net/Cassiel60/article/details/88344137

同样是解析这个文件,可以看出文件中的id是根据第三列进行编号的,没有实际意义,只是可以看出共有多少个gene、exon、cds等。不过在第三列为gene时,Name=和Dbxref=GeneID: 与第四列为exon时,Dbxref=GeneID:和transcript_id=进行基因与转录本的正确匹配。可以在上面代码中的字典加入Dbxref=,字典中一键对应多个值。

6.得到的两个文件进行merge,就可以得到基因,转录本,长度的文件了。

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论