生信步骤|转录组测序上游分析:hisat2+samtools+stringtie

转录组分析在当下研究功能基因组领域十分常用。相关软件组合种类也十分丰富,本文采用了hisat2+samtools+stringtie策略从转录组数据中挖掘差异表达基因。在这里小编整理了一下此套组合的执行流程,以供日后查阅;同时分享在平台,希望能帮助到更多初学者,如有谬误也请各路大佬批评指正。

先从整体上看一下软件们所执行的功能:
hisat2:建立参考基因组索引,reads的比对
samtools:sam2bam的转化
stringtie:估算转录本表达量

所用的数据结构如下,此处用了酵母的转录组数据和参考基因组:
双端测序数据已经经过fastqc过滤,具体过滤流程本文没有涉及。示例数据仅供参考。执行时要关注文件格式转化,以及各种格式下包含的生物信息。

@biocloud:~/1223/NGS2022$ tree
.
├── gene_data.csv# 差异表达基因样例,相当于最终输出的标准答案。
├── genome
│   ├── yeast.fa# 参考基因组文件
│   ├── yeast.gff# 参考基因组注释文件
│   └── yeast_transcriptome.fa # Kallisto 所需的转录组索引文件,实现基于 pseudo alignment 的转录本定量时才会用到,本文不涉及该文件。
├── reads	# 双端测序clean data,即已经经历过reads过滤。通常下机的时候公司都会同时给出rawdata和cleandata,直接用后者就好。
│   ├── s1_y_1.fq.gz
│   ├── s1_y_2.fq.gz
│   ├── s2_y_1.fq.gz
│   └── s2_y_2.fq.gz
├── script	 # 脚本文件,需要时加入绝对路径引用该脚本即可。
│   ├── edgeR.R
│   ├── prepDE.py
│   ├── prepDE.py3
│   └── run.sh
└── src		# 可能用到的软件安装包,服务器如果安装过该软件则无需再次安装。
    ├── fastqc_v0.11.9.zip
    ├── hisat2-2.2.1-Linux_x86_64.zip
    ├── hisat2-2.2.1-OSX_x86_64.zip
    ├── kallisto_linux-v0.46.1.tar.gz
    ├── kallisto_mac-v0.46.1.tar.gz
    ├── samtools-1.14.tar.bz2
    ├── stringtie-2.2.0.Linux_x86_64.tar.gz
    └── stringtie-2.2.0.OSX_x86_64.tar.gz

1.hisat2构建参考基因组索引

# 进入存储有参考基因组yeast.fa的目录genome 
$ cd ./genome 
# 将参考基因组yeast.fa建立索引并重命名为genome.fa。注意hisat2与-build之间不要加空格。
$ hisat2-build yeast.fa genome.fa 

2.hisat2将同一个处理下的双端测序reads比对到参考基因组

# 重新新建文件夹alignment并在其中执行比对操作
$ cd ..
$ mkdir alignment
$ cd alignment

# hisat2将同一个处理下的测序得到的双端测序reads比对到建立好索引的参考基因组。
# hisat2 参数-1和-2后面跟着双端测序数据(.gz格式)路径。比对后的结果保存为s1.sam。
$ hisat2 -p 6 -x ../genome/genome.fa -1 ../reads/s1_y_1.fq.gz -2 ../reads/s1_y_2.fq.gz -S ./s1.sam

3.samtools将sam文件进行二进制转化,排序以及添加索引。

# samtools view将刚刚得到的s1.sam转化为s1.bam
$ samtools view -bS s1.sam -o s1.bam //bam是sam的二进制文件,二进制转化后占用存储空间更小。

# samtools sort将s1.bam排序,产生s1.sorted.bam。后者会自动加上.bam后缀,无需命令行里添加。
$ samtools sort s1.bam s1.sorted 

# samtools index将排序后的bam文件添加索引
$ samtools index s1.sorted.bam 

4.stringtie根据gtf注释和排序后bam比对结果估算转录本表达量

# 输入刚刚排序好的s1.sorted.bam文件,酵母基因组注释文件yeast.gff。
# 运行stringtie得到gtf文件(s1_out.gtf)和基因表达列表(s1_genes.list)。
$ stringtie ./s1.sorted.bam -G ../genome/yeast.gff -e -p 2 -o ./s1_out.gtf -A ./s1_genes.list 

用同样的方法得到另一处理下双端测序的比对结果:s2_out.gtf 和 s2_genes.list。步骤与上述完全一致,此处不再逐一重复。每个处理下的一对双端测序结果会产生一个s1_out.gtf文件。按照上述步骤处理完另一对双端测序后应该得到两个gtf文件:s1_out.gtf 和 s2_out.gtf。

5.汇总两个处理下的转录组表达量

# 在新建的文件夹执行汇总表达量操作
$ cd ..
$ mkdir differential_expression
$ cd differential_expression

#手动新建并编辑一个sample_list.txt文件,用以存放处理的名称和上述得到的gtf文件路径。
$ vim sample_list.txt 

sample_list.txt文件格式如下所示:两个处理的名称(s1,s2)+对应gtf文件的地址。注意第二行末尾不要有换行符号(\n)!!!处理名称(s1,s2)和gtf文件地址之间应该有一个空格。

s1 /mnt/1223/NGS2021/differential_expression/s1_out.gtf
s2 /mnt/1223/NGS2021/differential_expression/s2_out.gtf

6.使用stringtie的prepDE.py3脚本生成差异表达基因列表。

prepDE.py3脚本可以在github中下载(https://github.com/gpertea/stringtie

# 注意stringtie差异基因汇总脚本有prepDE.py和prepDE.py3两个版本
# 前者适用于python2环境,后者python3环境。使用混了会报错。本文基于python3.9.5环境。
$ python prepDE.py3 -i sample_list.txt -g gene_count.csv -t transcript.csv

执行完上述步骤后得到的gene_count.csv即为差异表达基因列表,可以导入到R语言用edgeR / DESeq2包进行差异表达基因分析,有机会再整理后继教程。


sam文件基础

sam文件在序列分析中至关重要,无论是转录组分析还是基因组call SNP。认识sam文件所包含的信息有助于理解数据。我们依然以本文中生成sam文件的命令行举例。转录组分析核心比对步骤是使用hisat2将测序得到的reads比对到建立好索引的参考基因组:

$ hisat2 -p 6 -x ../genome/genome.fa -1 ../reads/s1_y_1.fq.gz -2 ../reads/s1_y_2.fq.gz -S ./s1.sam
  • -x 参考基因组 .fa文件
  • -1 双端测序第1段 .fq.gz格式
  • -2 双端测序第2段 .fq.gz格式
  • -S 输出文件地址+名字,输出结果为SAM格式
    双端测序一般为read1.fq / read1.fq.gz / read1.fq.bz2格式,前后两端同时出现,并同时作为hisat2输入。将测序得到的fastq文件经过hisat2比对到参考基因组得到SAM文件。SAM文件就是序列比对文件,有上下两个部分,分别包括头部注释部分和比对结果部分
头部注释部分
//头部注释部分以@开头:
@HD     VN:1.0  SO:unsorted //HD行:VN的版本以及比对排序类型。此处显示SO:unsorted表示没有排列顺序。
@SQ     SN:NC_001133.9  LN:230218//SQ行:参考序列目录。SN:参考序列名字。LN:参考序列长度
@SQ     SN:NC_001148.4  LN:948066
@SQ     SN:NC_001224.1  LN:85779
@SQ     SN:NC_001140.6  LN:562643
@SQ     SN:NC_001141.2  LN:439888
@SQ     SN:NC_001142.9  LN:745751
@SQ     SN:NC_001143.9  LN:666816
@PG     ID:hisat2       PN:hisat2       VN:2.0.5        CL:"/mnt/bai/public/bin/hisat2-2.0.5/hisat2-align-s --wrapper basic-0 -p 8 -x ../genome/genome.fa --dta -S ./s1.sam -1 /tmp/1909596.inpipe1 -2 /tmp/1909596.inpipe2"
//PG行:使用的比对程序名,此处为hisat2
比对结果部分

比对结果部分每行表示一个read和参考基因组的比对结果信息。前11列为主列,包含了大部分重要信息。

SRR5511068.3    99      NC_001147.6     1002516 60      75M     =       1002624 184     GTACTTAACATTCTTCTAATCATGTTAAAAGGTAAAACCTGGCCCATTTTACGATCGATCTGTAAAATCTTATAC     AAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE/EEEEAEEEEEEEEEEEAEEEEEEEAEEEEEEEEEEA     AS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:75 YS:i:0  YT:Z:CP NH:i:1
SRR5511068.3    147     NC_001147.6     1002624 60      76M     =       1002516 -184    GATAAGTAAGCAATGGTGGTAATTGCAATATTTTGCATATGTGCACGAGAAGAACTATTTTGAAGTAAGATCACTG    /EEEE<EAEEEEEE6E/EEEEEEEAEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEAAAAA    AS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:76 YS:i:0  YT:Z:CP NH:i:1
SRR5511068.9    83      NC_001146.8     299462  60      75M1S   =       299435  -103    ATTGGAAAAGAAAGTCGCGGCAAAGAGAAATGCCAATAAGACCGGGAATCAAAATTCTAAAAAGAAGAGTCAGAAG    <EAAA6<A<E/EEA/A</AE/EEEAA<EEAE6AEEAAEEAEEEAAAEE/EEEEEEEEEEEE//EEEEEE/EAAAAA    AS:i:-1 XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:75 YS:i:0  YT:Z:CP NH:i:1

主体部分以tab分隔从左到右依次为:

  • QNAME:Query Name,测序reads名称。如果是双端测序则会出现二次,两端各比对上一次。
  • FLAG:数值为2的次方数或者其加和,每个2的次方代表一种情况。详情可以参考CSDN大佬的博客:https://blog.csdn.net/genome_denovo/article/details/78712972
    或者简书大佬:
    https://www.jianshu.com/p/ab133ee9712c
  • RENAME:Reference Name,双端测序R1比对上的参考序列名,没比上就是*。
  • POS:position,双端测序R1起始比对上的位置序号。
  • MAPQ:Mapping Quality,质量分数,越高代表越准确。
  • CIGAR:比对结果,M代表完全匹配。
  • RNEXT:双端测序R2端比对情况,比对不上用*号,比对到同一段用=号。
  • MPOS:双端测序R2端比对位置。
  • ISIZE:文库插入长度,R2端位置-R1端位置+CIGAR处的值。
  • SEQ:序列信息。
  • QUAL:reads质量,用ASCII码表示。
最后总结一下:

转录组数据分析步骤不仅仅是比对产生差异表达基因,后继还会涉及差异表达基因的显著性分析,相关性分析,GO和KEGG分析等等。本文只是总结了转录组分析的上游步骤。而就上游步骤而言,可用的比对软件种类也非常多,本文只是借助hisat2+samtools+stringtie的经典步骤来学习转录组上游分析。其他比对软件日后如有涉及再行整理。

<think>好的,我现在需要帮用户处理转录组数据的分析流程。用户提供了数据存放的目录,里面有CleanData下的HA1样本,包含两个fq.gz文件。用户需要详细的Linux代码来进行数据处理和下游分析。 首先,我需要确认转录组分析的标准流程。通常包括质控、比对、定量、差异表达分析等步。用户的数据已经是CleanData,可能已经经过初步处理,但为了保险起见,还是需要先做质控,比如用FastQC和MultiQC。不过用户提到是原始数据,可能需要先做质量控制,但根据目录名CleanData,可能已经质控过了,但需要确认。可能需要询问用户是否已经做过质控,但用户现在直接要求继续处理,所以可能需要包括这一步,或者跳过。假设用户的数据已经是clean的,可能不需要再trim,但最好还是检查一下。 接下来是比对,比如使用HISAT2,将clean data比对到参考基因组。然后转为BAM文件,排序,标记重复等。之后用StringTie进行转录本组装和定量,得到表达矩阵。然后可能需要合并所有样本的结果,使用prepDE.py成计数矩阵。下游分析可能包括DESeq2或edgeR进行差异表达分析,功能富集分析如GO、KEGG等。 需要注意样本可能有多个,比如HA1、HA2等,所以代码需要考虑循环处理多个样本。用户目前只有HA1,但可能需要扩展性,所以用变量处理样本名。 然后,编写代码步:质控、比对、定量、合并表达矩阵、差异分析、富集分析。每个步需要相应的工具和命令。比如FastQC、HISAT2samtoolsStringTieprepDE.py,以及R脚本进行差异分析。 另外,需要确保参考基因组和注释文件的路径正确,用户可能需要自己下载,比如从Ensembl或GENCODE获取。代码中需要替换相应的路径。 还要考虑计算资源,比如线程数,内存限制,可能需要根据用户的实际环境调整参数,比如使用4个线程。 最后,成报告,比如MultiQC汇总质控结果,DESeq2的结果可视化等。可能还需要注释差异基因,使用clusterProfiler等工具。 需要检查每个步的命令是否正确,比如HISAT2的索引是否存在,文件路径是否正确,输出目录是否需要创建。比如在每个步前使用mkdir -p创建目录。 可能用户对Linux信流程有一定了解,但需要详细的代码示例,所以注释每个步的作用,并提示需要安装的软件和准备工作。 可能需要提醒用户安装必要的软件,比如conda安装hisat2, stringtie, samtools, fastqc等。或者提供conda安装命令。 最后,确保代码的可复制性,使用变量代替硬编码路径,方便用户修改。比如设置ref_genome和annotation的路径变量。 总结:流程包括质控、比对、定量、差异分析、富集分析,每个步的代码示例,注意事项和软件安装提示。</think>以下是一个基于Linux系统的转录组分析流程示例代码,包含数据处理和下游分析的关键步。请根据实际情况调整参数和路径: ```bash #!/bin/bash # 设置路径变量(按需修改) clean_data_dir="/home/yangjiayi/数据/转录组/原始数据/Data/CleanData" output_dir="/home/yangjiayi/数据/转录组/分析结果" ref_genome="/path/to/reference_genome/hg38_index" # HISAT2索引路径 annotation="/path/to/annotation/gencode.v40.annotation.gtf" # 注释文件路径 # 创建输出目录结构 mkdir -p ${output_dir}/{fastqc,hisat2,stringtie,deseq2} ########################## # 1. 原始数据质量评估 ########################## for sample in HA1; do fastqc -t 4 \ ${clean_data_dir}/${sample}/${sample}_Clean_Data1.fq.gz \ ${clean_data_dir}/${sample}/${sample}_Clean_Data2.fq.gz \ -o ${output_dir}/fastqc/ done # 成汇总报告 multiqc ${output_dir}/fastqc/ -o ${output_dir}/fastqc/ ########################## # 2. 序列比对 ########################## for sample in HA1; do hisat2 -p 4 \ -x ${ref_genome} \ -1 ${clean_data_dir}/${sample}/${sample}_Clean_Data1.fq.gz \ -2 ${clean_data_dir}/${sample}/${sample}_Clean_Data2.fq.gz \ -S ${output_dir}/hisat2/${sample}.sam # 格式转换 samtools view -@ 4 -Sb ${output_dir}/hisat2/${sample}.sam > ${output_dir}/hisat2/${sample}.bam samtools sort -@ 4 -o ${output_dir}/hisat2/${sample}_sorted.bam ${output_dir}/hisat2/${sample}.bam samtools index ${output_dir}/hisat2/${sample}_sorted.bam done ########################## # 3. 转录本定量 ########################## for sample in HA1; do stringtie ${output_dir}/hisat2/${sample}_sorted.bam \ -p 4 \ -G ${annotation} \ -o ${output_dir}/stringtie/${sample}_expression.gtf \ -A ${output_dir}/stringtie/${sample}_gene_abundance.tsv done # 合并所有样本表达矩阵 find ${output_dir}/stringtie/ -name "*_expression.gtf" > ${output_dir}/stringtie/gtf_list.txt stringtie --merge -p 4 -G ${annotation} \ -o ${output_dir}/stringtie/merged_assembly.gtf \ ${output_dir}/stringtie/gtf_list.txt ########################## # 4. 成计数矩阵 ########################## # 需要准备样本列表文件 echo "HA1 ${output_dir}/stringtie/HA1_expression.gtf" > ${output_dir}/stringtie/sample_list.txt # 使用prepDE.py成计数矩阵(需从StringTie官网下载该脚本) python prepDE.py \ -i ${output_dir}/stringtie/sample_list.txt \ -g ${output_dir}/deseq2/gene_count_matrix.csv \ -t ${output_dir}/deseq2/transcript_count_matrix.csv ########################## # 5. 下游分析(R脚本示例) ########################## cat > ${output_dir}/deseq2/differential_expression.R <<EOF # 差异表达分析 library(DESeq2) countData <- read.csv("${output_dir}/deseq2/gene_count_matrix.csv", row.names=1) dds <- DESeqDataSetFromMatrix(countData, colData=data.frame(condition=rep("HA1",1)), design=~1) dds <- DESeq(dds) res <- results(dds) write.csv(res, "${output_dir}/deseq2/DE_results.csv") # 可视化(示例) pdf("${output_dir}/deseq2/MA_plot.pdf") plotMA(res, main="DESeq2 MA Plot") dev.off() EOF # 运行R脚本 Rscript ${output_dir}/deseq2/differential_expression.R ``` 使用说明: 1. 环境要求: - 安装必要软件:`sudo apt-get install hisat2 samtools stringtie fastqc multiqc r-base` - 需提前准备参考基因组和注释文件(推荐使用GENCODE或Ensembl数据库) 2. 关键步说明: - 质量评估:使用FastQC和MultiQC成质量报告 - 序列比对:使用HISAT2将reads比对到参考基因组 - 转录本组装:使用StringTie进行转录本定量 - 差异分析:使用DESeq2进行差异表达基因分析 3. 扩展建议: - 添加更多样本时,修改`for sample in HA1`部分为样本列表 - 差异分析需要至少两个实验条件,当前示例为单样本演示 - 建议使用conda管理物信息软件环境 4. 下游分析扩展: - 基因功能注释(GO/KEGG分析) - 蛋白互作网络分析 - 可视化(热图、火山图等) 注意:实际使用时需要根据实验设计和计算资源调整线程数(-p参数)和内存参数。建议在计算集群或高性能服务器上运行大数据量分析
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值