生信Python基因组学

python操作gff格式注释文件的简单小例子

2021-06-19  本文已影响0人  小明的数据分析笔记本

这里借助biopython模块

参考链接是 https://biopython.org/wiki/GFF_Parsing

这里BCBio模块里GFF()函数解析的内容和Bio模块里SeqIO()函数解析的内容很像

cds和外显子的关系

cds 是 coding sequence 的缩写

具体关系看下图 来自链接 https://www.jianshu.com/p/cc5cd7053d6e

image.png

开头结尾的外显子区可能会比cds长 ,因为开头结尾的外显子可能包括 UTR,非翻译区

处于中间的外显子和cds等同

首先是根据gff文件获取每条染色体的长度
from BCBio import GFF
in_handle = open("tunisia.gff",'r')
for rec in GFF.parse(in_handle):
    for feature in rec.features:
        if feature.type == "region":
            chromo = feature.qualifiers['ID'][0]
            chrid = chromo.split(":")[0]
            chrLen = chromo.split("..")[1]
            print(chrid,chrLen)

这里你的ID可能需要换成其他,这个得根据具体gff文件的内容定

image.png
获取gff文件里的基因都有哪些类型
from BCBio import GFF
from collections import Counter

biotype = []

in_handle = open("tunisia.gff",'r')

for rec in GFF.parse(in_handle):
    for feature in rec.features:
        if feature.type == "gene":
            biotype.append(feature.qualifiers['gene_biotype'][0])
            
in_handle.close()
len(biotype)
biotype[0:15]

Counter(biotype)
image.png
统计每个蛋白编码基因有几个转录本

这里需要记住的是每个feature对应的还有sub_feature这个是和SeqIO解析genbank文件有差别的地方

gene对应的 sub_featuresmRNA,mRNA对应的sub_featuresexon或者cds

in_handle = open("pra-2.gff",'r')

for rec in GFF.parse(in_handle):
    for feature in rec.features:
        if feature.type == "gene":
            gene_name = feature.qualifiers["gene"][0]
            i = 0
            for subfeature in feature.sub_features:
                i = i + 1
            print(gene_name, i)
image.png
去除指定基因类型的注释文件,

比如这个例子是去除注释文件中的所有蛋白编码基因

in_handle = open("tunisia.gff",'r')

fw = open("pra-3.gff",'w')

for rec in GFF.parse(in_handle):
    tmp = rec.features
    i = 0
    index2delete = []
    for feature in rec.features:
        i = i + 1
        if feature.type == "gene" and feature.qualifiers["gene_biotype"][0] == "protein_coding":
            index2delete.append(i-1)
    for counter,index in enumerate(index2delete):
        index = index - counter
        tmp.pop(index)
        
    rec.features = tmp
    GFF.write([rec],fw)
    
fw.close()

这里用到按照索引删除列表中的元素 ,这个逻辑暂时没有想明白,代码是

list_given = [1, 2, 3, 4, 5, 6, 7, 8, 9]
index_to_delete = [1, 3, 6]

for counter, index in enumerate(index_to_delete):
    index = index - counter
    list_given.pop(index)
————————————————
版权声明:本文为CSDN博主「CAAT9」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/exm_further/article/details/112251558

好了今天的内容暂时先到这里了

欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!

上一篇下一篇

猜你喜欢

热点阅读