如何快速从基因组中提取基因、转录本、蛋白、启动子、非编码序列?

本文主要是介绍如何快速从基因组中提取基因、转录本、蛋白、启动子、非编码序列?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有读者留言想要提取外显子,内含子,启动子,基因体,非编码区,编码区,TSS上游1500,TSS下游500的序列。下面我们就来示范如何提取这些序列。

NGS基础 - 参考基因组和基因注释文件提到了如何下载对应的基因组序列和基因注释文件。

假如我们已经拿到了基因组序列文件GRCh38.fa和基因注释文件GRCh38.gtf,也可从文后链接获取。

查看下文件内容和格式

基因组序列文件为FASTA格式,查看命令和内容如下(测试文件,只有1条染色体):

# 查看前10行,每行查看前40个字符
# FASTA序列一般比较长,查看前面一部分字符是一个常用的方式
head GRCh38.fa | cut -c 1-40
>chr20
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

基因注释文件为GTF格式,只看前6列信息(第三列包含了不同的元件注释)

cut -f 1-6 GRCh38.gtf | head
chr20    ensembl_havana    gene    87250    97094    .
chr20    havana    transcript    87250    97094    .
chr20    havana    exon    87250    87359    .
chr20    havana    exon    96005    97094    .
chr20    ensembl_havana    transcript    87710    96533    .
chr20    ensembl_havana    exon    87710    87767    .
chr20    ensembl_havana    CDS    87710    87767    .
chr20    ensembl_havana    start_codon    87710    87712    .
chr20    ensembl_havana    exon    96005    96533    .
chr20    ensembl_havana    CDS    96005    96414    .

安装提取工具gffread

这里用到了gffread (https://github.com/gpertea/gffread),安装方式如下 (若不理解,见这个为生信学习打造的开源Linux教程真香的软件安装部分):

git clone https://github.com/gpertea/gffread
cd gffread
make release

提取转录本序列、CDS和蛋白序列

gffread -h可以参考所有可用参数,如果有特殊情况需要考虑的,还需配合其它参数使用。

1.获取转录本序列

gffread GRCh38.gtf -g GRCh38.fa -w GRCh38.transcripts.fa

内容如下:

head GRCh38.transcripts.fa
>ENST00000608838
ACAGGAATTCATATCGGGGTGATCACTCAGAAGAAAAGGTGAATACCGGATGTTGTAAGCTATTGAACTG
CCACAAGTGATATCTTTACACACCATTCTGCTGTCATTGGGTAGCTTTGAACCCCAAAAATGTTGGAAGA
ATAATGTAGGACATTGCAGAAGACGATGTTTAGATACTGAAAGGTACATACTTCTTTGTAGGAACAAGCT
ATCATGCTGCATTTCTATAATATCACATGAATATACTCGACGACCAGCATTTCCTGTGATTCACCTAGAG

2.获取CDS序列

# 获取CDS序列
gffread GRCh38.gtf -g GRCh38.fa -x GRCh38.cds.fa

内容如下

head GRCh38.cds.fa
>ENST00000382410
ATGAATATCCTGATGCTGACCTTCATTATCTGTGGGTTGCTAACTCGGGTGACCAAAGGTAGCTTTGAAC
CCCAAAAATGTTGGAAGAATAATGTAGGACATTGCAGAAGACGATGTTTAGATACTGAAAGGTACATACT
TCTTTGTAGGAACAAGCTATCATGCTGCATTTCTATAATATCACATGAATATACTCGACGACCAGCATTT
CCTGTGATTCACCTAGAGGATATAACATTGGATTATAGTGATGTGGACTCTTTTACTGGTTCCCCAGTAT
CTATGTTGAATGATCTGATAACATTTGACACAACTAAATTTGGAGAAACCATGACACCTGAGACCAATAC
TCCTGAGACTACTATGCCACCATCTGAGGCCACTACTCCCGAGACTACTATGCCACCATCTGAGACTGCT
ACTTCCGAGACTATGCCACCACCTTCTCAGACAGCTCTTACTCATAATTAA
>ENST00000382398
ATGAAGTCCCTACTGTTCACCCTTGCAGTTTTTATGCTCCTGGCCCAATTGGTCTCAGGTAATTGGTATG

3.获取蛋白序列

# 获取蛋白序列
gffread GRCh38.gtf -g GRCh38.fa -y GRCh38.protein.fa

内容如下

head GRCh38.protein.fa
>ENST00000382410
MNILMLTFIICGLLTRVTKGSFEPQKCWKNNVGHCRRRCLDTERYILLCRNKLSCCISIISHEYTRRPAF
PVIHLEDITLDYSDVDSFTGSPVSMLNDLITFDTTKFGETMTPETNTPETTMPPSEATTPETTMPPSETA
TSETMPPPSQTALTHN
>ENST00000382398
MKSLLFTLAVFMLLAQLVSGNWYVKKCLNDVGICKKKCKPEEMHVKNGWAMCGKQRDCCVPADRRANYPV
FCVQTKTTRISTVTATTATTTLMMTTASMSSMAPTPVSPTG
>ENST00000382388
MGLFMIIAILLFQKPTVTEQLKKCWNNYVQGHCRKICRVNEVPEALCENGRYCCLNIKELEACKKITKPP
RPKPATLALTLQDYVTIIENFPSLKTQST

解析GTF文件的结构

针对本GTF,对于gene元件,基因名字 (Gene symbol)在第14列。

head -n 1 GRCh38.gtf | sed 's/"/\t/g' | tr '\t' '\n' | sed = | sed 'N;s/\n/\t/'
1    chr20
2    ensembl_havana
3    gene
4    87250
5    97094
6    .
7    +
8    .
9    gene_id 
10    ENSG00000178591
11    ; gene_version 
12    6
13    ; gene_name 
14    DEFB125
15    ; gene_source 
16    ensembl_havana
17    ; gene_biotype 
18    protein_coding
19    ;

针对本GTF,对于transcript元件,基因名字 (Gene symbol)在第18列。

sed -n '2p' GRCh38.gtf | sed 's/"/\t/g' | tr '\t' '\n' | sed = | sed 'N;s/\n/\t/'
1    chr20
2    havana
3    transcript
4    87250
5    97094
6    .
7    +
8    .
9    gene_id 
10    ENSG00000178591
11    ; gene_version 
12    6
13    ; transcript_id 
14    ENST00000608838
15    ; transcript_version 
16    1
17    ; gene_name 
18    DEFB125
19    ; gene_source 
20    ensembl_havana
21    ; gene_biotype 
22    protein_coding
23    ; transcript_name 
24    DEFB125-202
25    ; transcript_source 
26    havana
27    ; transcript_biotype 
28    processed_transcript
29    ; transcript_support_level 
30    2
31    ;

这个查看信息在哪一列是很常用的检查文件结构提取对应信息的方式,简化为一个脚本checkCol.sh

检查某个文件的指定行(默认为第一行)

checkCol.sh -f GRCh38.gtf1    chr20
2    ensembl_havana
3    gene
4    87250
5    97094
6    .
7    +
8    .
9    gene_id "ENSG00000178591"; gene_version "6"; gene_name "DEFB125"; gene_source "ensembl_havana"; gene_biotype "protein_coding";

检查标准输入的第一行

sed 's/"/\t/g' GRCh38.gtf | checkCol.sh -f -
1    chr20
2    ensembl_havana
3    gene
4    87250
5    97094
6    .
7    +
8    .
9    gene_id 
10    ENSG00000178591
11    ; gene_version 
12    6
13    ; gene_name 
14    DEFB125
15    ; gene_source 
16    ensembl_havana
17    ; gene_biotype 
18    protein_coding
19    ;

提取基因启动子序列

首先确定启动子区域,这里定义转录起始位点上游1000 bp和下游500 bp为启动子区域。

sed 's/"/\t/g' GRCh38.gtf | awk 'BEGIN{OFS=FS="\t"}{if($3=="gene") {if($7=="+") {start=$4-1000; end=$4+500;} else {if($7=="-") start=$5-500; end=$5+1000; } if(start<0) start=0; print $1,start,end,$14,$10,$7;}}' >GRCh38.promoter.bed

启动子区域如下 (这个bed文件也可以用于ChIP-seq类型的数据分析确定peak是否在启动子区域)

head GRCh38.promoter.bed
chr20    86250    87750    DEFB125    ENSG00000178591    +
chr20    141369    142869    DEFB126    ENSG00000125788    +
chr20    156470    157970    DEFB127    ENSG00000088782    +
chr20    189181    190681    DEFB128    ENSG00000185982    -
chr20    226258    227758    DEFB129    ENSG00000125903    +
chr20    256736    258236    DEFB132    ENSG00000186458    +
chr20    266186    267686    AL034548.1    ENSG00000272874    +
chr20    290278    291778    C20orf96    ENSG00000196476    -
chr20    295968    297468    ZCCHC3    ENSG00000247315    +
chr20    347724    349224    NRSN2-AS1    ENSG00000225377    -

然后提取序列。这里用到了bedtools工具,官方有提供编译好的二进制文件,下载下来即可使用。

# -name: 输出基因名字(bed文件的第四列)
# -s: 考虑到正反链(对于启动子区域,是否考虑链的信息关系不太大)
bedtools getfasta -name -s -fi GRCh38.fa -bed GRCh38.promoter.bed >GRCh38.promoter.fa

序列信息如下:

head GRCh38.promoter.fa | cut -c 1-60
>DEFB125::chr20:86250-87750(+)
ATAATTTGAAGTGAGGTAATGTGATTCCTCTAGTTTTGTTCTTTTTGCTTAGGATGGCTT
>DEFB126::chr20:141369-142869(+)
AATATTCAAGAGAATGCCAAGAAAGCTACAAGAACAAATAGCAGGTCAGTCGTTGCCTGG
>DEFB127::chr20:156470-157970(+)
ATATCCGTCACCTCAAACATTTATCATTTGTATTGGGAACATTCAAAATCCTCTCTTCTA
>DEFB128::chr20:189181-190681(-)
AAAAAAGAAAAAGAACTCCAAGTCTAATAAGACCAGAGACCTGCCCTTTATGGGTCTGCA
>DEFB129::chr20:226258-227758(+)
GAGTGGAAGGTGGGAGGAGGGAGAGGATGAGGAAAAATAACTAATGGACACTAGGCTTAA

如果不想要坐标信息,可对序列名字做一下简化

cut -d ':' -f 1 GRCh38.promoter.fa >GRCh38.promoter.simplename.fa
head GRCh38.promoter.simplename.fa | cut -c 1-60
>DEFB125
ATAATTTGAAGTGAGGTAATGTGATTCCTCTAGTTTTGTTCTTTTTGCTTAGGATGGCTT
>DEFB126
AATATTCAAGAGAATGCCAAGAAAGCTACAAGAACAAATAGCAGGTCAGTCGTTGCCTGG
>DEFB127
ATATCCGTCACCTCAAACATTTATCATTTGTATTGGGAACATTCAAAATCCTCTCTTCTA
>DEFB128
AAAAAAGAAAAAGAACTCCAAGTCTAATAAGACCAGAGACCTGCCCTTTATGGGTCTGCA
>DEFB129
GAGTGGAAGGTGGGAGGAGGGAGAGGATGAGGAAAAATAACTAATGGACACTAGGCTTAA

提取基因序列

提取基因序列的操作也类似于提取启动子序列。这里要注意GFF文件的序列位置是从1开始,而bed文件的位置是从0开始,前闭后开,所以要对序列的起始位置进行-1的操作。

type="gene"
sed 's/"/\t/g' GRCh38.gtf | awk -v type="${type}" 'BEGIN{OFS=FS="\t"}{if($3==type) {print $1,$4-1,$5,$14,".",$7}}' >GRCh38.gene.bed
head GRCh38.gene.bed
chr20    87249    97094    DEFB125    .    +
chr20    142368    145751    DEFB126    .    +
chr20    157469    159163    DEFB127    .    +
chr20    187852    189681    DEFB128    .    -
chr20    227257    229886    DEFB129    .    +
chr20    257735    261096    DEFB132    .    +

提取基因序列

bedtools getfasta -name -s -fi GRCh38.fa -bed GRCh38.gene.bed >GRCh38.gene.fa
# 查看序列
head GRCh38.gene.fa | cut -c 1-60
>DEFB125::chr20:87249-97094(+)
ACAGGAATTCATATCGGGGTGATCACTCAGAAGAAAAGGTGAATACCGGATGTTGTAAGC
>DEFB126::chr20:142368-145751(+)
GCCATACACTTCAGCAGAGTTTGCAACTTCTCTTCTAAGTCTTTATCCTTCCCCCAAGGC
>DEFB127::chr20:157469-159163(+)
CTCTGAGGAAGGTAGCATAGTGTGCAGTTCACTGGACCAAAAGCTTTGGCTGCACCTCTT
>DEFB128::chr20:187852-189681(-)
GGCACACAGACCACTGGACAAAGTTCTGCTGCCTCTTTCTCTTGGGAAGTCTGTAAATAT

提取非编码RNA的序列

在GTF文件中有转录本类型的注释,包含下面这些注释类型

ntisense_RNA
lincRNA
miRNA
misc_RNA
processed_pseudogene
processed_transcript
protein_coding
rRNA
scaRNA
sense_intronic
sense_overlapping
snoRNA
snRNA
TEC
transcribed_processed_pseudogene
transcribed_unitary_pseudogene
transcribed_unprocessed_pseudogene
unitary_pseudogene
unprocessed_pseudogene

我们只筛选lincRNA

grep 'transcript_biotype "lincRNA"' GRCh38.gtf >GRCh38.lincRNA.gtf
gffread GRCh38.lincRNA.gtf -g GRCh38.fa -w GRCh38.lincRNA.fahead GRCh38.lincRNA.fa | cut -c 1-60
>ENST00000608495
GTCGCACGCGCTGGCCAAACGGGCGCACCAGACACTTTTCAGGGCCCTGCCAAAGACCTC
CTGGCGTCCCAGACACAAGAGATCCAGGCCAAGACTCACACTTCACAAGATACACAGACA
GGAACAGGAAATTCCATGAAACTTCCATTTACCCAATTAGCCGGACTCACTGAGCCCCAG
TCAACCAACTCCTACTAAAATTAAAAAGTAATGTGTGGTATAGATTGGAATAATAGACAT
AAACGATGGGAGGCGGAGAGGGGTGAGGGTTGAAAAATTACCTATTGGGTGCAACATTCA
AATGGGGCACTAGAAGCCCACTCCACCACTATGCAATATATGTATTTGTACCCCGTAAAT

提取一个个外显子序列

获取外显子的坐标

t

ype="exon"
sed 's/"/\t/g' GRCh38.gtf | awk -v type="${type}" 'BEGIN{OFS=FS="\t"}{if($3==type) {print $1,$4-1,$5,$14,$20,$7}}' >GRCh38.exon.bed
# 查看文件内容
head GRCh38.exon.bed
chr20    87249    87359    ENST00000608838    DEFB125    +
chr20    96004    97094    ENST00000608838    DEFB125    +
chr20    87709    87767    ENST00000382410    DEFB125    +
chr20    96004    96533    ENST00000382410    DEFB125    +
chr20    142368    142686    ENST00000382398    DEFB126    +
chr20    145414    145751    ENST00000382398    DEFB126    +
chr20    142633    142686    ENST00000542572    DEFB126    +
chr20    145414    145488    ENST00000542572    DEFB126    +
chr20    145578    145749    ENST00000542572    DEFB126    +
chr20    157469    157593    ENST00000382388    DEFB127    +

提取序列

# -name: 输出基因名字(bed文件的第四列)
# -s: 考虑到正反链(对于启动子区域,是否考虑链的信息关系不太大)
bedtools getfasta -name -s -fi GRCh38.fa -bed GRCh38.exon.bed >GRCh38.exon.fa# 查看序列信息
head GRCh38.exon.fa | cut -c 1-60
>ENST00000608838::chr20:87249-87359(+)
ACAGGAATTCATATCGGGGTGATCACTCAGAAGAAAAGGTGAATACCGGATGTTGTAAGC
>ENST00000608838::chr20:96004-97094(+)
GTAGCTTTGAACCCCAAAAATGTTGGAAGAATAATGTAGGACATTGCAGAAGACGATGTT
>ENST00000382410::chr20:87709-87767(+)
ATGAATATCCTGATGCTGACCTTCATTATCTGTGGGTTGCTAACTCGGGTGACCAAAG
>ENST00000382410::chr20:96004-96533(+)
GTAGCTTTGAACCCCAAAAATGTTGGAAGAATAATGTAGGACATTGCAGAAGACGATGTT

提取一个个内含子序列

确定内含子区域

sed 's/"/\t/g' GRCh38.gtf | awk 'BEGIN{OFS=FS="\t";oldtr="";}{if($3=="exon") {tr=$14; if(oldtr!=tr) {start=$5; oldtr=tr;} else {print $1,start,$4-1,tr,$20,$7; start=$5;} } }' >GRCh38.intron.bed
# 查看文件内容
head GRCh38.intron.bed
chr20    87359    96004    ENST00000608838    DEFB125    +
chr20    87767    96004    ENST00000382410    DEFB125    +
chr20    142686    145414    ENST00000382398    DEFB126    +
chr20    142686    145414    ENST00000542572    DEFB126    +
chr20    145488    145578    ENST00000542572    DEFB126    +
chr20    157593    158773    ENST00000382388    DEFB127    +
chr20    189681    187852    ENST00000334391    DEFB128    -
chr20    227346    229277    ENST00000246105    DEFB129    +

提取序列同上。

这篇关于如何快速从基因组中提取基因、转录本、蛋白、启动子、非编码序列?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055121

相关文章

Python自动化提取多个Word文档的文本

《Python自动化提取多个Word文档的文本》在日常工作和学习中,我们经常需要处理大量的Word文档,本文将深入探讨如何利用Python批量提取Word文档中的文本内容,帮助你解放生产力,感兴趣的小... 目录为什么需要批量提取Word文档文本批量提取Word文本的核心技术与工具安装 Spire.Doc

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

SpringCloud Stream 快速入门实例教程

《SpringCloudStream快速入门实例教程》本文介绍了SpringCloudStream(SCS)组件在分布式系统中的作用,以及如何集成到SpringBoot项目中,通过SCS,可... 目录1.SCS 组件的出现的背景和作用2.SCS 集成srping Boot项目3.Yml 配置4.Sprin

SpringBoot集成iText快速生成PDF教程

《SpringBoot集成iText快速生成PDF教程》本文介绍了如何在SpringBoot项目中集成iText9.4.0生成PDF文档,包括新特性的介绍、环境准备、Service层实现、Contro... 目录SpringBoot集成iText 9.4.0生成PDF一、iText 9新特性与架构变革二、环

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS

Java轻松实现在Excel中插入、提取或删除文本框

《Java轻松实现在Excel中插入、提取或删除文本框》在日常的Java开发中,我们经常需要与Excel文件打交道,当涉及到Excel中的文本框时,许多开发者可能会感到棘手,下面我们就来看看如何使用J... 目录Java操作Excel文本框的实战指南1. 插入Excel文本框2. 提取Excel文本框内容3

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W