RNA-Seq 上游分析实践

之前那一篇文章主要讲的是一些知识与工具的用法,这次用六组数据进行分析,得到基因表达矩阵。

首先从NCBI SRA数据库搜索合适的数据,查看数据是双端测序的数据之后,多选条目,直接生成 Accession list。

我使用的是下列数据:

SRR25907783
SRR25907784
SRR25907785
SRR25907786
SRR25907787
SRR25907788

使用sra-tools工具批量下载测序数据,并且使用 nohup 把程序挂在后台下载:

nohup prefetch --option-file acc_list.txt 

再使用脚本进行拆分:

#!/bin/bash
mkdir -p SRR fastqc_report
nohup prefetch --option-file acc_list.txt

find . -name "*.sra" -exec mv {} ./SRR/ \;
cd SRR
nohup fastq-dump --gzip --split-3 ./*.sra -O ../fastqgz

这里千万不要在程序没有运行完成的时候就进行下一步操作。使用 top 可以查看后台进程:

当程序运行完成后便可看到后台任务中已经没有前面运行的程序了:

同一目录下的 nohup.out 文件中是后台进程的运行记录。

拆分完成后就需要进行质量检测,使用通配符批量检测,并且将检测报告放在单独一个文件夹以便后面进行压缩:

mkdir fastqc_report
fastqc SRR2590778*.fastq.gz -o ./fastqc_report

完成之后,将检测报告进行合并,以便查看:

multiqc ./fastqc_report

依据检测报告对序列进行过滤,参数之前已经讲过,这里数据比较多,写一个 bash 脚本的 for 循环:

#!/bin/bash
for i in {3..8}; do
    trimmomatic PE \
        -threads 1 \
        -phred33 \
        SRR2590778${i}_1.fastq.gz \
        SRR2590778${i}_2.fastq.gz \
        -summary oryza_sativa_${i}.summary \
        -baseout SRR2590778${i}.fastq.gz \
        LEADING:3 TRAILING:3 \
        SLIDINGWINDOW:5:20 \
        HEADCROP:15 MINLEN:36
done

这里是对 SRR25907783 到 SRR25907788 的数据进行处理,根据自己数据的情况将这里进行修改即可。

下载水稻的参考基因组和注释文件进行 hisat2 比对:

wget https://ftp.ensemblgenomes.ebi.ac.uk/pub/plants/release-57/fasta/oryza_sativa/dna/Oryza_sativa.IRGSP-1.0.dna.toplevel.fa.gz
wget https://ftp.ensemblgenomes.ebi.ac.uk/pub/plants/release-57/gff3/oryza_sativa/Oryza_sativa.IRGSP-1.0.57.gff3.gz

把下载的文件解压后重命名,方便使用:

gzip -d Oryza_sativa.IRGSP-1.0.dna.toplevel.fa.gz
mv Oryza_sativa.IRGSP-1.0.dna.toplevel.fa oryza_sativa.fa

gzip -d Oryza_sativa.IRGSP-1.0.57.gff3.gz
mv Oryza_sativa.IRGSP-1.0.57.gff3 oryza_sativa.gff3

先构建 hisat2 索引:

hisat2-build oryza_sativa.fa oryza_sativa

构建完成之后开始将 reads 比对到参考基因组,还是写成脚本进行:

#!/bin/bash
for i in {3..8}
do
    hisat2 -x hisat2_index/oryza_sativa -p 5 -1 SRR2590778${i}_1P.fastq.gz -2 SRR2590778${i}_2P.fastq.gz -S SRR2590778_${i}.sam
done

接着对比对结果进行排序,还是写成 bash 脚本一键进行:

#!/bin/bash
for i in {3..8}
do
    samtools sort -n -@ 5 SRR2590778_${i}.sam -o SRR2590778_${i}.bam
done

最后一步使用 featureCounts 生成基因计数表:

#!/bin/bash
bam_files=(*.bam)  # 将所有的 bam 文件作为变量,输入给 featureCounts

if [ ${#bam_files[@]} -gt 0 ]; then
    featureCounts -T 5 -t exon -g Name -a oryza_sativa.gff3 -o gene.counts -p "${bam_files[@]}"
else
    echo "No BAM files found in the current directory."
fi

至此完成,拿到基因表达矩阵。

个人习惯完成分析后把文件进行一下归类:

最后将数据下载到本地进行下游分析: