明码标价之普通转录组上游分析

明码标价之普通转录组上游分析

原创

生信技能树



生信技能树


2月15日

收录于话题
#明码标价

9个

最近有粉丝在我们《生信技能树》公众号后台付费求助,想重新分析一下他自己领域的一个文章的转录组测序数据。因为那个文章并没有提供表达量矩阵,不过万幸的是人家上传了原始测序数据。

因为他的课题是保密的,我这里不方便提疾病名字和数据集,恰好最近学徒进行到了转录组实战环节。而且对方让我们先秀一秀肌肉,所以我把这个《单端转录组上游》任务安排给了学徒,感谢学徒在这个春节假期还兢兢业业完成任务!


下面是学徒的探索


安装自己的conda

每个用户独立操作,安装方法代码如下:

# 首先下载文件,20M/S的话需要几秒钟即可
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 接下来使用bash命令来运行我们下载的文件,记得是一路yes下去
bash Miniconda3-latest-Linux-x86_64.sh 
#  安装成功后需要更新系统环境变量文件
source ~/.bashrc

安装好conda后需要设置镜像。

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 

有了conda我们的服务器才真正可以做生物信息学数据处理。

conda下载aspera

#RNA-seq小环境
conda activate rna
#安装aspera
conda install -y -c hcc aspera-cli

which ascp 
## 一定要搞清楚你的软件被conda安装在哪
ls -lh ~/miniconda3/envs/download/etc/asperaweb_id_dsa.openssh

查找GSE130437的SRA文件地址

有一个神器:https://sra-explorer.info/

搜索GSE130437,无结果
到NCBI查找 GSE130437 ,得到序号   PRJNA540259 
重新使用 序号  PRJNA540259 进行搜索  https://sra-explorer.info/ 

aspera下载SRR文件

项目地址是:https://www.ebi.ac.uk/ena/browser/view/PRJNA540259

有时候这个数据库会死机,等待几天。

脚本如下:

# conda activate download 
# 自己搭建好 download 这个 conda 的小环境哦。
mkdir -p ~/public_data/immune_PRJEB33490
cd  ~/public_data/immune_PRJEB33490
# 下面的命令内容构建成为脚本:step1-aspera.sh
cat fq.txt |while read id
do
ascp -QT -l 300m -P33001  
-i ~/miniconda3/envs/download/etc/asperaweb_id_dsa.openssh   
era-fasp@$id  .
done
# nohup bash step1-aspera.sh 1>step1-aspera.log 2>&1 &

这个脚本会根据你在EBI里面搜索到的 fq.txt 路径文件,来批量下载fastq测序数据文件。

得到raw fq文件如下:

1.9G 2月   2 22:40 rawdata/SRR8984523.fastq.gz
1.6G 2月   2 22:46 rawdata/SRR8984524.fastq.gz
1.8G 2月   2 22:31 rawdata/SRR8984525.fastq.gz
1.8G 2月   2 22:33 rawdata/SRR8984526.fastq.gz
1.8G 2月   2 22:52 rawdata/SRR8984527.fastq.gz
2.0G 2月   2 22:37 rawdata/SRR8984528.fastq.gz
2.1G 2月   4 09:38 rawdata/SRR8984529.fastq.gz
2.1G 2月   2 23:01 rawdata/SRR8984530.fastq.gz
2.0G 2月   2 23:04 rawdata/SRR8984531.fastq.gz
1.9G 2月   2 22:55 rawdata/SRR8984532.fastq.gz
1.9G 2月   2 22:54 rawdata/SRR8984533.fastq.gz
1.9G 2月   3 00:08 rawdata/SRR8984534.fastq.gz

Trim_galore去接头

因为是单端测序数据,所以代码是:

source activate rna
bin_trim_galore=trim_galore
dir='/home/jinwei/RNA/clean'
file="config"
cd $dir
cat $file |while read id
do
        new=`echo $id`
        $bin_trim_galore -q 25 --phred33 --length 36 --stringency 3 -o $dir $new
done 
source deactivate

得到 clean  fq文件如下:

1.8G 2月   4 10:28 clean/SRR8984523_trimmed.fq.gz
1.6G 2月   4 10:39 clean/SRR8984524_trimmed.fq.gz
1.7G 2月   4 10:51 clean/SRR8984525_trimmed.fq.gz
1.8G 2月   4 11:04 clean/SRR8984526_trimmed.fq.gz
1.8G 2月   4 11:16 clean/SRR8984527_trimmed.fq.gz
2.0G 2月   4 11:30 clean/SRR8984528_trimmed.fq.gz
2.0G 2月   4 11:45 clean/SRR8984529_trimmed.fq.gz
2.0G 2月   4 11:59 clean/SRR8984530_trimmed.fq.gz
2.0G 2月   4 12:13 clean/SRR8984531_trimmed.fq.gz
1.8G 2月   4 12:26 clean/SRR8984532_trimmed.fq.gz
1.9G 2月   4 12:40 clean/SRR8984533_trimmed.fq.gz
1.9G 2月   4 12:54 clean/SRR8984534_trimmed.fq.gz

可以看到fq数据是有一定程度的缩小哦!

Hisat2比对

同样的,代码需要是针对单端测序数据,如下:

index=/home/data/server/reference/index/hisat/hg38/genome
inputdir=/home/jinwei/RNA/clean
outdir=/home/jinwei/RNA/align
cat /home/jinwei/RNA/SRR_Acc_List.txt|while read id
do
 echo "nohup hisat2 -p 12 -x $index -U $inputdir/${id}_trimmed.fq.gz|samtools sort -@ 5 -o $outdir/${id}_aln.sorted.bam  && samtools index $outdir/${id}_aln.sorted.bam $outdir/${id}_aln.sorted.bam.bai && samtools flagstat $outdir/${id}_aln.sorted.bam >$id.txt &"
done >Hisat.sh
#如果下一步直接bash Hisat.sh,则应该是每个样本都一起并行,容易把服务器的核占满。
#需要设置并行的样本数量,满足服务器的配置。

比对文件和索引文件:

1.6G 2月   4 23:29 SRR8984523_aln.sorted.bam
1.4G 2月   4 23:41 SRR8984524_aln.sorted.bam
1.5G 2月   4 23:47 SRR8984525_aln.sorted.bam
1.5G 2月   4 23:55 SRR8984526_aln.sorted.bam
1.5G 2月   5 00:02 SRR8984527_aln.sorted.bam
1.7G 2月   4 23:43 SRR8984528_aln.sorted.bam
1.7G 2月   4 23:51 SRR8984529_aln.sorted.bam
1.7G 2月   5 00:00 SRR8984530_aln.sorted.bam
1.7G 2月   4 23:58 SRR8984531_aln.sorted.bam
1.5G 2月   4 23:50 SRR8984532_aln.sorted.bam
1.6G 2月   5 08:59 SRR8984533_aln.sorted.bam
1.6G 2月   4 23:43 SRR8984534_aln.sorted.bam
ll -lh *bai|cut -d " " -f 5-
3.1M 2月   4 23:29 SRR8984523_aln.sorted.bam.bai
3.0M 2月   4 23:41 SRR8984524_aln.sorted.bam.bai
3.0M 2月   4 23:48 SRR8984525_aln.sorted.bam.bai
3.0M 2月   4 23:55 SRR8984526_aln.sorted.bam.bai
3.0M 2月   5 00:02 SRR8984527_aln.sorted.bam.bai
3.1M 2月   4 23:43 SRR8984528_aln.sorted.bam.bai
3.0M 2月   4 23:51 SRR8984529_aln.sorted.bam.bai
3.0M 2月   5 00:00 SRR8984530_aln.sorted.bam.bai
3.0M 2月   5 09:16 SRR8984531_aln.sorted.bam.bai
2.9M 2月   4 23:51 SRR8984532_aln.sorted.bam.bai
2.8M 2月   5 09:00 SRR8984533_aln.sorted.bam.bai
2.9M 2月   4 23:43 SRR8984534_aln.sorted.bam.bai

samtools flagstat用于统计文件比对情况:

ll -lh SRR*txt|cut -d " " -f 5-
395 2月   4 23:30 SRR8984523.txt
394 2月   4 23:41 SRR8984524.txt
394 2月   4 23:48 SRR8984525.txt
394 2月   4 23:56 SRR8984526.txt
394 2月   5 00:03 SRR8984527.txt
394 2月   4 23:44 SRR8984528.txt
394 2月   4 23:52 SRR8984529.txt
394 2月   5 00:01 SRR8984530.txt
394 2月   5 09:16 SRR8984531.txt
394 2月   4 23:51 SRR8984532.txt
394 2月   5 09:00 SRR8984533.txt
394 2月   4 23:43 SRR8984534.txt

结果示例:SRR8984523.txt

53974859 + 0 in total (QC-passed reads + QC-failed reads) #总reads数
10235416 + 0 secondary #比对到参考基因组的多个位置的reads数
0 + 0 supplementary 
0 + 0 duplicates #如果做了markduplicates,则会统计PCR Duplicates reads数
53214835 + 0 mapped (98.59% : N/A) #比对到参考基因组的比对率
#下面几行只针对双端测序
0 + 0 paired in sequencing
0 + 0 read1
0 + 0 read2
0 + 0 properly paired (N/A : N/A)
0 + 0 with itself and mate mapped
0 + 0 singletons (N/A : N/A)
0 + 0 with mate mapped to a different chr
0 + 0 with mate mapped to a different chr (mapQ>=5)

样品比对信息统计脚本:

##secondary表示比对到参考基因组多个位置的reads数
dir='/home/jinwei/RNA/align'
outfile='mapinfo.txt'
cd $dir
##先判断输出文件是否存在,方便多次修改调试脚本
if  [ -e  $outfile  ]; then
rm  -rf  $outfile
fi
ls *txt|while read id;do(echo $id|awk -F "." '{print $1}'>>sample);done
#记住'{printf "%'"'"'18.0fn",$0}'表示用“,”作为千位分隔符分隔整数,18.2f表示保留两位小数
ls *txt|while read id;do(cat $id|cut -d " " -f 1|sed -n "1p"|awk '{printf "%'"'"'18.0fn",$0}' >>totalreads);done
ls *txt|while read id;do(cat $id|cut -d " " -f 1|sed -n "2p"|awk '{printf "%'"'"'18.0fn",$0}'>>secondary);done
ls *txt|while read id;do(cat $id|cut -d " " -f 4,5|sed -n '5p'|awk -F "(" '{print $2}' >>mapratio);done
echo "sample    totalreads      secondary       mapratio" >$outfile
paste -d "t" sample totalreads secondary mapratio >>$outfile
#删除中间文件
rm sample totalreads secondary mapratio

样品比对信息统计表:mapinfo.txt

sample  totalreads      secondary       mapratio
SRR8984523              53,974,859              10,235,416      98.59%
SRR8984524              47,342,726               8,640,278      98.60%
SRR8984525              50,990,953               9,651,296      98.60%
SRR8984526              50,927,636               8,225,220      98.51%
SRR8984527              49,300,389               7,642,290      98.36%
SRR8984528              57,093,942               9,488,991      98.56%
SRR8984529              57,548,074               8,818,589      98.56%
SRR8984530              57,896,032               9,355,084      98.58%
SRR8984531              57,832,433               9,652,116      98.60%
SRR8984532              52,957,312               8,960,173      98.70%
SRR8984533              55,501,832               9,690,769      98.67%
SRR8984534              54,603,442               9,155,215      98.63%

比对率很高,而且大部分reads都只比对到了参考基因组的一个位置。

没有问题就可以删除samtools flagstat的结果文件。

cd ../align
rm  SRR*txt

定量

cd ../counts
# 需要自己下载 Homo_sapiens.GRCh38.98.gtf.gz 文件哦
gtf="/home/data/server/reference/gtf/ensembl/Homo_sapiens.GRCh38.98.gtf.gz"
inputdir="/home/jinwei/RNA/align"
source activate rna
# featureCounts对bam文件进行计数
featureCounts -T 10 -t exon -g gene_id -a $gtf -o all.id.txt $inputdir/*.sorted.bam

#
 对定量结果质控
multiqc all.id.txt.summary

#
 得到表达矩阵
cat all.id.txt | cut -f1,7- > counts.txt
source deactivate

拿到了表达量矩阵就可以进行后续分析,其中这个下游分析还有一个小插曲,见:谁说样本一定要按照编号排序呢

网页工具完成不了这样的命令行数据分析哦

这个是基于Linux的ngs数据的上游处理,目前没有成熟的网页工具支持这样的分析。其实呢,如果你有时间请务必学习编程基础,自由自在的探索海量的公共数据,辅助你的科研,那么:

如果你没有时间从头开始学编程,也可以委托专业的团队付费拿到同样的数据分析, 这样的20个样品以内的简单分组转录组测序数据的表达矩阵获取,仅需800元,可以拿到全部的数据和代码哦!

  • 需要自己读文献筛选合适的数据集
  • 提供半个小时左右的一对一讲解转录组数据处理背景知识。

如果需要委托,直接在我们《生信技能树》公众号留言即可,我们会安排合适的生信工程师对接具体的项目。

点击数:0

发表评论

邮箱地址不会被公开。 必填项已用*标注