以Illumina测序仪说明二代测序的一般流程:
(1)文库制备
将DNA用雾化或超声波随机片段化成几百碱基或更短的小片段。用聚合酶和外切核酸酶把DNA片段切成平末端,紧接着磷酸化并增加一个核苷酸黏性末端。然后将Illumina测序接头与片段连接。
(2)簇的创建
将模板分子加入芯片用于产生克隆簇和测序循环。芯片有8个纵向泳道的硅基片。每个泳道内芯片表面有无数的被固定的单链接头。上述步骤得到的带接头的DNA 片段变性成单链后与测序通道上的接头引物结合形成桥状结构,以供后续的预扩增使用。通过不断循环获得上百万条成簇分布的双链待测片段。
(3)测序
分三步:DNA聚合酶结合荧光可逆终止子,荧光标记簇成像,在下一个循环开始前将结合的核苷酸剪切并分解。
(4)数据分析
可以通过陈巍学基因视频1:Illumina测序化学原理学习,讲解得很好!
数据分析流程:
- 安装Miniconda3。
首先安装conda,现在清华和中科大的镜像已经挂掉了(清华授权截止到20190516),我是之前安装的。如果安装只能安装官方版本的,可能安装后下载相关软件包的速度会比较慢。
mkdir -p ~/biosoft && cd ~/biosoft
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
2.设置conda镜像
source ~/.bashrc
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
conda config --set show_channel_urls yes
3.调用conda 安装软件
- 质控
- fastqc , multiqc, trimmomatic, cutadapt ,trim-galore
- 比对
- star, hisat2, bowtie2, tophat, bwa, subread
- 计数
- htseq, bedtools, deeptools, salmon
为了避免污染linux工作环境,推荐在conda中创建各个流程的安装环境,比如:
conda create -n rna python=2 #创建名为rna的软件安装环境
conda info --envs #查看当前conda环境
source activate rna #激活conda的rna环境
先读文献调研,得到转录组分析需要用到的软件列表;
如果你对一个软件不了解的话,那么安装之前在https://bioconda.github.io/recipes.html,检索该软件包是否存在,或者使用conda search packagename
进行检索。
conda install -y sra-tools
conda install -y trimmomatic
conda install -y cutadapt multiqc
conda install -y trim-galore
conda install -y star hisat2 bowtie2
conda install -y subread tophat htseq bedtools deeptools
conda install -y salmon
source deactivate #注销当前的rna环
sra-tools
sra-tools 这个软件,主要用途是把NGS序列原始数据从 sra 格式转换到 fastq 格式,以便于后续的数据分析。https://www.cnblogs.com/OA-maque/p/4799074.html
trimmomatic
NGS 原始数据过滤对后续分析至关重要,去除一些无用的序列也可以提高后续分析的准确率和效率。Trimmomatic 是一个功能强大的数据过滤软件, 支持多线程,处理数据速度快,主要用来去除 Illumina 平台的 Fastq 序列中的接头,并根据碱基质量值对 Fastq 进行修剪。软件有两种过滤模式,分别对应 SE 和 PE 测序数据,同时支持 gzip 和 bzip2 压缩文件。详见 NGS 数据过滤之 Trimmomatic 详细说明 - https://www.jianshu.com/p/a8935adebaae
cutadapt
当我们是双端测序数据的时候,去除接头时,也会丢掉太短的reads,就容易导致左右两端测序文件reads数量不平衡,有一个比较好的软件能解决这个问题,Jimmy大神比较喜欢的是cutadapt软件的PE模式来去除接头!尤其是做基因组或者转录组de novo 组装的时候,尤其要去掉接头,去的干干净净!详见用cutadapt软件来对双端测序数据去除接头 https://www.jianshu.com/p/1a3ca70fb326
multiqc
功能:把多个测序结果的qc结果整合成一个报告。支持fastqc、trimmomatic、bowtie、STAR等多种软件结果的整合。详见青山屋主笔记 批量显示QC结果的利器http://fbb84b26.wiz03.com/share/s/3XK4IC0cm4CL22pU-r1HPcQQ1iRTvV2GwkwL2AaxYi2fXHP7
详细说明 homepage: http://multiqc.info
trim-galore
软件先去除低质量reads,再调用cutadapt去除接头(默认调用illumina接头),最后可选择调用fastqc看看read质量情况。详见Trim_galore使用(2018-05-25) - https://www.jianshu.com/p/1925a3356071
STAR
基于一种以前未描述的RNA-seq比对算法开发了STAR(Spliced Transcripts Alignments to a Reference,STAR)软件,该算法使用了未压缩后缀阵列中的连续最大可比对种子搜索,接着种子聚类和缝合过程。
STAR在比对速度上胜过其他比对器50多倍,在一个普通的12核服务器上,每小时比对5.5亿2 x 76 bp双端片段到人类基因组上,同时改进了比对敏感性和准确性。除了典型剪接的非偏从头检测外,STAR能够发现非典型拼接和嵌合(融合)转录本,并能够比对全长RNA序列。https://www.plob.org/article/10220.html
HISAT2
HISAT2是TopHat2/Bowti2的继任者,使用改进的BWT算法,实现了更快的速度和更少的资源占用,作者推荐TopHat2/Bowti2和HISAT的用户转换到HISAT2。
RNA-Seq基因组比对工具HISAT2://www.plob.org/article/10380.html
Bowtie2
Bowtie2是一个超高速的,节约内存且灵活与成熟的短序列比对软件,比较适合下一代测序技术。通常 使 用 全 文 分 索 引 (FM-index) 以 及 Burrows-Wheeler变换(BWT)索引基因组使得比对非常快速且内存高效,但是这种方法不适合于找到较长的、带缺口的序列比对。
Bowtie2使用方法与参数详细介绍 https://www.plob.org/article/4540.html
bowtie简单使用: www.bio-info-trainee.com/398.html
Bowtie2中文使用手册Bowtie2-Manual https://cncbi.github.io/Bowtie2-Manual-CN/
BWA
BWA 主要应用二代测序后的大量短小片段与参考基因组之间的定位比对。 需要先对参考序列建建立索引,BWA 也是基于 BWT 和 FM-INDEX 理论来对参考基因组做索引。 根据测序方法的不同,有单末端序列(Single-end, SE)比对和双末端序列(Pair-end, PE)比对。
参考文献: 四种常用的生物序列比对软件比较 陈凤珍,李 玲, 操利超, 严志祥∗2016
转录组流程
step1: sra2fastq
下载SRA数据
新建一个名为SRR_Acc_List.txt
的文档,将SRR号码保存在文档内,一个号码占据一行。文件可以在我的GitHub下载获取:https://github.com/jmzeng1314/GEO/blob/master/airway/SRR_Acc_List.txt
- prefetch下载数据
wkd=/home/jmzeng/project/airway/ #设置工作目录
source activate rna
cat SRR_Acc_List.txt | while read id; do (prefetch ${id} );done
ps -ef | grep prefetch | awk '{print $2}' | while read id; do kill ${id}; done #在内地下载速度很慢,所以我杀掉这些下载进程
- 或者直接使用我已经下载好的sra数据
mkdir $wkd/raw
cd $wkd/raw
ls /public/project/RNA/airway/sra/* | while read id; do ( fastq-dump --gzip --split-3 -O ./ ${id} ); done ## 批量转换sra到fq格式。
source deactivate
- 得到的SRA数据如下
/public/project/RNA/airway/sra/
├── [1.6G] SRR1039508.sra
├── [1.4G] SRR1039509.sra
├── [1.6G] SRR1039510.sra
├── [1.5G] SRR1039511.sra
├── [2.0G] SRR1039512.sra
├── [2.2G] SRR1039513.sra
├── [3.0G] SRR1039514.sra
├── [1.9G] SRR1039515.sra
├── [2.1G] SRR1039516.sra
├── [2.6G] SRR1039517.sra
├── [2.3G] SRR1039518.sra
├── [2.0G] SRR1039519.sra
├── [2.1G] SRR1039520.sra
├── [2.4G] SRR1039521.sra
├── [2.0G] SRR1039522.sra
└── [2.2G] SRR1039523.sra
- sra格式转fastq格式
格式转还用到的软件是fastq-dump
for i in $wkd/*sra
do
echo $i
fastq-dump --split-3 --skip-technical --clip --gzip $i ## 批量转换
done
- 得到fastq数据如下
原始数据是双端测序结果,fastq-dump配合--split-3参数,一个样本被拆分成两个fastq文件
├── [1.3G] SRR1039508_1.fastq.gz
├── [1.3G] SRR1039508_2.fastq.gz
├── [1.2G] SRR1039509_1.fastq.gz
├── [1.2G] SRR1039509_2.fastq.gz
├── [1.3G] SRR1039510_1.fastq.gz
├── [1.3G] SRR1039510_2.fastq.gz
├── [1.2G] SRR1039511_1.fastq.gz
├── [1.2G] SRR1039511_2.fastq.gz
├── [1.6G] SRR1039512_1.fastq.gz
├── [1.6G] SRR1039512_2.fastq.gz
├── [950M] SRR1039513_1.fastq.gz
├── [952M] SRR1039513_2.fastq.gz
├── [2.4G] SRR1039514_1.fastq.gz
......
├── [1.5G] SRR1039522_1.fastq.gz
├── [1.5G] SRR1039522_2.fastq.gz
├── [1.8G] SRR1039523_1.fastq.gz
└── [1.8G] SRR1039523_2.fastq.gz
step2: check quality of sequence reads
fastqc生成质控报告,multiqc将各个样本的质控报告整合为一个。
ls *gz | xargs fastqc -t 2
multiqc ./
- 得到结果如下
├── [4.0K] multiqc_data
│ ├── [2.1M] multiqc_data.json
│ ├── [6.8K] multiqc_fastqc.txt
│ ├── [2.2K] multiqc_general_stats.txt
│ ├── [ 16K] multiqc.log
│ └── [3.4K] multiqc_sources.txt
├── [1.5M] multiqc_report.html
├── [236K] SRR1039508_1_fastqc.html
├── [279K] SRR1039508_1_fastqc.zip
├── [238K] SRR1039508_2_fastqc.html
├── [286K] SRR1039508_2_fastqc.zip
├── [236K] SRR1039510_1_fastqc.html
├── [278K] SRR1039510_1_fastqc.zip
├── [241K] SRR1039510_2_fastqc.html
├── [292K] SRR1039510_2_fastqc.zip
......
├── [220K] SRR1039522_fastqc.zip
├── [234K] SRR1039523_1_fastqc.html
├── [273K] SRR1039523_1_fastqc.zip
├── [232K] SRR1039523_2_fastqc.html
└── [274K] SRR1039523_2_fastqc.zip
每个id_fastqc.html都是一个质量报告,multiqc_report.html是所有样本的整合报告
step3: filter the bad quality reads and remove adaptors.
- 运行如下代码,得到名为config的文件,包含两列数据
mkdir $wkd/clean
cd $wkd/clean
ls /home/jmzeng/project/airway/raw/*_1.fastq.gz >1
ls /home/jmzeng/project/airway/raw/*_2.fastq.gz >2
paste 1 2 > config
- 打开文件 qc.sh ,并且写入如下内容
trim_galore,用于去除低质量和接头数据
source activate rna
bin_trim_galore=trim_galore
dir='/home/jmzeng/project/airway/clean'
cat $1 |while read id
do
arr=(${id})
fq1=${arr[0]}
fq2=${arr[1]}
$bin_trim_galore -q 25 --phred33 --length 36 --stringency 3 --paired -o $dir $fq1 $fq2
done
source deactivate
- 运行qc.sh
bash qc.sh config #config是传递进去的参数
- 结果显示如下
├── [2.9K] SRR1039508_1.fastq.gz_trimming_report.txt
├── [1.2G] SRR1039508_1_val_1.fq.gz
├── [3.1K] SRR1039508_2.fastq.gz_trimming_report.txt
├── [1.2G] SRR1039508_2_val_2.fq.gz
├── [2.9K] SRR1039509_1.fastq.gz_trimming_report.txt
......
├── [2.9K] SRR1039522_1.fastq.gz_trimming_report.txt
├── [1.4G] SRR1039522_1_val_1.fq.gz
├── [3.1K] SRR1039522_2.fastq.gz_trimming_report.txt
├── [1.4G] SRR1039522_2_val_2.fq.gz
├── [2.9K] SRR1039523_1.fastq.gz_trimming_report.txt
├── [1.7G] SRR1039523_1_val_1.fq.gz
├── [3.1K] SRR1039523_2.fastq.gz_trimming_report.txt
└── [1.7G] SRR1039523_2_val_2.fq.gz
step4: alignment
star, hisat2, bowtie2, tophat, bwa, subread都是可以用于比到的软件
- 先运行一个样本,测试一下
mkdir $wkd/test
cd $wkd/test
source activate rna
ls $wkd/clean/*gz |while read id;do (zcat ${id}|head -1000> $(basename ${id} ".gz"));done
id=SRR1039508
hisat2 -p 10 -x /public/reference/index/hisat/hg38/genome -1 ${id}_1_val_1.fq -2 ${id}_2_val_2.fq -S ${id}.hisat.sam
subjunc -T 5 -i /public/reference/index/subread/hg38 -r ${id}_1_val_1.fq -R ${id}_2_val_2.fq -o ${id}.subjunc.sam
bowtie2 -p 10 -x /public/reference/index/bowtie/hg38 -1 ${id}_1_val_1.fq -2 ${id}_2_val_2.fq -S ${id}.bowtie.sam
bwa mem -t 5 -M /public/reference/index/bwa/hg38 ${id}_1_val_1.fq ${id}_2_val_2.fq > ${id}.bwa.sam
- 批量比对代码
cd $wkd/clean
ls *gz|cut -d"_" -f 1 |sort -u |while read id;do
ls -lh ${id}_1_val_1.fq.gz ${id}_2_val_2.fq.gz
hisat2 -p 10 -x /public/reference/index/hisat/hg38/genome -1 ${id}_1_val_1.fq.gz -2 ${id}_2_val_2.fq.gz -S ${id}.hisat.sam
subjunc -T 5 -i /public/reference/index/subread/hg38 -r ${id}_1_val_1.fq.gz -R ${id}_2_val_2.fq.gz -o ${id}.subjunc.sam
bowtie2 -p 10 -x /public/reference/index/bowtie/hg38 -1 ${id}_1_val_1.fq.gz -2 ${id}_2_val_2.fq.gz -S ${id}.bowtie.sam
bwa mem -t 5 -M /public/reference/index/bwa/hg38 ${id}_1_val_1.fq.gz ${id}_2_val_2.fq.gz > ${id}.bwa.sam
done
这里是演示多个比对工具,但事实上,对RNA-seq数据来说,不要使用bwa和bowtie这样的软件,它需要的是能进行跨越内含子比对的工具。
- sam文件转bam
ls *.sam|while read id ;do (samtools sort -O bam -@ 5 -o $(basename ${id} ".sam").bam ${id});done
rm *.sam
- 为bam文件建立索引
ls *.bam |xargs -i samtools index {}
- reads的比对情况统计
ls *.bam |xargs -i samtools flagstat -@ 2 {} >
ls *.bam |while read id ;do ( samtools flagstat -@ 1 $id > $(basename ${id} ".bam").flagstat );done
source deactivate
- 最终结果显示如下
├── [1.8G] SRR1039508.bowite2.bam
├── [2.9M] SRR1039508.bowite2.bam.bai
├── [ 444] SRR1039508.bowite2.flagstat
├── [ 10G] SRR1039508.bowite2.sam
├── [1.7G] SRR1039509.bowite2.bam
......
├── [2.0G] SRR1039521.bowite2.bam
├── [2.9M] SRR1039521.bowite2.bam.bai
├── [ 444] SRR1039521.bowite2.flagstat
├── [ 10G] SRR1039521.bowite2.sam
├── [2.3G] SRR1039522.bowite2.bam
├── [3.0M] SRR1039522.bowite2.bam.bai
├── [ 444] SRR1039522.bowite2.flagstat
├── [ 12G] SRR1039522.bowite2.sam
├── [2.5G] SRR1039523.bowite2.bam
├── [3.0M] SRR1039523.bowite2.bam.bai
├── [ 444] SRR1039523.bowite2.flagstat
└── [ 14G] SRR1039523.bowite2.sam
step5: counts
mkdir $wkd/align
cd $wkd/align
source activate rna
# 如果一个个样本单独计数,输出多个文件使用代码是:
for fn in {508..523}
do
featureCounts -T 5 -p -t exon -g gene_id -a /public/reference/gtf/gencode/gencode.v25.annotation.gtf.gz -o $fn.counts.txt SRR1039$fn.bam
done
# 如果是批量样本的bam进行计数,使用代码是:
mkdir $wkd/align
cd $wkd/align
source activate rna
gtf="/public/reference/gtf/gencode/gencode.v25.annotation.gtf.gz"
featureCounts -T 5 -p -t exon -g gene_id -a $gtf -o all.id.txt *.bam 1>counts.id.log 2>&1 &
# 这样得到的 all.id.txt 文件就是表达矩阵啦,但是,这个 featureCounts有非常多的参数可以调整。
source deactivate
- 得到的文件如下
1 # Program:featureCounts v1.6.1; Command:"featureCounts" "-T" "5" "-p" "-t" "exon" "-g" "gene_id" "-a" "/public/reference/gtf/gencode/ge
2 Geneid Chr Start End Strand Length /home/llwu/RNA/airway/2.align/bowite2/SRR1039523.bowite2.bam
3 ENSG00000223972.5 chr1;chr1;chr1;chr1;chr1;chr1;chr1;chr1;chr1 11869;12010;12179;12613;12613;12975;13221;13221;13453 12227;1
4 ENSG00000227232.5 chr1;chr1;chr1;chr1;chr1;chr1;chr1;chr1;chr1;chr1;chr1 14404;15005;15796;16607;16858;17233;17606;17915;18268;2
5 ENSG00000278267.1 chr1 17369 17436 - 68 9
6 ENSG00000243485.4 chr1;chr1;chr1;chr1;chr1;chr1 29554;30267;30366;30564;30976;30976 30039;30667;30503;30667;31097;31109
7 ENSG00000237613.2 chr1;chr1;chr1;chr1;chr1 34554;35245;35277;35721;35721 35174;35481;35481;36073;36081 -;-;-;-;-
8 ENSG00000268020.3 chr1 52473 53312 + 840 0
9 ENSG00000240361.1 chr1 62948 63887 + 940 0
10 ENSG00000186092.4 chr1 69091 70008 + 918 0
上面的文件,请务必仔细了解。
step5: DEG
- 差异分析之前需要首先对转录组上游分析得到的文件
all.id.txt
进行一定程度的检查,代码如:
rm(list = ls())
options(stringsAsFactors = F)
a=read.table('all.id.txt',header = T)
tmp=a[1:14,1:7]
meta=a[,1:6]
exprSet=a[,7:ncol(a)]
colnames(exprSet)
a2=exprSet[,'SRR1039516.hisat.bam']
library(airway)
data(airway)
exprSet=assay(airway)
colnames(exprSet)
a1=exprSet[,'SRR1039516']
group_list=colData(airway)[,3]
a2=data.frame(id=meta[,1],a2=a2)
a1=data.frame(id=names(a1),a1=as.numeric(a1))
library(stringr)
a2$id <- str_split(a2$id,'\\.',simplify = T)[,1]
tmp=merge(a1,a2,by='id')
png('tmp.png')
plot(tmp[,2:3])
dev.off()
library(corrplot)
png('cor.png')
corrplot(cor(log2(exprSet+1)))
dev.off()
library(pheatmap)
png('heatmap.png')
m=cor(log2(exprSet+1))
pheatmap(scale(cor(log2(exprSet+1))))
dev.off()
- 检查通过之前就可以正式做差异分析以及后续的富集分析,代码参考:https://github.com/jmzeng1314/my-R/blob/master/10-RNA-seq-3-groups/hisat2_mm10_htseq.R
不需要比对的转录组定量流程
看salmon软件用法,参考博客:http://www.bio-info-trainee.com/2809.html
参考文献