师兄手把手教你:用排序后的 BAM 文件算表达量(含代码)

文摘   2024-11-21 20:01   英国  




基因表达量counts/FPKM/TPM

是什么?


哎呀,做转录组分析算表达量?其实没那么复杂,跟着我一步步来就行。我讲得很简单,听完你肯定能搞定!咱们目标很明确:用排序后的 BAM 文件算出基因的表达量,最后生成标准化的 counts 数据。


01

先装工具,featureCounts 是关键!


要算表达量,得用到 Subread 工具集里的 featureCounts。这个工具专业、高效,好用得不得了。


conda install -c bioconda subread

02

先装工具,featureCounts 是关键!

有了工具,咱们直接上代码。这个脚本帮你处理多个路径里的 BAM 文件,

一次性把表达量都算出来。

# 定义要循环的路径列表paths=(        "排序后bam文件的绝对路径"   )#定义输出路径,如/home/counts_fileoutput_path="定义counts文件的输出路径"mkdir -p "$output_path"

# 循环遍历路径列表for path in "${paths[@]}"; do # 在每个路径下执行您的命令 folder_name=$(basename "$path") cd "$path" # 切换到当前路径#指定基因组注释文件路径和文件名,如/home/Genome.gffannotation_file="基因组注释文件的绝对路径及文件名"
# 循环遍历 BAM 文件for bam_file in "$path"/*.bam; do # 提取文件名作为样本名 sample_name=$(basename "$bam_file" .bam)
# 使用 featureCounts 计算表达量。-T:指定线程数;-a:指定注释文件;-o指定输出路径(不填则为工作路径)/文件名;-p:指定双端测序;-t:指定输出的表达量是mRNA,gene或者exon等;-g:基因标识符属性(如'ID=Ts_Contig1_G00001.t1.exon1;Parent=Ts_Contig1_G00001.t1'则为ID) featureCounts -T 50 -a "$annotation_file" -o "$output_path"/"${sample_name}.counts.txt" -p -t gene -g ID "$bam_file"donedone


简单说,这个脚本干了啥:

  1. 自动找到所有路径里的 BAM 文件。

  2. 用 featureCounts 计算每个样本的基因表达量。

  3. 输出 counts.txt 文件,直接能用

03

整理 counts 文件,方便管理

看着分散的 counts 文件,咱们再来一步,把它们都汇总到一个地方。

#!/bin/bash#如有多个路径,可以第一行之后同时定义,会依次执行paths=(        "定义counts文件的原路径,上一步中保存在排序过的bam文件中")#定义自己的counts文件要移动到的目标路径,如/home/Cal_Expressiontarget_path="定义目标路径"mkdir -p "$target_path"
for path in "${paths[@]}"; do cd "$path" for counts_file in "$path"/*.txt; do cp "$counts_file" "$target_path" donedone

就这样,所有 counts 文件都整齐地放在 /Cal_Expression 文件夹了,后续分析方便多了。

04

用 WinSCP 下载到本地




最后一步,打开 WinSCP,连接服务器,导航到 /Cal_Expression,一键下载到电脑就好了。

这些 counts 文件可以直接用来做后续分析,比如差异表达分析(DESeq2、edgeR 等)。

DESeq2可以查看差异基因分析神器来了:几秒搞定两个样本的转录本表达差异!


小总结



听完是不是觉得不难?有啥不懂的随时来问我!
咱们科研嘛,很多事情其实就看你上不上手,工具用顺了就跟玩似的,效率贼高!如果你觉得好用,记得把这套方法分享给其他师弟师妹,一起搞效率!✌️

点击上方 蓝字关注我们


基因魔方
欢迎大家关注[基因魔方],这是一个致力于分享基因挖掘、生物信息学、基因组学和科研工具应用的专业平台!🎓代码实操相关的内容都是自己实践过才分享给大家的,如果在使用过程有问题,欢迎大家私聊客服,我们会尽力给大家解决!!!