RNA-Seq数据分析流程

文章目录

  • RNA-seq 数据分析流程
    • 相关软件安装
    • 下载数据
      • sra转fastq格式
    • 数据质控
      • 数据质控,过滤低质量reads,去接头
    • 比对
      • 首先下载参考基因组及注释文件,建立索引
      • 比对
      • sam文件转bam
      • 为bam文件建立索引
      • reads的比对情况统计
    • 计数 counts
    • 差异基因分析

RNA-seq 数据分析流程

相关软件安装

可以安装 conda,在后续其他软件安装时非常好用。可自行百度进行安装
可根据文献调研,转录组数据分析所需软件列表:
质控
fastqc , multiqc, trimmomatic, cutadapt ,trim-galore
比对
star, hisat2, bowtie2, tophat, bwa, subread
计数
htseq, bedtools, deeptools, salmon

在安装之前可以先 search一下安装包是否存在

# 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

软件安装时,可以使用conda一步安装,也可以自行百度,下载源码,解压后添加环境变量,使用。
但是在使用sra-tookit时出现了问题,因为已经提前用conda安装好了sra-tools,后面我在网页下载解压了sratoolkit,并且在环境变量中添加好了,导致两个软件版本不合,使用prefetch下载网页数据时总是报错。所以需要卸载其中一种,保持版本一致。
自行安装sratoolkit可参考:sratoolkit安装

下载数据

进入网页,得到SRR_Acc_list.txt

SRR957677
SRR957678
SRR957679
SRR957680

批量下载

wkd=/home/meiling/baiduyundisk/RNA-seq #设置工作目录
cat SRR_Acc_List.txt | while read id; do (nohup prefetch  ${id} &);done
#ps -ef | grep prefetch | awk '{print $2}' | while read id; do kill ${id}; done #在内地下载速度很慢,所以我杀掉这些下载进程

当显示所有下载都sucessful时,可以进行下一步
RNA-Seq数据分析流程_第1张图片
下载完成之后,文件会自动保存在目录:~/ncbi/public/sra/

mv ~/ncbi/public/sra/*.sra $wkd/rawdata

sra转fastq格式

使用fastq-dump

wkd=/home/meiling/baiduyundisk/RNA-seq #设置工作目录

for i in $wkd/rawdata/*sra
do
        echo $i
        fastq-dump --split-3 --skip-technical --clip --gzip $i  ## 批量转换
done

原始数据如果是双端测序结果,fastq-dump配合–split-3参数,一个样本被拆分成两个fastq文件,如果是单端测序,就只生成一个文件

数据质控

fastqc生成质控报告,multiqc将各个样本的质控报告整合为一个。

wkd=/home/meiling/baiduyundisk/RNA-seq #设置工作目录

ls $wkd/rawdata/*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

每个id_fastqc.html都是一个质量报告,multiqc_report.html是所有样本的整合报告

数据质控,过滤低质量reads,去接头

如果双端测序,运行一下代码,得到两列数据,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,写入一下内容:

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 

单端测序:

wkd=/home/meiling/baiduyundisk/RNA-seq #设置工作目录
mkdir $wkd/cleandata 
cd $wkd/cleandata 
ls /home/meiling/baiduyundisk/RNA-seq/rawdata/*.fastq.gz >config
#ls /home/jmzeng/project/airway/raw/*_2.fastq.gz >2
#paste 1 2  > config

qc.sh

wkd=/home/meiling/baiduyundisk/RNA-seq/cleandata #设置工作目录
cd $wkd
cat config |while read id
do
        arr=(${id})
        fq1=${arr[0]}
#       fq2=${arr[1]} 
    trim_galore -q 25 --phred33 --length 36 --stringency 3 -o $wkd  $fq1 
done

其他软件,对于单端测序和双端测序的不同用法,可以自行百度具体软件用法,都有解释,参考官方参数即可。

比对

首先下载参考基因组及注释文件,建立索引

基因组相关内容大家可以自行百度,但是参考基因组和注释文件一定要对应在同一个网站,同一个版本。可以下载的网站有UCSC,NCBI,ENSEMBEL
我是在ENSEMBEL上面下载的,一般选择primary参考基因组,注释文件选择scaff
复制链接地址后,axel 下载,非常快。下载后解压。

axel -n 20 ftp://ftp.ensembl.org/pub/release-101/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz
axel -n 20 ftp://ftp.ensembl.org/pub/release-101/gtf/homo_sapiens/Homo_sapiens.GRCh38.101.chr_patch_hapl_scaff.gtf.gz
ls
#Homo_sapiens.GRCh38.101.chr_patch_hapl_scaff.gtf.gz
#Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz
##解压
gzip -d Homo_sapiens.GRCh38.101.chr_patch_hapl_scaff.gtf.gz
gzip -d Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz
ls -lh
total 4.3G
drwxr-xr-x 2 meiling meiling 4.0K Nov  2 21:26 hisat2_index
-rw-r--r-- 1 meiling meiling 1.3G Nov  1 20:48 Homo_sapiens.GRCh38.101.chr_patch_hapl_scaff.gtf
-rw-r--r-- 1 meiling meiling 3.0G Nov  1 20:50 Homo_sapiens.GRCh38.dna.primary_assembly.fa
##建立索引
hisat2-build Homo_sapiens.GRCh38.dna.primary_assembly.fa hisat2_index/hisat_hg38

RNA-Seq数据分析流程_第2张图片

比对

star, hisat2, bowtie2, tophat, bwa, subread都是可以用于比到的软件
批量比对:

wkd=/home/meiling/baiduyundisk/RNA-seq #设置工作目录

cd $wkd/cleandata 
ls *gz|cut -d"_" -f 1 |sort -u |while read id;do
##单端测序
ls -lh ${id}_trimmed.fq.gz
hisat2 -q -p 10 -x $wkd/reference/hg38/hisat2_index/hisat_hg38 -U ${id}_trimmed.fq.gz -S $wkd/align/${id}.hisat.sam
##双端测序
#ls -lh ${id}_1_val_1.fq.gz   ${id}_2_val_2.fq.gz 
#hisat2 -p 10 -x $wkd/reference/hg38/hisat2_index/hisat_hg38 -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这样的软件,它需要的是能进行跨越内含子比对的工具。
比对结果输出:

bash align.sh > align.log 2>&1
##打开align.log
###单端测序比对结果输出
-rw-r--r-- 1 meiling meiling 984M Nov  2 16:33 SRR957677_trimmed.fq.gz
  File "/opt/software/hisat2-2.2.0/hisat2_read_statistics.py", line 182
    length_map = sorted(length_map.iteritems(), key=lambda (k,v):(v,k), reverse=True)
                                                           ^
SyntaxError: invalid syntax
20498068 reads; of these:
  20498068 (100.00%) were unpaired; of these:
    689901 (3.37%) aligned 0 times
    17438548 (85.07%) aligned exactly 1 time
    2369619 (11.56%) aligned >1 times
96.63% overall alignment rate

RNA-Seq数据分析流程_第3张图片

sam文件转bam

wkd=/home/meiling/baiduyundisk/RNA-seq #设置工作目录
cd $wkd/align 
ls *.sam|cut -d"." -f 1 |while read id ;do
    samtools view -@ 8 -S {
     $id}.sam -1b -o {
     $id}.bam
    samtools sort -@ 8 -l 5 -o {
     $id}.sort.bam {
     $id}.bam
done
#rm *.sam 

RNA-Seq数据分析流程_第4张图片

为bam文件建立索引

ls *.sort.bam |xargs -i samtools index {
     }

reads的比对情况统计

ls *.sort.bam |while read id ;do ( samtools flagstat -@ 1 $id >  $(basename ${
      id} ".bam").flagstat  );done

RNA-Seq数据分析流程_第5张图片

计数 counts

首先安装featurecounts,这个软件已经整合到subread里面了

axel -n 20 https://udomain.dl.sourceforge.net/project/subread/subread-2.0.1/subread-2.0.1-Linux-x86_64.tar.gz
tar -zxvf subread-2.0.1-Linux-x86_64.tar.gz 
cd subread-2.0.1-Linux-x86_64/
cd bin
pwd
#添加环境变量

计数

wkd=/home/meiling/baiduyundisk/RNA-seq #设置工作目录
cd $wkd/align 
# 如果一个个样本单独计数,输出多个文件使用代码是:
for fn in {
     508..523}
do
featureCounts -T 5 -p -t exon -g gene_id  -a $gtf -o $fn.counts.txt SRR1039$fn.bam
done
# 如果是批量样本的bam进行计数,使用代码是:
wkd=/home/meiling/baiduyundisk/RNA-seq #设置工作目录
cd $wkd/align 
# 如果一个个样本单独计数,输出多个文件使用代码是:
# 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
# 运行featureCounts对所有样本进行基因水平定量
# 如果是批量样本的bam进行计数,使用代码是:
# 设置featureCounts所需要的gtf文件位置(注释文件)
gtf="$wkd/reference/hg38/Homo_sapiens.GRCh38.101.chr_patch_hapl_scaff.gtf.gz"   
featureCounts -T 5 -t exon -g gene_id  -a $gtf -o  $wkd/counts/all.id.txt  *.sort.bam  1>counts.id.log 2>&1
#解释:-T 1:线程数为1;-p:表示数据为paired-end,双末端测序数据;-t exon表示 feature名称为exon;-g gene_id表示meta-feature名称为gene_id(ensembl名称);-a $gtf 表示输入的GTF基因组注释文件;-o all.id.txt 设置输出文件类型;*.sort.bam是被分析的bam文件。featureCounts支持通配符*
# 这样得到的  all.id.txt  文件就是表达矩阵啦,但是,这个 featureCounts有非常多的参数可以调整。
cd $wkd/counts 
# 使用multiqc对featureCounts统计结果进行可视化。
multiqc all.id.txt.summary
# 只保留all.id.txt文件的【基因名】和【样本counts】
cat all.id.txt | cut -f 1,7 |grep -v '^#' > counts.txt

运行结束:
RNA-Seq数据分析流程_第6张图片
得到以下文件:
RNA-Seq数据分析流程_第7张图片

# Program:featureCounts v2.0.1; Command:"featureCounts" "-T" "5" "-t" "exon" "-g" "gene_id" "-a" "/home/meiling/baiduyundisk/RNA-seq/reference/hg38/Homo_sapiens.GRCh38.101.chr_patch_hapl_scaff.gtf.gz" "-o" "/home/meiling/baiduyundisk/RNA-seq/counts/all.id.txt" "SRR957677.sort.bam" "SRR957678.sort.bam" "SRR957679.sort.bam" "SRR957680.sort.bam" 
Geneid	Chr	Start	End	Strand	Length	SRR957677.sort.bam	SRR957678.sort.bam	SRR957679.sort.bam	SRR957680.sort.bam
ENSG00000223972	1;1;1;1;1;1;1;1;1	11869;12010;12179;12613;12613;12975;13221;13221;13453	12227;12057;12227;12721;12697;13052;13374;14409;13670	+;+;+;+;+;+;+;+;+	1735	0	0	0	0
ENSG00000227232	1;1;1;1;1;1;1;1;1;1;1	14404;15005;15796;16607;16858;17233;17606;17915;18268;24738;29534	14501;15038;15947;16765;17055;17368;17742;18061;18366;24891;29570	-;-;-;-;-;-;-;-;-;-;-	1351	7	1	2	3
ENSG00000278267	1	17369	17436	-	68	0	0	0	0
ENSG00000243485	1;1;1;1;1	29554;30267;30564;30976;30976	30039;30667;30667;31109;31097	+;+;+;+;+	1021	0	0	0	0
ENSG00000284332	1	30366	30503	+	138	0	0	0	0
ENSG00000237613	1;1;1;1;1	34554;35245;35277;35721;35721	35174;35481;35481;36081;36073	-;-;-;-;-	1219	0	0	0	0
ENSG00000268020	1	52473	53312	+	840	0	0	0	0
ENSG00000240361	1;1;1;1	57598;58700;62916;62949	57653;58856;64116;63887	+;+;+;+1414	0	0	0	0

可以单个样本计数,之后在进行合并,使用Python脚本或者R语言merge
具体可以参考这里
或者直接批量比对,输出的all.id.txt即为合并后的表达矩阵。可以在这里选择注释,或者找完差异基因后在进行注释。

差异基因分析

后续需要在R里面进行差异基因分析,DESeq和edger里面自带标准化的函数,后续还可以进行KEGG,GSEA,GO富集分析

你可能感兴趣的:(生信学习,linux,生物信息学)