生信组学分析
本页目录 · 共 28 节
- 配套代码
- 0. 怎么用这份笔记
- 1. 先搞清楚:生信组学分析到底在干什么
- 2. 模块一:生物数据格式与常用数据库
- 2.1 格式与文件处理
- 2.2 公共数据库
- 3. 模块二:序列分析
- 4. 模块三:转录组 RNA-seq 完整链条(本模块重点)
- 4.1 一步到位的整合流程(推荐先拿它跑通)
- 4.2 拆开做:逐步工具链
- 4.3 功能富集与解释
- 5. 模块四:单细胞分析
- 6. 模块五:ChIP-seq / 表观遗传入门
- 7. 模块六:变异检测(GATK 等)
- 8. 模块七:统计与绘图
- 9. 零基础上手路径(按周推进)
- 第 0 周:把环境搭起来(别跳过这步)
- 第 1 周:格式 + 数据库 + Python 小工具
- 第 2 周:R 与绘图
- 第 3 周:序列分析
- 第 4–5 周:RNA-seq 全链(本模块核心,值得花两周)
- 第 6 周:单细胞
- 第 7 周:富集 + 选学一个分支
- 第 8 周:复盘 + 小项目
- 各模块「可跳过」清单(省时间用)
- 10. 环境安装速查 & 避坑
- 11. 术语速查表
- 12. 参考文献与验证说明
配套代码
下面这些脚本随本模块一起提供,右边标的是它在真实环境里的验证状态;点「展开代码」可以直接在网页上看全文,点「下载」拿到原文件。
RNA-seq 主流程模板:fastp 修剪 → HISAT2 比对 → samtools 排序 → featureCounts 计数 → MultiQC 汇总。
展开代码
#!/usr/bin/env bash
###############################################################################
# RNA-seq 标准分析流程模板(bash)
# 用途:从双端 FASTQ 走到基因水平计数矩阵,供下游 DESeq2 使用
# 工具链:fastp -> HISAT2 -> samtools -> featureCounts -> MultiQC
# 说明:所有路径都用变量集中管理,换数据只改 CONFIG 段即可
###############################################################################
set -euo pipefail
################################ CONFIG #####################################
# 工作目录
WORKDIR="/path/to/project"
RAW_DIR="${WORKDIR}/00_rawdata" # 原始 fastq.gz 放在这里
REF_DIR="${WORKDIR}/reference" # 参考基因组 fasta 与 gtf 放在这里
OUT_DIR="${WORKDIR}/results"
# 参考文件(需自行下载,例如 Ensembl 的 Homo_sapiens.GRCh38)
GENOME_FA="${REF_DIR}/genome.fa"
GTF="${REF_DIR}/annotation.gtf"
# HISAT2 索引前缀(若不存在则自动构建)
HISAT2_INDEX="${REF_DIR}/hisat2_index/genome"
# 线程数与内存
THREADS=8
SORT_MEM="4G"
# 样本表(TSV,两列:sample_id 和分组;# 开头为注释)
SAMPLESHEET="${WORKDIR}/samples.tsv"
# fastp 参数
ADAPTER_R1="AGATCGGAAGAGCACACGTCTGAACTCCAGTCA"
ADAPTER_R2="AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGT"
MIN_LEN=36 # 修剪后最短保留长度
MIN_QUAL=20 # 质量阈值
################################ END CONFIG #################################
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; }
mkdir -p "${OUT_DIR}"/{01_fastqc,02_trimmed,03_bam,04_counts,05_qc_report}
#------------------------------------------------------------------------------
# 0. 检查输入
#------------------------------------------------------------------------------
[[ -f "${GENOME_FA}" ]] || { echo "缺少参考基因组: ${GENOME_FA}"; exit 1; }
[[ -f "${GTF}" ]] || { echo "缺少注释文件: ${GTF}"; exit 1; }
[[ -f "${SAMPLESHEET}" ]] || { echo "缺少样本表: ${SAMPLESHEET}"; exit 1; }
log "参考基因组建立索引(若已存在会跳过)"
samtools faidx "${GENOME_FA}"
#------------------------------------------------------------------------------
# 1. 构建 HISAT2 索引(只跑一次)
#------------------------------------------------------------------------------
if [[ ! -f "${HISAT2_INDEX}.1.ht2" ]]; then
log "构建 HISAT2 索引"
mkdir -p "$(dirname "${HISAT2_INDEX}")"
hisat2-build -p "${THREADS}" "${GENOME_FA}" "${HISAT2_INDEX}"
else
log "HISAT2 索引已存在,跳过"
fi
#------------------------------------------------------------------------------
# 2. 逐样本:质控 -> 修剪 -> 比对 -> 排序
#------------------------------------------------------------------------------
while read -r sample group; do
[[ -z "${sample}" || "${sample}" == \#* ]] && continue
log "处理样本 ${sample}(分组 ${group})"
R1="${RAW_DIR}/${sample}_1.fastq.gz"
R2="${RAW_DIR}/${sample}_2.fastq.gz"
[[ -f "${R1}" && -f "${R2}" ]] || { echo "缺少 ${sample} 的 fastq"; exit 1; }
# 2.1 原始数据质控(FastQC)
fastqc -t "${THREADS}" -o "${OUT_DIR}/01_fastqc" "${R1}" "${R2}"
# 2.2 去接头 + 质量过滤(fastp)
fastp \
-i "${R1}" -I "${R2}" \
-o "${OUT_DIR}/02_trimmed/${sample}_1.trim.fq.gz" \
-O "${OUT_DIR}/02_trimmed/${sample}_2.trim.fq.gz" \
--adapter_sequence "${ADAPTER_R1}" \
--adapter_sequence_r2 "${ADAPTER_R2}" \
--qualified_quality_phred "${MIN_QUAL}" \
--length_required "${MIN_LEN}" \
--detect_adapter_for_pe \
--thread "${THREADS}" \
--json "${OUT_DIR}/02_trimmed/${sample}.fastp.json" \
--html "${OUT_DIR}/02_trimmed/${sample}.fastp.html"
# 2.3 比对(HISAT2),直接转 BAM
hisat2 -p "${THREADS}" -x "${HISAT2_INDEX}" \
-1 "${OUT_DIR}/02_trimmed/${sample}_1.trim.fq.gz" \
-2 "${OUT_DIR}/02_trimmed/${sample}_2.trim.fq.gz" \
2> "${OUT_DIR}/03_bam/${sample}.hisat2.log" \
| samtools view -@ "${THREADS}" -bS - \
| samtools sort -@ "${THREADS}" -m "${SORT_MEM}" -o "${OUT_DIR}/03_bam/${sample}.sorted.bam" -
samtools index -@ "${THREADS}" "${OUT_DIR}/03_bam/${sample}.sorted.bam"
# 比对统计(后续 MultiQC 会汇总)
samtools flagstat -@ "${THREADS}" "${OUT_DIR}/03_bam/${sample}.sorted.bam" \
> "${OUT_DIR}/03_bam/${sample}.flagstat.txt"
done < "${SAMPLESHEET}"
#------------------------------------------------------------------------------
# 3. 基因水平计数(featureCounts)
#------------------------------------------------------------------------------
log "运行 featureCounts 汇总计数矩阵"
BAM_LIST=$(awk '!/^#/ && NF>0 {print "'"${OUT_DIR}"'/03_bam/"$1".sorted.bam"}' "${SAMPLESHEET}")
featureCounts \
-T "${THREADS}" \
-p --countReadPairs \
-t exon -g gene_id \
-a "${GTF}" \
-o "${OUT_DIR}/04_counts/gene_counts.txt" \
${BAM_LIST}
# 去掉行首注释,得到干净的计数矩阵(DESeq2 可直接读)
grep -v '^#' "${OUT_DIR}/04_counts/gene_counts.txt" | cut -f1,7- \
> "${OUT_DIR}/04_counts/counts_matrix.tsv"
log "计数矩阵完成: ${OUT_DIR}/04_counts/counts_matrix.tsv"
#------------------------------------------------------------------------------
# 4. 汇总质控报告(MultiQC)
#------------------------------------------------------------------------------
log "生成 MultiQC 汇总报告"
multiqc -f -o "${OUT_DIR}/05_qc_report" "${OUT_DIR}"
log "流程结束。下一步:Rscript deseq2_de.R"
###############################################################################
# 依赖:fastqc fastp hisat2 samtools subread multiqc
# 一次性安装(conda 环境见 environment.yaml):
# conda create -n rnaseq -c conda-forge -c bioconda \
# fastqc fastp hisat2 samtools subread multiqc
# 样本表 samples.tsv 示例(制表符分隔):
# sample_id group
# ctrl_1 control
# ctrl_2 control
# treat_1 treated
# treat_2 treated
# 运行:
# chmod +x run_rnaseq.sh && ./run_rnaseq.sh
###############################################################################差异表达模板:DESeq2 建模与标准化、lfcShrink 收缩、导出差异表,并出火山图 / PCA / 样本距离热图。
展开代码
#!/usr/bin/env Rscript
###############################################################################
# DESeq2 差异表达分析模板
# 输入:run_rnaseq.sh 产出的 counts_matrix.tsv + samples.tsv
# 输出:标准化表达矩阵、差异结果表、火山图、PCA 图、样本距离热图
###############################################################################
suppressPackageStartupMessages({
library(DESeq2)
library(ggplot2)
library(pheatmap)
})
## ------------------------------ 参数 ---------------------------------------
count_file <- "results/04_counts/counts_matrix.tsv" # 计数矩阵
coldata_file <- "samples.tsv" # 样本表(sample_id / group)
out_dir <- "results/06_DE"
ref_level <- "control" # 对照组(参考水平),按你的分组改
padj_cut <- 0.05 # 显著性阈值
lfc_cut <- 1 # log2FC 阈值
dir.create(out_dir, showWarnings = FALSE, recursive = TRUE)
## ---------------------------- 读入数据 -------------------------------------
counts <- read.delim(count_file, row.names = 1, check.names = FALSE)
counts <- as.matrix(counts)
coldata <- read.delim(coldata_file, stringsAsFactors = FALSE,
comment.char = "#")
rownames(coldata) <- coldata$sample_id
coldata$group <- factor(coldata$group)
coldata$group <- relevel(coldata$group, ref = ref_level)
## 对齐样本顺序(这一步漏了会直接报错或结果错乱)
common <- intersect(colnames(counts), rownames(coldata))
if (length(common) == 0) stop("计数矩阵列名与样本表 sample_id 对不上,请检查")
counts <- counts[, common, drop = FALSE]
coldata <- coldata[common, , drop = FALSE]
message("样本数:", ncol(counts), ";基因数:", nrow(counts))
message("分组:", paste(levels(coldata$group), collapse = " vs "))
## --------------------------- 构建 DESeq 对象 -------------------------------
dds <- DESeqDataSetFromMatrix(countData = counts,
colData = coldata,
design = ~ group)
## 过滤低表达基因:至少在一半样本里 count >= 10
keep <- rowSums(counts(dds) >= 10) >= floor(ncol(counts) / 2)
dds <- dds[keep, ]
message("过滤后保留基因数:", nrow(dds))
## ---------------------- 标准化 + 差异分析 ----------------------------------
dds <- DESeq(dds)
## 提取结果(本例取 实验组 vs 对照组)
res <- results(dds, contrast = c("group",
setdiff(levels(coldata$group), ref_level)[1],
ref_level))
res <- res[order(res$padj), ]
## 收缩 log2FC(推荐,减少低表达基因的假阳性)
res_shrunk <- lfcShrink(dds, coef = resultsNames(dds)[2], type = "apeglm")
## ------------------------------ 导出结果 -----------------------------------
norm_counts <- counts(dds, normalized = TRUE)
write.table(norm_counts, file = file.path(out_dir, "normalized_counts.tsv"),
sep = "\t", quote = FALSE, col.names = NA)
res_df <- as.data.frame(res_shrunk)
res_df$gene <- rownames(res_df)
write.table(res_df, file = file.path(out_dir, "DE_results_all.tsv"),
sep = "\t", quote = FALSE, row.names = FALSE)
## 显著差异基因
sig <- subset(res_df, !is.na(padj) & padj < padj_cut & abs(log2FoldChange) > lfc_cut)
write.table(sig, file = file.path(out_dir, "DE_genes_significant.tsv"),
sep = "\t", quote = FALSE, row.names = FALSE)
message("显著差异基因:", nrow(sig), " 个(上调 ",
sum(sig$log2FoldChange > 0), ",下调 ", sum(sig$log2FoldChange < 0), ")")
## ------------------------------ 可视化 -------------------------------------
## 1) 火山图
volcano_df <- as.data.frame(res_shrunk)
volcano_df$significance <- "NotSig"
volcano_df$significance[volcano_df$padj < padj_cut &
volcano_df$log2FoldChange > lfc_cut] <- "Up"
volcano_df$significance[volcano_df$padj < padj_cut &
volcano_df$log2FoldChange < -lfc_cut] <- "Down"
p_volcano <- ggplot(volcano_df,
aes(x = log2FoldChange, y = -log10(padj),
color = significance)) +
geom_point(alpha = 0.7, size = 1.2) +
scale_color_manual(values = c(Up = "#c0392b", Down = "#2471a3",
NotSig = "grey75")) +
geom_vline(xintercept = c(-lfc_cut, lfc_cut), linetype = "dashed") +
geom_hline(yintercept = -log10(padj_cut), linetype = "dashed") +
labs(x = "log2 fold change", y = "-log10(padj)", color = NULL,
title = "Differential expression") +
theme_bw(base_size = 13)
ggsave(file.path(out_dir, "volcano.pdf"), p_volcano, width = 6, height = 5)
ggsave(file.path(out_dir, "volcano.png"), p_volcano, width = 6, height = 5,
dpi = 300)
## 2) PCA 图(用方差稳定变换后的数据)
vsd <- vst(dds, blind = FALSE)
pca <- plotPCA(vsd, intgroup = "group", returnData = TRUE)
pct <- round(100 * attr(pca, "percentVar"))
p_pca <- ggplot(pca, aes(PC1, PC2, color = group, label = name)) +
geom_point(size = 3) +
geom_text(vjust = -1, size = 3, show.legend = FALSE) +
xlab(paste0("PC1: ", pct[1], "% variance")) +
ylab(paste0("PC2: ", pct[2], "% variance")) +
theme_bw(base_size = 13)
ggsave(file.path(out_dir, "PCA.pdf"), p_pca, width = 6, height = 5)
## 3) 样本相关性热图
sample_dist <- dist(t(assay(vsd)))
dist_mat <- as.matrix(sample_dist)
pdf(file.path(out_dir, "sample_distance_heatmap.pdf"), width = 7, height = 6)
pheatmap(dist_mat, clustering_distance_rows = sample_dist,
clustering_distance_cols = sample_dist,
annotation_col = data.frame(group = coldata$group,
row.names = rownames(coldata)),
main = "Sample-to-sample distance")
dev.off()
## 4) 显著基因热图(取前 50 个最显著基因)
if (nrow(sig) > 1) {
top_n <- head(sig$gene, 50)
pdf(file.path(out_dir, "top50_heatmap.pdf"), width = 8, height = 10)
pheatmap(assay(vsd)[top_n, ], scale = "row",
annotation_col = data.frame(group = coldata$group,
row.names = rownames(coldata)),
show_rownames = TRUE, fontsize_row = 6,
main = "Top 50 DE genes")
dev.off()
}
message("全部完成,结果见:", normalizePath(out_dir))
###############################################################################
# 依赖安装:
# BiocManager::install(c("DESeq2"))
# install.packages(c("ggplot2","pheatmap"))
# 运行:
# Rscript deseq2_de.R
# 注意:
# 1) apeglm 收缩需要 install.packages("apeglm");没装可把 type 改成 "ashr"
# 或直接不收缩,用 res(注意此时 log2FC 更保守)
# 2) 分组水平名必须是合法 R 变量名,避免 "ctrl-x" 这类带横线的名字
###############################################################################功能富集模板:clusterProfiler 跑 GO / KEGG / GSEA,输出结果表与气泡图 / 条形图。
展开代码
#!/usr/bin/env Rscript
###############################################################################
# 功能富集与可视化模板(clusterProfiler)
# 输入:deseq2_de.R 产出的 DE_genes_significant.tsv
# 输出:GO / KEGG 富集结果表 + 气泡图 + 条形图,附带 GSEA 示例
###############################################################################
suppressPackageStartupMessages({
library(clusterProfiler)
library(org.Hs.eg.db) # 人类注释,换物种需换对应的 org.*.eg.db
library(ggplot2)
library(enrichplot)
})
## ------------------------------ 参数 ---------------------------------------
deg_file <- "results/06_DE/DE_genes_significant.tsv"
all_file <- "results/06_DE/DE_results_all.tsv"
out_dir <- "results/07_enrichment"
padj_cut <- 0.05
dir.create(out_dir, showWarnings = FALSE, recursive = TRUE)
## ---------------------------- 读入基因列表 ---------------------------------
deg <- read.delim(deg_file, stringsAsFactors = FALSE)
up_genes <- deg$gene[deg$log2FoldChange > 0]
down_genes <- deg$gene[deg$log2FoldChange < 0]
message("上调基因 ", length(up_genes), ",下调基因 ", length(down_genes))
## 基因 ID 转换(Ensembl -> Entrez)
convert <- function(ids) {
mapIds(org.Hs.eg.db, keys = ids, column = "ENTREZID",
keytype = "ENSEMBL", multiVals = "first")
}
## ------------------------- 1. GO 富集(过表征分析) ------------------------
run_go <- function(ids, tag) {
eg <- bitr(ids, fromType = "ENSEMBL", toType = "ENTREZID",
OrgDb = org.Hs.eg.db)
if (nrow(eg) == 0) return(NULL)
for (ont in c("BP", "CC", "MF")) {
res <- enrichGO(gene = eg$ENTREZID, OrgDb = org.Hs.eg.db,
ont = ont, keyType = "ENTREZID",
pAdjustMethod = "BH", pvalueCutoff = 0.05,
qvalueCutoff = 0.2, readable = TRUE)
if (is.null(res) || nrow(as.data.frame(res)) == 0) next
write.table(as.data.frame(res),
file = file.path(out_dir, paste0("GO_", ont, "_", tag, ".tsv")),
sep = "\t", quote = FALSE, row.names = FALSE)
p <- dotplot(res, showCategory = 15) +
ggtitle(paste0("GO ", ont, " enrichment (", tag, ")"))
ggsave(file.path(out_dir, paste0("GO_", ont, "_", tag, ".pdf")),
p, width = 8, height = 7)
}
}
run_go(up_genes, "up")
run_go(down_genes, "down")
## ---------------------------- 2. KEGG 富集 ---------------------------------
run_kegg <- function(ids, tag) {
eg <- bitr(ids, fromType = "ENSEMBL", toType = "ENTREZID",
OrgDb = org.Hs.eg.db)
if (nrow(eg) == 0) return(NULL)
kk <- enrichKEGG(gene = eg$ENTREZID, organism = "hsa",
keyType = "kegg", pvalueCutoff = 0.05,
qvalueCutoff = 0.2)
if (is.null(kk) || nrow(as.data.frame(kk)) == 0) return(NULL)
kk <- setReadable(kk, OrgDb = org.Hs.eg.db, keyType = "ENTREZID")
write.table(as.data.frame(kk),
file = file.path(out_dir, paste0("KEGG_", tag, ".tsv")),
sep = "\t", quote = FALSE, row.names = FALSE)
p <- barplot(kk, showCategory = 15, x = "GeneRatio") +
ggtitle(paste0("KEGG enrichment (", tag, ")"))
ggsave(file.path(out_dir, paste0("KEGG_", tag, ".pdf")),
p, width = 8, height = 7)
}
run_kegg(up_genes, "up")
run_kegg(down_genes, "down")
## --------------------------- 3. GSEA(进阶) -------------------------------
## GSEA 用全部基因按 log2FC 排序,不设阈值,优势是不丢信息
all_res <- read.delim(all_file, stringsAsFactors = FALSE)
all_res <- all_res[!is.na(all_res$padj) & !is.na(all_res$entrez),
c("gene", "log2FoldChange")]
gene_list <- all_res$log2FoldChange
names(gene_list) <- all_res$gene
gene_list <- sort(gene_list, decreasing = TRUE)
## 把 Ensembl 换成 Entrez
eg_all <- bitr(names(gene_list), fromType = "ENSEMBL", toType = "ENTREZID",
OrgDb = org.Hs.eg.db)
gene_list <- gene_list[eg_all$ENSEMBL]
names(gene_list) <- eg_all$ENTREZID
gse <- gseGO(geneList = gene_list, OrgDb = org.Hs.eg.db, ont = "BP",
keyType = "ENTREZID", pvalueCutoff = 0.05,
minGSSize = 10, maxGSSize = 500)
if (!is.null(gse) && nrow(as.data.frame(gse)) > 0) {
write.table(as.data.frame(gse),
file = file.path(out_dir, "GSEA_GO_BP.tsv"),
sep = "\t", quote = FALSE, row.names = FALSE)
pdf(file.path(out_dir, "GSEA_ridgeplot.pdf"), width = 8, height = 8)
print(ridgeplot(gse, showCategory = 15))
dev.off()
}
message("富集分析完成,结果见:", normalizePath(out_dir))
###############################################################################
# 依赖安装:
# BiocManager::install(c("clusterProfiler","org.Hs.eg.db","enrichplot"))
# 换物种:小鼠用 org.Mm.eg.db + organism = "mmu";其余同理
# 运行:Rscript enrichment_plot.R
# 常见坑:
# 1) 基因 ID 类型必须说清(ENSEMBL / SYMBOL / ENTREZID),搞错会返回空结果
# 2) 网络不通时 enrichKEGG 会失败,可改 enrichGO(纯本地注释,不联网)
# 3) 富集结果没有条目数,通常是基因太少或 ID 没对上,先检查 bitr 的返回
###############################################################################conda 环境清单(bioconda 渠道),一条命令装齐工具链。
展开代码
# RNA-seq 分析环境依赖清单
# 用法:mamba env create -f environment.yaml (或 conda env create -f ...)
# conda activate rnaseq
# 说明:下面写的是撰写时的版本号,仅作参考。若创建环境时报找不到某个版本
# (solvability / PackagesNotFoundError),把对应包的 =版本号 删掉即可,
# conda 会自动选当前可用版本。正式分析前请保存 conda list 的输出以便复现。
name: rnaseq
channels:
- bioconda
- conda-forge
- defaults
dependencies:
# ---- 基础工具 ----
- python=3.11
- pip
# ---- 质控与修剪 ----
- fastqc=0.12.1
- fastp=0.23.4
- trim-galore=0.6.10
- multiqc=1.21
- sortmerna=4.3.6
# ---- 比对 ----
- bwa=0.7.18
- bowtie2=2.5.3
- hisat2=2.2.1
- star=2.7.11b
- minimap2=2.28
# ---- 处理 SAM/BAM/VCF ----
- samtools=1.20
- bcftools=1.20
- bedtools=2.31.1
- picard=3.1.1
# ---- 序列工具 ----
- seqkit=2.8.1
- mafft=7.526
# ---- 定量 ----
- subread=2.0.6 # 提供 featureCounts
- salmon=1.10.2 # 伪比对定量
- kallisto=0.50.1
- rsem=1.3.3
- stringtie=2.2.3
# ---- 表观 / 变异 ----
- macs3=3.0.1
- deeptools=3.5.4
- snpeff=5.1
# ---- 流程引擎(可选,跑 nf-core 时用)----
- nextflow=24.10.0
# ---- R 与常用包 ----
- r-base=4.3
- r-tidyverse
- r-ggplot2
- r-pheatmap
- r-rcolorbrewer
- bioconductor-deseq2
- bioconductor-edger
- bioconductor-tximport
- bioconductor-clusterprofiler
- bioconductor-org.hs.eg.db
- bioconductor-enrichplot
- bioconductor-complexheatmap
- bioconductor-chipseeker脚本使用说明:装环境、准备输入、跑流程、怎么读结果。
面向对象:有医学/生物背景、但没系统跑过生信分析的师妹。 编写目标:一条能真正跑通的路径,资源全部是可访问的官方文档、GitHub 仓库或公开数据库。 所有链接都逐条打开验证过;打不开的一律不收(文末列出舍弃清单)。
0. 怎么用这份笔记
- 先跑通再理解。生信最大的坑不是不懂原理,是环境装不上、命令报错、数据格式对不上。建议先照第 4 节把 RNA-seq 一条链跑完,再回头看原理。
- 每条资源给了 7 个标注:名称 / 链接 / 类型 / 文档语言 / 难度 / 能否直接跑通 / 一句话说明。
- 难度分三档:
入门(有电脑就能跟)、进阶(要会 Linux 或 R/Python)、参考(当字典查,不用通读)。 - 能否直接跑通:
是表示官方带了示例数据或 test profile;需数据表示要自己准备输入;部分表示教程可跑但依赖特定环境。 - 环境建议:Linux 或 Windows 的 WSL2,包管理统一用
conda+bioconda(见第 10 节)。别在 Windows 原生环境里折腾生信软件,会浪费很多时间。
1. 先搞清楚:生信组学分析到底在干什么
一条主线,所有组学分析都是这个套路:
测序仪产出 FASTQ(读段)
→ 质控 / 去接头(FastQC、fastp、Trim Galore)
→ 比对到参考基因组(BWA / HISAT2 / STAR)或伪比对(Salmon / kallisto)
→ 定量(featureCounts 数 reads,或 Salmon 估 TPM/丰度)
→ 统计检验(DESeq2 / edgeR 找差异表达)
→ 功能解释(clusterProfiler 做 GO/KEGG/GSEA 富集)
→ 画图讲结论(ggplot2、ComplexHeatmap、IGV 看位点)三个分支变体: - 序列分析:不测全基因组,只关心某几条序列(比对、多序列比对、建树)。 - 变异 / 表观:把比对、定量换成找变异(GATK)或找富集峰(MACS3)。 - 单细胞:把「一堆细胞混在一起测」换成「每个细胞单独测」,于是多了降维、聚类、注释这几步。
前置技能(不学这三样,后面寸步难行):
1. Linux 命令行:cd / ls / cp / grep / head / awk 加管道 |、重定向 >。
2. R 基础:向量、data.frame、读表、装包。这是生信下游统计与绘图的主力。
3. 一点 Python:处理文本、调 API(Biopython 用)。
如果时间紧,可以跳过的方向:系统发育树构建、基因组组装、长读长测序、蛋白质结构预测、云平台(AWS/GCP)部署。这些跟师姐的分子对接课题关联不大,属于「知道有这东西」即可。
2. 模块一:生物数据格式与常用数据库
2.1 格式与文件处理
| 名称 | 链接 | 类型 | 文档语言 | 难度 | 能跑通 | 一句话说明 |
|---|---|---|---|---|---|---|
| hts-specs 格式规范 | https://samtools.github.io/hts-specs/ | 规范 | 英文 | 参考 | 否 | SAM/BAM/CRAM、VCF、BED 的官方格式定义,PDF 直接下,查字段含义用 |
| samtools / htslib 官网 | https://www.htslib.org/ | 工具·教程 | 英文 | 入门 | 是 | 处理 SAM/BAM/CRAM 的标准工具,官网带 FASTQ→BAM、WGS 变异两条 workflow 示例 |
| BCFtools | https://samtools.github.io/bcftools/ | 工具·文档 | 英文 | 进阶 | 是 | 读写 VCF/BCF、过滤与统计变异的配套工具,手册和 howto 都在站内 |
| SeqKit | https://github.com/shenwei356/seqkit | 工具 | 英文 | 入门 | 是 | 处理 FASTA/FASTQ 的超快命令行工具,conda install -c bioconda seqkit 即装即用 |
| SeqKit 文档站 | http://bioinf.shenwei.me/seqkit/ | 文档 | 英文 | 入门 | 是 | 用法、教程、benchmark 齐全,比 README 更好查 |
| Biopython 官网 | https://biopython.org/ | 库·教程 | 英文 | 入门 | 是 | Python 处理生物序列的标配库,含 Tutorial 与 Cookbook |
| Biopython 文档索引 | https://biopython.org/wiki/Documentation | 文档 | 英文 | 入门 | 是 | 指向 Tutorial、SeqIO/AlignIO/PDB 各模块文档与 Cookbook |
| bedtools 文档 | https://bedtools.readthedocs.io/en/latest/ | 工具·教程 | 英文 | 进阶 | 是 | 基因组区间运算的瑞士军刀,intersect/merge/count 等,带完整教程 |
| NCBI SRA Toolkit | https://github.com/ncbi/sra-tools | 工具 | 英文 | 入门 | 是 | 从 SRA 下载测序原始数据的官方工具(prefetch/fasterq-dump),wiki 有下载与用法 |
小结:FASTQ 存读段,BAM 存比对结果,VCF 存变异,BED 存区间。搞清楚这四个,「什么文件配什么工具」就不会乱。
2.2 公共数据库
| 名称 | 链接 | 类型 | 文档语言 | 难度 | 能跑通 | 一句话说明 |
|---|---|---|---|---|---|---|
| NCBI GEO 概览 | https://www.ncbi.nlm.nih.gov/geo/info/overview.html | 数据库·文档 | 英文 | 入门 | 否 | 找公开转录组/芯片数据的首选,讲清了 GPL/GSM/GSE/GDS 的组织方式 |
| GEO2R | https://www.ncbi.nlm.nih.gov/geo/geo2r/ | 在线工具 | 英文 | 入门 | 是 | 不写代码就能对 GEO 数据集做差异表达,还会导出可复现的 R 脚本 |
| NCBI E-utilities 手册 | https://www.ncbi.nlm.nih.gov/books/NBK25501/ | API·文档 | 英文 | 进阶 | 是 | 用 URL 就能批量调 NCBI 38 个库,做自动化检索/下载全靠它 |
| UniProt 编程访问 | https://www.uniprot.org/help/programmatic_access | 数据库·API | 英文 | 进阶 | 是 | 蛋白序列与注释数据库,REST API 支持 FASTA/XML 等多种格式 |
| RCSB PDB 文件下载服务 | https://www.rcsb.org/docs/programmatic-access/file-download-services | 数据库·文档 | 英文 | 进阶 | 是 | 结构生物学数据银行,可直接脚本化下载 mmCIF/PDB 结构文件 |
| ChEMBL 数据库 | https://www.ebi.ac.uk/chembl/ | 数据库 | 英文 | 入门 | 否 | 药物活性数据库,做抑制剂筛选找阳性对照的必去地 |
| ChEMBL Web Services | https://www.ebi.ac.uk/chembl/api/data/docs | API·文档 | 英文 | 进阶 | 是 | ChEMBL 的在线 API 浏览器,可直接 GET 试跑,拿化合物/活性数据 |
| Ensembl | https://www.ensembl.org/index.html | 数据库 | 英文 | 入门 | 否 | 基因组注释资源,8 千多个物种,查基因/转录本坐标与序列 |
| KEGG | https://www.kegg.jp/ | 数据库 | 英文 | 入门 | 否 | 通路数据库,KEGG PATHWAY 是富集分析里最常被引用的通路来源 |
与课题相关:做 Yck2 抑制剂筛选时,ChEMBL 找已知抑制剂的活性数据、PDB 拉靶点结构、UniProt 拿靶点序列,是标准三件套。
3. 模块二:序列分析
| 名称 | 链接 | 类型 | 文档语言 | 难度 | 能跑通 | 一句话说明 |
|---|---|---|---|---|---|---|
| BLAST+ 命令行手册 | https://www.ncbi.nlm.nih.gov/books/NBK279690/ | 工具·文档 | 英文 | 进阶 | 是 | 本地 BLAST 的官方手册,含安装、建库、各类搜索参数 |
| BWA | https://github.com/lh3/bwa | 工具 | 英文 | 进阶 | 是 | 短读长比对到参考基因组的经典工具,bwa index + bwa mem 是短读标准流程 |
| Bowtie2 | https://github.com/BenLangmead/bowtie2 | 工具 | 英文 | 进阶 | 是 | 另一套主流短读比对器,对 ChIP-seq/小 RNA 场景常用 |
| HISAT2 | https://github.com/DaehwanKimLab/hisat2 | 工具 | 英文 | 进阶 | 是 | 剪接感知比对器,RNA-seq 首选之一,内存占用低 |
| HISAT2 官网 | https://daehwankimlab.github.io/hisat2/ | 文档 | 英文 | 进阶 | 是 | 手册与各版本说明,含 HISAT-3N(碱基转换测序)用法 |
| STAR | https://github.com/alexdobin/STAR | 工具 | 英文 | 进阶 | 是 | 高精度剪接比对器,哺乳动物基因组建索引需 ≥16GB 内存 |
| minimap2 | https://github.com/lh3/minimap2 | 工具 | 英文 | 进阶 | 是 | 长读长/基因组装对比对的首选,presets(map-ont、map-hifi、splice)很好用 |
| MAFFT | https://mafft.cbrc.jp/alignment/software/ | 工具·文档 | 英文 | 入门 | 是 | 多序列比对主流工具,不确定参数就 mafft --auto input > output |
| Clustal Omega | http://www.clustal.org/omega/ | 工具 | 英文 | 入门 | 是 | 可扩展的多序列比对工具,十万级序列也能算,命令行调用 |
| Picard | https://broadinstitute.github.io/picard/ | 工具·文档 | 英文 | 进阶 | 是 | 处理 SAM/BAM/VCF 的 Java 工具集(去重、加读组、建索引),GATK 流程常用 |
学习顺序:先 MAFFT(几条序列比对最直观)→ 再 BLAST(拿一条序列找相似)→ 最后 BWA/HISAT2(面对海量读段)。
4. 模块三:转录组 RNA-seq 完整链条(本模块重点)
4.1 一步到位的整合流程(推荐先拿它跑通)
| 名称 | 链接 | 类型 | 文档语言 | 难度 | 能跑通 | 一句话说明 |
|---|---|---|---|---|---|---|
| nf-core/rnaseq 官网 | https://nf-co.re/rnaseq | 流程·文档 | 英文 | 进阶 | 是 | 官方 RNA-seq 全流程,含参数说明、输出说明与示例结果页 |
| nf-core/rnaseq 仓库 | https://github.com/nf-core/rnaseq | 流程·代码 | 英文 | 进阶 | 是 | 基于 Nextflow,集成 FastQC/TrimGalore/STAR/Salmon/RSEM/StringTie,有 test profile 可直接跑 |
适合「先看结果长什么样」。缺点是要装 Nextflow + Docker,第一次会卡在环境上,建议第 5 周再碰。
4.2 拆开做:逐步工具链
| 名称 | 链接 | 类型 | 文档语言 | 难度 | 能跑通 | 一句话说明 |
|---|---|---|---|---|---|---|
| Griffith Lab RNA-seq 教程 | https://github.com/griffithlab/rnaseq_tutorial | 教程·代码 | 英文 | 进阶 | 是 | 从云环境、文件格式到差异表达、可变剪接的完整教学,配套 wiki 分模块(最新版迁到 https://rnabio.org/ ) |
| FastQC | https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ | 工具 | 英文 | 入门 | 是 | 读段质控第一站,出 HTML 报告,官网附好/坏数据对比示例 |
| fastp | https://github.com/OpenGene/fastp | 工具 | 英文 | 入门 | 是 | 一个命令搞定质控+去接头+过滤,出报告,比 FastQC+Trimmomatic 省事 |
| Trim Galore | https://github.com/FelixKrueger/TrimGalore | 工具 | 英文 | 入门 | 是 | 包了 Cutadapt+FastQC 的接头/质量修剪脚本,自动识别接头 |
| Trimmomatic | http://www.usadellab.org/cms/?page=trimmomatic | 工具 | 英文 | 入门 | 是 | 老牌 Illumina 修剪工具,官网直接给了 PE/SE 的完整示例命令 |
| MultiQC | https://github.com/MultiQC/MultiQC | 工具 | 英文 | 入门 | 是 | 把多个样本的质控日志汇总成一张报告,multiqc . 一个命令 |
| SortMeRNA | https://github.com/biocore/sortmerna | 工具 | 英文 | 进阶 | 是 | 从数据里滤掉 rRNA 读段,减少下游干扰(nf-core/rnaseq 里内置) |
| Salmon | https://github.com/COMBINE-lab/salmon | 工具 | 英文 | 进阶 | 是 | 转录本水平定量的主流伪比对工具,2.x 是 Rust 重写版,升级时注意索引格式变化需重建 |
| kallisto | https://github.com/pachterlab/kallisto | 工具 | 英文 | 进阶 | 是 | 伪比对定量的另一个经典,3000 万读段几分钟出结果,配套 sleuth 做下游 |
| RSEM | https://github.com/deweylab/RSEM | 工具 | 英文 | 进阶 | 是 | 基因/异构体水平定量的老牌工具,可结合 Bowtie2/STAR 用 |
| StringTie | https://ccb.jhu.edu/software/stringtie/ | 工具 | 英文 | 进阶 | 是 | 转录本组装与定量,输出可交给 Ballgown/DESeq2 做差异分析 |
| UMI-tools | https://github.com/CGATOxford/UMI-tools | 工具 | 英文 | 进阶 | 是 | 处理唯一分子标签(UMI),去 PCR 重复,单细胞建库常用 |
| tximport | https://github.com/thelovelab/tximport | R 包 | 英文 | 进阶 | 是 | 把 Salmon/kallisto 的转录本定量汇总成基因水平矩阵,交给 DESeq2/edgeR |
| DESeq2 | https://github.com/thelovelab/DESeq2 | R 包 | 英文 | 进阶 | 是 | 差异表达分析的行业标准,基于负二项模型,官方 vignette 就是一份完整教程 |
| edgeR | https://bioconductor.org/packages/release/bioc/html/edgeR.html | R 包 | 英文 | 进阶 | 是 | 另一个差异表达主力,拟似然(quasi-likelihood)与小样本表现好,同一套计数矩阵可用 |
4.3 功能富集与解释
| 名称 | 链接 | 类型 | 文档语言 | 难度 | 能跑通 | 一句话说明 |
|---|---|---|---|---|---|---|
| clusterProfiler | https://bioconductor.org/packages/release/bioc/html/clusterProfiler.html | R 包 | 英文 | 进阶 | 是 | GO/KEGG 过表征分析与 GSEA 的统一接口,支持数千物种,出图直接能发 |
| clusterProfiler 配套书 | https://yulab-smu.top/biomedical-knowledge-mining-book/ | 教程 | 英文 | 进阶 | 是 | 作者写的一整套 R 富集分析指南,从注释到可视化都有代码 |
| GSEA 软件 | https://www.gsea-msigdb.org/gsea/index.jsp | 工具·教程 | 英文 | 进阶 | 是 | 基因集富集分析的鼻祖软件(Java),有 GUI,官网文档齐全 |
| MSigDB | https://www.gsea-msigdb.org/gsea/msigdb/ | 数据库 | 英文 | 入门 | 否 | 几万个注释基因集(Hallmark、C2 通路、C5 GO 等),做 GSEA 的弹药库 |
| g:Profiler (g:GOSt) | https://biit.cs.ut.ee/gprofiler/gost | 在线工具 | 英文 | 入门 | 是 | 网页版富集分析,贴一列基因就能出 GO/KEGG/Reactome 结果,适合快速探索 |
师姐照着走的顺序:拿一套公开 RNA-seq 数据(GEO 里挑一个
GSE,用 GEO2R 先看看差异基因)→ 用 fastp + HISAT2 + featureCounts(或 Salmon)跑定量 → 用 DESeq2 出差异表 → 用 clusterProfiler 做 GO/KEGG → 用 ggplot2/EnhancedVolcano 出图。
5. 模块四:单细胞分析
| 名称 | 链接 | 类型 | 文档语言 | 难度 | 能跑通 | 一句话说明 |
|---|---|---|---|---|---|---|
| Seurat PBMC3k 教程 | https://satijalab.org/seurat/articles/pbmc3k_tutorial | 教程·代码 | 英文 | 进阶 | 是 | 单细胞入门第一课(R),2700 个 PBMC 从质控、聚类到 marker 全套代码,数据可下载 |
| Scanpy 教程集 | https://scanpy.readthedocs.io/en/stable/tutorials/index.html | 教程·代码 | 英文 | 进阶 | 是 | Python 单细胞主力,预处理/聚类/轨迹/绘图各有独立教程 |
| Single-cell best practices | https://www.sc-best-practices.org/ | 教程书 | 英文 | 进阶 | 是 | 单细胞分析「最佳实践」在线书,讲清每步该用哪个方法、为什么 |
| OSCA(Bioconductor) | https://bioconductor.org/books/release/OSCA/ | 教程书 | 英文 | 进阶 | 是 | 用 Bioconductor 做单细胞的完整书,50+ 章,从基础到多组学 |
| 10x Genomics Datasets | https://www.10xgenomics.com/datasets | 数据集 | 英文 | 入门 | 是 | 官方公开数据集下载,练手数据基本都从这里拿(含 Visium/Xenium) |
| Cell Ranger | https://www.10xgenomics.com/support/software/cell-ranger/downloads | 工具·文档 | 英文 | 进阶 | 是 | 10x 官方流程,FASTQ→计数矩阵,之后交给 Seurat/Scanpy |
单细胞的顺序:Cell Ranger(或直接下计数矩阵)→ Seurat/Scanpy 做 QC→归一化→高变基因→PCA→聚类→marker 注释。新手建议直接用现成的 10x 计数矩阵,跳过 Cell Ranger,省掉几十 GB 内存的坑。
6. 模块五:ChIP-seq / 表观遗传入门
| 名称 | 链接 | 类型 | 文档语言 | 难度 | 能跑通 | 一句话说明 |
|---|---|---|---|---|---|---|
| HBC ChIP-seq 教程 | https://hbctraining.github.io/Intro-to-ChIPseq/ | 教程·代码 | 英文 | 进阶 | 是 | 哈佛陈曾熙中心的 3 天工作坊材料,从 FASTQ 到 peak 到最近基因注释,可自学 |
| nf-core/chipseq | https://github.com/nf-core/chipseq | 流程·代码 | 英文 | 进阶 | 是 | ChIP-seq 整合流程(含 MACS2 找峰、注释、QC),有完整测试数据 |
| MACS3 | https://github.com/macs3-project/MACS | 工具 | 英文 | 进阶 | 是 | 找富集峰(peak calling)的事实标准,MACS3 是当前在维护的版本 |
| ChIPseeker | https://github.com/YuLab-SMU/ChIPseeker | R 包 | 英文 | 进阶 | 是 | peak 基因组注释与可视化(最近基因、TSS 附近分布、峰重叠) |
| deepTools | https://github.com/deeptools/deepTools | 工具 | 英文 | 进阶 | 是 | 把 BAM 转成标准化覆盖度轨迹并出图,做 ChIP-seq 可视化必备 |
| Signac | https://stuartlab.org/signac/ | R 包·教程 | 英文 | 进阶 | 是 | 单细胞染色质数据(scATAC-seq/CUT&Tag)分析包,与 Seurat 无缝衔接 |
| ENCODE | https://www.encodeproject.org/ | 数据库 | 英文 | 入门 | 否 | 官方功能基因组学数据门户,查 ChIP-seq 实验、下载处理后文件 |
入门路径:拿 ENCODE 上一套 TF 的 ChIP-seq(处理好的 BAM)→ MACS3 找峰 → ChIPseeker 注释 → deepTools 画图。不用从头做比对。
7. 模块六:变异检测(GATK 等)
| 名称 | 链接 | 类型 | 文档语言 | 难度 | 能跑通 | 一句话说明 |
|---|---|---|---|---|---|---|
| GATK 官网 | https://gatk.broadinstitute.org/hc/en-us | 工具·文档 | 英文 | 进阶 | 是 | 胚系/体细胞变异检测的行业标准,含 Best Practices 与 Tool Index |
| nf-core/sarek | https://github.com/nf-core/sarek | 流程·代码 | 英文 | 进阶 | 是 | WGS/WES 变异检测整合流程(预处理+call+注释),支持肿瘤/正常配对 |
| SnpEff | https://pcingola.github.io/SnpEff/ | 工具 | 英文 | 进阶 | 是 | 变异功能注释与效应预测,可直接读 GATK 输出 |
| Ensembl VEP | https://www.ensembl.org/info/docs/tools/vep/index.html | 工具 | 英文 | 进阶 | 是 | 变异效应预测器,给 HGVS、gnomAD 频率、CADD/SIFT 等注释,有网页版命令行版 |
变异这条线对绝大多数医学课题都偏重,建议只做到「能读 VCF、懂 GATK 大流程」即可,除非课题真涉及阳性突变。
8. 模块七:统计与绘图
| 名称 | 链接 | 类型 | 文档语言 | 难度 | 能跑通 | 一句话说明 |
|---|---|---|---|---|---|---|
| R for Data Science (2e) | https://r4ds.hadley.nz/ | 教程书 | 英文 | 入门 | 是 | R 数据分析最佳入门,前几章就够生信用(导入、变换、绘图) |
| ggplot2 官网 | https://ggplot2.tidyverse.org/ | 文档·代码 | 英文 | 入门 | 是 | 绘图系统主页,含 cheatsheet 与入门示例,生信出图的主力 |
| ggplot2 书(3e) | https://ggplot2-book.org/ | 教程书 | 英文 | 进阶 | 是 | 讲清「图形语法」原理,想画出能发文章的图看它 |
| R Graphics Cookbook | https://r-graphics.org/ | 教程书 | 英文 | 入门 | 是 | 按「问题-解法」组织的食谱式书,要什么图查什么,不用通读 |
| EnhancedVolcano | https://github.com/kevinblighe/EnhancedVolcano | R 包 | 英文 | 入门 | 是 | 差异表达结果的火山图专用包,配色与标签自动优化,示例直接用 airway 数据 |
| ComplexHeatmap | https://github.com/jokergoo/ComplexHeatmap | R 包 | 英文 | 进阶 | 是 | 画复杂热图(多注释、多分组)的首选,配套在线书有完整参考 |
| CRAN | https://cran.r-project.org/ | 软件源 | 英文 | 入门 | 是 | R 本体与通用包下载源 |
生信中 90% 的图:火山图(EnhancedVolcano)、热图(ComplexHeatmap/pheatmap)、PCA 图(ggplot2)、富集气泡图(clusterProfiler)就够了。
9. 零基础上手路径(按周推进)
假设每周能投入 6–8 小时。核心目标:8 周后能独立跑通「一套公开 RNA-seq 数据 → 差异基因 → 富集 → 出图」。
第 0 周:把环境搭起来(别跳过这步)
- 装 Miniconda / mamba,理解
conda create与conda activate。 - 跑通 FastQC + MultiQC 两项,成功对任意一个
.fastq出了报告。参考:Bioconda 用法(https://bioconda.github.io/)。 - 判断标准:能看到 MultiQC 的 HTML 报告。
- 可跳过:Docker 暂时不学,第 5 周再用。
第 1 周:格式 + 数据库 + Python 小工具
- 读 hts-specs 里 SAM/BAM、VCF 两个格式的说明(只读概念,不背字段)。
- 用 SeqKit 对一条 FASTA 做
head、stats、grep。 - 用 Biopython Tutorial 前几章,练 SeqIO 读写 FASTA、算 GC 含量。
- 逛一圈 GEO、UniProt、PDB、ChEMBL,各下一个文件下来。
- 判断标准:能说清 FASTQ/BAM/VCF 各存什么;能跑一个 Biopython 脚本。
第 2 周:R 与绘图
- R4DS 第 1–5 章(可视化、变换、整理),跟着敲代码。
- ggplot2 画散点、柱状、箱线、分面。
- 用 R Graphics Cookbook 查一次自己想要的图怎么画。
- 判断标准:能对一个 CSV 出一张带分组配色的图。
- 可跳过:R4DS 的函数式编程、RMarkdown 进阶章节。
第 3 周:序列分析
- MAFFT 比对几条序列 → 用 Jalview 可视化(可选)。
- BLAST 网页版查一条序列的同源性。
- BWA/HISAT2 的 README 各读一遍,理解
index→align两步。 - 判断标准:能解释「比对到参考基因组」到底在做什么。
第 4–5 周:RNA-seq 全链(本模块核心,值得花两周)
- 第 4 周:从 GEO 挑一套 RNA-seq(有
SRA/FASTQ可下载),走 fastp → HISAT2 → samtools sort → featureCounts,得到计数矩阵。 - 第 5 周:装 Docker,用
nf-core/rnaseq -profile test跑一遍官方测试(感受工业级流程);再回到自己的数据,用 DESeq2 跑差异表达。 - 对照读 Griffith Lab 教程,卡哪一步查哪一步。
- 判断标准:产出一张差异基因表(含 log2FC、padj),画出火山图。
第 6 周:单细胞
- 跑通 Seurat PBMC3k 教程(下载 10x 计数矩阵,从头到尾)。
- 如果习惯 Python,改跑 Scanpy 的 PBMC3k 教程(scanpy-tutorials)。
- 判断标准:出一张 UMAP + marker 热图,能说出各 cluster 大概是什么细胞。
第 7 周:富集 + 选学一个分支
- clusterProfiler:GO、KEGG 富集,气泡图/条形图。
- 若课题是表观相关,加做 MACS3 → ChIPseeker(用 ENCODE 数据);若涉及突变,读 GATK Best Practices 概念。
- 判断标准:出一张富集气泡图,能解读通路含义。
第 8 周:复盘 + 小项目
- 把 4–7 周的命令整理成一个脚本(本目录
scripts/里有模板)。 - 用自己的或师姐课题相关的一套数据独立跑一遍。
- 判断标准:从原始 FASTQ 到最终图,不看教程独立完成。
各模块「可跳过」清单(省时间用)
- 建树、组装、长读长、宏基因组、蛋白质结构预测:全跳过。
- AWS/GCP 云平台、Galaxy 全流程:跳过,本地 conda 足够。
- WGCNA 共表达网络:用到再学,不是必学。
- 变异检测 GATK 全流程实操:了解即可,除非课题需要。
10. 环境安装速查 & 避坑
安装骨架(一次配好)
# 1) 装 Miniconda(或 mamba,速度更快)
# 2) 配置 bioconda 渠道(顺序很重要)
conda config --add channels bioconda
conda config --add channels conda-forge
conda config --set channel_priority strict
# 3) 建一个生信环境
conda create -n bioinfo -c conda-forge -c bioconda \
fastqc fastp multiqc seqkit samtools bwa hisat2 star \
subread salmon kallisto macs3 bedtools r-base r-essentials
conda activate bioinfoR 侧(差异表达与富集)
if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")
BiocManager::install(c("DESeq2","edgeR","tximport","clusterProfiler",
"EnhancedVolcano","ComplexHeatmap","ChIPseeker"))常见坑
1. 渠道优先级报错:一定先 bioconda 再 conda-forge,并设 strict。
2. 内存:STAR 建人类索引要 ≥16GB 内存;单细胞数据动辄几十 GB,先看机器配置。
3. 版本不一致:写论文前把 conda list 或 sessionInfo() 存下来,能复现。
4. 伪比对 vs 比对:只想拿表达量,Salmon/kallisto 又快又省;要看剪接/变异,才用 STAR/HISAT2。
5. 别在 Windows 原生环境硬装:用 WSL2。
11. 术语速查表
| 术语 | 一句话解释 |
|---|---|
| FASTQ | 存读段序列 + 每个碱基质量值的文件 |
| BAM/SAM | 存读段比对到基因组结果的格式,BAM 是二进制 |
| VCF | 存变异位点及其基因型、质量的文件 |
| GTF/GFF | 存基因/转录本坐标注释的文件 |
| 比对 / Alignment | 把读段定位到参考基因组的具体位置 |
| 伪比对 / Pseudoalignment | 不定位坐标,只判断读段来自哪些转录本,速度极快 |
| 定量 / Quantification | 估计每个基因/转录本的表达量(counts、TPM、FPKM) |
| 差异表达 / DE | 比较两组样本,找出表达显著不同的基因 |
| padj / FDR | 多重检验校正后的显著性,看这个而不是原始 p 值 |
| 过表征分析 / ORA | 把差异基因丢进通路库看哪个通路富集 |
| GSEA | 不设阈值,用整体排序做基因集富集 |
| Peak calling | 在 ChIP-seq 里找蛋白质结合或组蛋白修饰的富集区域 |
| Marker gene | 某种细胞类型特征性高表达的基因,用于单细胞注释 |
| Workflow / Pipeline | 把多步工具串起来的自动化流程(Nextflow、Snakemake) |
12. 参考文献与验证说明
本模块资源条目数:74 条(表格数据行,同一域名下的不同功能页面按独立条目拆分计数),共涉及 76 个链接。 逐条打开验证通过:76 个链接全部通过。 未通过验证、已舍弃:14 条(未写入正文)。 验证方法:对每个链接用 web_fetch 实际请求页面,确认返回真实内容(标题、正文或 README);GitHub 仓库页因站点 robots 策略不允许抓取,改抓其官方 raw README 文件完成验证,README 内容与仓库主体一致。
被舍弃的条目及原因: 1. UCSC Genome Browser(genome.ucsc.edu / genome-euro.ucsc.edu)—— 站点 robots 拒绝抓取。 2. Reactome(reactome.org)—— 同上。 3. Biostars(biostars.org)—— 同上。 4. E-utilities 直连接口页(eutils.ncbi.nlm.nih.gov)—— 同上(已改用其官方手册页收录)。 5. NCBI GEO 首页 —— 返回人机验证页(已改用 GEO 概览页与 GEO2R)。 6. Biopython 官方 Tutorial 直链(biopython.org/docs/tutorial/Tutorial.html)—— 链接失效(已改用其文档索引页)。 7. Bioconductor 各包的 vignette 页与包详情页(DESeq2、tximport、airway、ChIPseeker、EnhancedVolcano 等)—— 站点 robots 拒绝抓取(已改用各包 GitHub 仓库验证)。 8. airway 数据集仓库描述文件 —— 文件不存在。 9. UMI-tools 的 README.md —— 不存在(该仓库用 README.rst,已收录)。 10. MACS 旧仓库 taoliu/MACS —— 已并入 macs3-project(已收录新仓库)。 11. 若干中文社区教程仓库 —— 官方仓库页无法打开,未收录。 12. sandbox.bio 交互式命令行练习站 —— robots 拒绝抓取。 13. HBC「Intro-to-R-flipped」仓库 README —— 文件不存在。 14. 搜索摘要里出现的镜像域名(如 git-hub.com、faraproject.com 等被改写的地址)—— 非官方原始地址,全部不予采信。
说明:本笔记不含任何未经打开的链接,也不含 star 数等无法核实的统计数字。文中少量版本信息(如 Bioconductor 当前为 3.23 系列)来自本次实际抓取到的页面内容,软件版本会随时间变化,正式引用前请复查官方页面。
配套脚本:见同目录 scripts/,包含 RNA-seq 标准流程脚本模板、DESeq2 差异分析 R 脚本、富集与绘图 R 脚本、依赖清单(environment.yaml)与运行说明。