如何获取目标基因的转录因子(下)——Linux命令获取目标基因TF
如何获取目标基因的转录因子(上)一文中我们以人类基因组为例,从ensemble网站下载了基因组中基因位置信息矩阵GRCh38.gene.bed
和基因组中转录因子结合位点信息矩阵GRCh38.TFmotif_binding.bed)
我们知道有很多数据库可以查找启动子、UTR、TSS等区域以及预测转录因子结合位点,但是怎么用Linux命令处理基因信息文件来得到关注基因的启动子和启动子区结合的TF呢?
1. 基础回顾
转录起始位点(TSS):转录时,mRNA链第一个核苷酸相对应DNA链上的碱基,通常为一个嘌呤;(不考虑转录启动复合体的预转录情况)
启动子(promoter):与RNA聚合酶结合并能起始mRNA合成的序列。与传统的核心启动子概念不同,做生信分析时,一般选择转录起始位点上游1 kb,下游 200 nt,也有选上下游各1 kb或者 2 kb的(记住这两个数,之后计算要用到);总体上生信中选择的启动子更长,范围更广一些。
文件准备:感兴趣的基因列表(命名为targetGene.list
)、还有上一期下载的GRCh38.gene.bed
和GRCh38.TFmotif_binding.bed
2. 文件格式处理
删除文件GRCh38.gene.bed
首行,第六列正负链表示形式改为-
和+
,并在第一列染色体位置加上chr
sed -i '1d' GRCh38.gene.bed
# 如果用sed,注意下面2列的顺序,为什么不能颠倒过来?
sed -i 's/-1$/-/' GRCh38.gene.bed
sed -i 's/1$/+/' GRCh38.gene.bed
sed -i 's/^/chr/' GRCh38.gene.bed
删除文件GRCh38.TFmotif_binding.bed
首行,并在第一列染色体位置加上chr
sed -i '1d' GRCh38.TFmotif_binding.bed
sed -i 's/^/chr/' GRCh38.TFmotif_binding.bed
less -S filename
查看一下两个矩阵内容,发现已转换完成
chr3 124792319 124792562 ENSG00000276626 RF00100 -
chr1 92700819 92700934 ENSG00000201317 RNU4-59P -
chr14 100951856 100951933 ENSG00000200823 SNORD114-2 +
chr22 45200954 45201019 ENSG00000221598 MIR1249 -
chr1 161699506 161699607 ENSG00000199595 RF00019 +
chr14 23034888 23034896 7.391 THAP1
chr3 10026599 10026607 7.054 THAP1
chr10 97879355 97879363 6.962 THAP1
chr3 51385016 51385024 7.382 THAP1
chr16 20900537 20900545 6.962 THAP1
3. 计算基因的启动子区
上面已提过,根据经验一般启动子区域在转录起始位点(TSS)上游1 kb、下游 200 nt处,注意正负链的运算方式是不一样的,切忌出错。
awk 'BEGIN{OFS=FS="\t"}{if($6=="+") {tss=$2; tss_up=tss-1000; tss_dw=tss+200;} else {tss=$3; tss_up=tss-200; tss_dw=tss+1000;} if(tss_up<0) tss_up=0;print $1, tss_up, tss_dw,$4,$5,$6;}' GRCh38.gene.bed > GRCh38.gene.promoter.U1000D200.bed
关于awk
命令的使用方法,可以参考Linux学习 - 常用和不太常用的实用awk命令一文。
head GRCh38.gene.bed GRCh38.gene.promoter.U1000D200.bed
检查一下计算是否有误。自己选取正链和负链的一个或多个基因做下计算,看看结果是否一致。做分析不是出来结果就完事了,一定谨防程序中因为不注意核查引起的bug。
==> GRCh38.gene.bed <==
chr3 124792319 124792562 ENSG00000276626 RF00100 -
chr1 92700819 92700934 ENSG00000201317 RNU4-59P -
chr14 100951856 100951933 ENSG00000200823 SNORD114-2 +
chr22 45200954 45201019 ENSG00000221598 MIR1249 -
chr1 161699506 161699607 ENSG00000199595 RF00019 +
==> GRCh38.gene.promoter.U1000D200.bed <==
chr3 124792362 124793562 ENSG00000276626 RF00100 -
chr1 92700734 92701934 ENSG00000201317 RNU4-59P -
chr14 100950856 100952056 ENSG00000200823 SNORD114-2 +
chr22 45200819 45202019 ENSG00000221598 MIR1249 -
chr1 161698506 161699706 ENSG00000199595 RF00019 +
4. 取两文件的交集
本条命令我们使用了bedtools
程序中的子命令intersect
intersect
可用来求区域之间的交集,可以用来注释peak,计算reads比对到的基因组区域不同样品的peak之间的peak重叠情况;Bedtools使用简介一文中有关于bedtools的详细介绍;
两文件取完交集后,cut -f
取出交集文件的第5列和第11列,sort -u
去处重复项,并将这两列内容小写全转变为大写,最终得到一个两列的文件。第一列是基因名,第二列是能与基因结合的TF名字。
程序不细解释,具体看文后的Linux系列教程。Bedtools使用简介
# cut时注意根据自己的文件选择对应的列
# tr转换大小写。
bedtools intersect -a GRCh38.gene.promoter.U1000D200.bed -b GRCh38.TFmotif_binding.bed -wa -wb | cut -f 5,11 | sort -u | tr 'a-z' 'A-Z' > GRCh38.gene.promoter.U1000D200.TF_binding.txt
5. 提取我们关注的基因
上一步中,我们将GRCh38.gene.promoter.U1000D200.TF_binding.txt
文件中的基因名和TF名都转换成了大写。
为了接下来提取目标基因转录因子时不会因大小写差别而漏掉某些基因,我们将targetGene.list
中的基因名也全部转换成大写。
# 基因名字转换为大写,方便比较。不同的数据库不同的写法,只有统一了才不会出现不必要的失误
tr 'a-z' 'A-Z' targetGene.list > GeneUP.list
目标基因列表和基因-TF对应表都好了,内容依次如下:
==> GeneUP.list <==
ACAT2
ACTA1
ACTA2
ADM
AEBP1
==> GRCh38.gene.promoter.U1000D200.TF_binding.txt <==
A1BG RXRA
A2M-AS1 GABP
A2M SRF
A4GALT GABP
AAAS CTCF
用awk
命令,根据第一个文件GeneUP.list
建立索引,若第二个文件GRCh38.gene.promoter.U1000D200.TF_binding.txt
第一列中检索到第一个文件中的基因,则把第二个文件中检索到目标基因的整行存储起来,最终得到了目标基因和基因对应TF的文件targetGene.TF_binding.txt
。这也是常用的取子集操作。
awk 'BEGIN{OFS=FS="\t"}ARGIND==1{save[$1]=1;}ARGIND==2{if(save[$1==1]) print $0}' GeneUP.list GRCh38.gene.promoter.U1000D200.TF_binding.txt > targetGene.TF_binding.txt
获取目标基因的转录因子是生信分析中常见的分析,希望如何获取目标基因的转录因子(上)和本文能够帮助到各位小伙伴
重点总结
什么是bed文件(http://asia.ensembl.org/index.html)
awk命令的使用(Linux学习 - 常用和不太常用的实用awk命令)
bedtools使用 (Bedtools使用简介)