生信编程5. 根据GTF文件绘制多个转录本结构

有一些五六年前的学生们都成长为了各个生物信息学相关公司的小领导,而且他们都有了自己的公众号,知乎号,也算是一番人物。最近他们跟我反馈面试找不到或者说很难直接考核筛选到认真干活的生信工程师,挺有意思的。让我想起来了早在生信技能树论坛创立之初我为了引流,而规划的200个生信工程师面试题。值得继续分享:

200个生信工程师面试考题

生信菜鸟入门需要跨过的3个障碍:

  1. 了解数据背后的生物学意义,每个生物学数据都有背后的生物学意义
  2. 编写代码的能力
  3. 使用公共软件的能力

1. 使用R语言绘制

rm(list = ls())

gtf_1 <- read.table("/Users/duanshumeng/段舒檬/曾老师任务/生信编程/gencode.v32.annotation.gtf",sep = "\t",
                    stringsAsFactors = F,header = F)
  
gtf <- gtf_1[1:10000,]
#查看基因的来源,如果是多个数据库,取一个就够了
table(gtf[,2])
gtf <- gtf[gtf[,2]=="HAVANA",]
#只想要蛋白质编码的蛋白
gtf<- gtf[grepl("protein_coding",gtf[,9]),]

#取出基因的名称,关键步骤
library(stringr)
gtf$gene = lapply(gtf[,9], function(x){
  if (length(unlist(strsplit(x,';')))==6){
    str_split(str_split(x,'\\;',simplify = T)[,3],'\\ ',simplify = T)[,3]
  } else{
    str_split(str_split(x,'\\;',simplify = T)[,4],'\\ ',simplify = T)[,3]
  }
})

#将绘图步骤包装成一个函数,可以多次使用
draw_gene_graph <- function(draw_gene,gtf){
  structure = gtf[gtf$gene==draw_gene,]
  colnames(structure) = c(
    'chr','db','record','start','end','tmp1','tmp2','tmp3','tmp4','gene'
  )
  
  tmp_min = min(c(structure$start,structure$end))
  structure$new_start = structure$start - tmp_min
  structure$new_end = structure$end - tmp_min
  tmp_max = max(c(structure$new_start,structure$new_end))
  num_transcripts = nrow(structure[structure$record=="transcript",])
  tmp_color = rainbow(num_transcripts)
  x=1:tmp_max;y=rep(num_transcripts,length(x))
  
  plot(x,y,type = 'n',xlab = '',ylab = '',ylim = c(0,num_transcripts+1))
  
  title(main = draw_gene,sub = paste(structure[structure$record=="gene",]$chr,":",
                                     structure[structure$record=="gene",]$start,
                                     "-",structure[structure$record=="gene",]$end,sep = ""))
  j=0;
  tmp_legend= c()
  
  for (i in 1:nrow(structure)){
    tmp = structure[i,]
    if(tmp$record == "transcript"){
      j = j+1
      tmp_legend = c(tmp_legend,paste("chr",tmp$chr,":",
                                      tmp$end,sep = ""))
    }
    if(tmp$record == "exon") lines(c(tmp$new_start,tmp$new_end),c(j,j),
                                   col=tmp_color[j],lwd=5)
  }
  
  
}

#挑选一个基因绘图
draw_gene_graph("SAMD11",gtf)

结果图:

GTF_gene_plot.Rplot

2. 使用python的gffutils绘制

gffutils介绍

gffutils是一个使用分层方式对GFF和GTF文件进行处理python模块。

pip3 install gffutils
pip3 install bcbio-gff

#1. 从gtf中提取目的基因的信息
grep -iw "DDX11L16" gencode.v32.annotation.gtf > DDX11L16.gtf

#2. 读取目标gtf文件
import gffutils
import os
import matplotlib.pyplot as plt

os.listdir()
fn = gffutils.example_filename(os.getcwd()+'/'+'DDX11L1.gtf')
db = gffutils.create_db(fn,dbfn='DDX11L1.db',force=True,keep_order=True,merge_strategy='merge',sort_attribute_values=True)

db = gffutils.FeatureDB('DDX11L1.db',keep_order=True)

gene = db['ENSG00000227159.8_PAR_Y'] #根据基因ID取出基因
gene.start
gene.end

transcripts = []
for i in db.children(gene,featuretype='transcript',order_by='start'):
  transcripts.append(i)

exons = []
for i in db.children(gene,featuretype='exon',order_by='start'):
  exons.append(i)

for i in exons:
   plt.hlines(y=1,xmin=i.start-gene.start, i.end=gene.end)

plt.show()

文末友情推荐

(0)

相关推荐

  • 转录组学习四(参考基因组及gtf注释探究)

    转录组学习一(软件安装)转录组学习二(数据下载)转录组学习三(数据质控)转录组学习四(参考基因组及gtf注释探究)转录组学习五(reads的比对与samtools排序)转录组学习六(reads计数与标 ...

  • GFF和GTF的异同及相互转换

    GFF(gff)全称为:general feature format GTF(gtf)全称为:gene transfer format 前者用来注释基因组,后者用来注释基因. 异同点: GTF文件和G ...

  • NGS基因检测Panel的探针设计

    背景 目前市面上的肿瘤靶向用药基因检测Panel已非常常见,除了直观层面的gene种类.数目.捕获建库方法的不同外,对于肿瘤panel, 探针定制之初相关的MSI位点.融合断点等设计,直接影响着同一个 ...

  • 生信编程11.根据gtf格式的基因注释文件提取人所有基因的染色体坐标

    有一些五六年前的学生们都成长为了各个生物信息学相关公司的小领导,而且他们都有了自己的公众号,知乎号,也算是一番人物.最近他们跟我反馈面试找不到或者说很难直接考核筛选到认真干活的生信工程师,挺有意思的. ...

  • 生信编程直播第11题:把文件内容按照染色体分开写出

    问题描述这个需求很常见,因为一般生物信息学数据比较大,比如sam,vcf,或者gtf,bed都是把所有染色体综合在一起的文件.如果想根据染色体把大文件拆分成小的文件呢?比如:ftp://ftp.ncb ...

  • 生信编程​9.bedtools从bam文件中提取目的序列

    有一些五六年前的学生们都成长为了各个生物信息学相关公司的小领导,而且他们都有了自己的公众号,知乎号,也算是一番人物.最近他们跟我反馈面试找不到或者说很难直接考核筛选到认真干活的生信工程师,挺有意思的. ...

  • 生信编程18.把文件内容按照染色体分开写出

    有一些五六年前的学生们都成长为了各个生物信息学相关公司的小领导,而且他们都有了自己的公众号,知乎号,也算是一番人物.最近他们跟我反馈面试找不到或者说很难直接考核筛选到认真干活的生信工程师,挺有意思的. ...

  • 生信编程直播第七题:写超几何分布检验!

    下载数据 切换到工作目录:cd d/生信技能树-视频直播/第七讲 kegg2gene(第六讲kegg数据解析结果) 暂时不用新的kegg注释数据为了能够统一答案 差异基因list和背景基因list 关 ...

  • 生信编程直播课程优秀学员作业展示1

    题目 人类基因组外显子区域长度 学员:x2yline 具体题目详情请参考生信技能树论坛 题目数据来源为:ftp://ftp.ncbi.nlm.nih.gov/pub/CCDS/current_huma ...

  • 生信编程直播课程优秀学员学习心得及作业展示3

    学习感悟 首先说明一下,我不算是完全从0开始学习,因为生物的知识和python的语言之前都知道一点,但说实话,我的python距离真正的实践还差的很远,也没有常用所以基本忘完. 真的很感谢群主和老师们 ...

  • 生信编程直播课程优秀学员作业展示2

    题目:hg19基因组序列的一些探究 学员:x2yline 具体题目详情请参考生信技能树论坛 数据来源:http://hgdownload.cse.ucsc.edu/goldenPath/hg19/bi ...

  • 生信编程直播第0题-生信编程很简单!

    貌似顺序有点怪异,我们都把1~8题给讲解完了,现在才开始第0题,很明显,这个是临时加入的,因为有很多没有编程基础的朋友也开始跟着我们学习了. 还不知道怎么回事的先查看历史题目: 生物信息学技能面试题( ...