第一阶段:生物学基础(不可跳过)
对应大纲第一阶段 目标:建立最小化的分子生物学认知框架,能读懂领域文献的背景介绍 预计完成时间:2-3 周(每天 1-2 小时)
为什么"不可跳过"?
很多程序员的第一反应是:我只要会处理文件格式、跑工具就行了,生物学背景可以边做边补。
这个想法在前 3 个月会让你陷入一个困境:你能跑通流程,但看不懂结果。
举个具体的例子:GATK 输出的 VCF 文件里有一列叫 GT,值是 0/1 或 1/1。工具文档告诉你这叫"基因型"。但如果你不知道人类基因组是二倍体(每个位置有两个拷贝),你就不会理解为什么 0/1 叫杂合子、1/1 叫纯合突变,也不会理解为什么某些遗传病需要 1/1 才发病(隐性遗传),而某些只需要 0/1 就够了(显性遗传)。
本阶段的目标不是让你变成生物学家,而是建立足够的直觉,让你能:
- 看懂论文方法部分的背景描述
- 理解工具参数设计背后的逻辑
- 和生物学家/临床医生沟通时不一脸懵
1.1 中心法则(Central Dogma)
先给你一个直觉
细胞是一台运行生命程序的计算机。它的存储介质是 DNA,运行时系统是 RNA,最终产物是 蛋白质。
DNA ──转录──▶ RNA ──翻译──▶ 蛋白质
(硬盘) (内存) (程序运行的结果)
这就是 1958 年 Francis Crick 提出的"中心法则":遗传信息的流向是单向的,从 DNA 到 RNA 到蛋白质。
DNA:硬盘,存储原始信息
DNA(脱氧核糖核酸)是一种双链螺旋分子,由四种碱基组成:
| 碱基 | 缩写 | 配对关系 |
|---|---|---|
| 腺嘌呤 | A | 与 T 配对 |
| 胸腺嘧啶 | T | 与 A 配对 |
| 鸟嘌呤 | G | 与 C 配对 |
| 胞嘧啶 | C | 与 G 配对 |
双链的意思是:一条链是 ATCGGTA...,另一条链就一定是它的互补链 TAGCCAT...。这个配对规则(A-T、G-C)是生物信息学里出现频率最高的概念之一——序列比对、引物设计、PCR,全都建立在这个规则上。
# 计算 DNA 互补链(这在生物信息分析中很常用)
def reverse_complement(seq):
complement = {'A': 'T', 'T': 'A', 'G': 'C', 'C': 'G', 'N': 'N'}
return ''.join(complement[b] for b in reversed(seq))
print(reverse_complement("ATCGGTA")) # TACCGAT
人类 DNA 有多长?
人类基因组约有 30 亿个碱基对(3 × 10⁹ bp)。如果把 DNA 拉直,每个细胞里的 DNA 加在一起约有 2 米长。一个普通文本文件里,30 亿个字符大约是 3GB——这就是为什么基因组数据管理本身就是一个工程问题。
染色体:DNA 的打包方式
人类有 46 条染色体(23 对),每条染色体就是一段被蛋白质(组蛋白)缠绕压缩的 DNA。你可以理解为:如果基因组是一个 3GB 的项目代码库,染色体就是 23 个模块目录(因为是两套,所以共 46 个)。
RNA:内存,临时执行用的中间体
RNA(核糖核酸)和 DNA 很像,主要区别:
- 单链而非双链
- 用 U(尿嘧啶) 代替 T(胸腺嘧啶)
- 不稳定,用完即降解(这正是它作为"内存"的特性)
当细胞需要某个蛋白质时,不会直接读取 DNA——DNA 太珍贵,不能随便访问。它会先把对应基因的 DNA 序列转录成 RNA,再用 RNA 来指导蛋白质合成。
RNA 有多种类型:
| 类型 | 全称 | 功能 |
|---|---|---|
| mRNA | 信使 RNA | 携带蛋白质的编码信息(你在 RNA-seq 里测的主要是它) |
| rRNA | 核糖体 RNA | 核糖体的组成部分,参与翻译 |
| tRNA | 转运 RNA | 把氨基酸送到核糖体,对应密码子 |
| miRNA | 微小 RNA | 调控基因表达(约 22 个碱基长) |
| lncRNA | 长非编码 RNA | 调控功能,研究热点之一 |
为什么 RNA 对生物信息学重要?
RNA-seq 测序测的就是细胞里的 mRNA 含量。mRNA 越多,说明这个基因的表达量越高,对应蛋白质的产量也越多。这是研究基因功能、疾病机制的核心方法之一。
蛋白质:程序运行的产物
蛋白质是由氨基酸按特定顺序连接成的链(多肽链),折叠后形成三维结构,执行各种功能:
- 酶(加速化学反应)
- 受体(接收信号)
- 结构蛋白(提供支撑)
- 转录因子(调控其他基因的开关)
密码子:三个碱基编码一个氨基酸
RNA 序列每 3 个碱基为一组,称为一个密码子(codon),对应一种氨基酸(共 20 种)。4³ = 64 种密码子编码 20 种氨基酸,因此存在冗余(多个密码子对应同一氨基酸)。
mRNA: AUG GCA AAU UGA
氨基酸: Met Ala Asn Stop
AUG 是起始密码子(相当于 main() 函数入口),UAA/UAG/UGA 是终止密码子(相当于 return)。
# 标准密码子表(部分)
codon_table = {
'AUG': 'Met', # 起始密码子
'GCA': 'Ala', 'GCC': 'Ala', 'GCG': 'Ala', 'GCU': 'Ala', # 冗余
'UAA': '*', 'UAG': '*', 'UGA': '*', # 终止密码子
# ...共 64 个
}
转录过程(DNA → RNA)
转录发生在细胞核里,由 RNA 聚合酶(RNA Polymerase)驱动:
- RNA 聚合酶识别基因的启动子(Promoter)区域,结合 DNA
- 沿 DNA 模板链移动,按碱基互补原则合成 RNA 链(A→U,T→A,G→C,C→G)
- 遇到终止子(Terminator)序列后停止
- 产生的原始 RNA(pre-mRNA)还需要加工:
- 加 5' 帽子(保护 mRNA 不被降解)
- 加 poly-A 尾(同上)
- 剪接(Splicing):去除内含子,拼接外显子
剪接(Splicing)是一个关键概念:
人类基因平均有 8-10 个外显子,被内含子隔开。成熟 mRNA 只包含外显子序列。同一个基因可以通过不同的剪接方式(可变剪接,Alternative Splicing)产生多种 mRNA,进而产生功能不同的蛋白质。这就是为什么人类只有约 2 万个基因,却能产生超过 10 万种蛋白质。
pre-mRNA: [外显子1] [内含子1] [外显子2] [内含子2] [外显子3]
剪接 ↓
成熟mRNA: [外显子1] ──────── [外显子2] ──────── [外显子3]
翻译过程(RNA → 蛋白质)
翻译发生在细胞质里,由核糖体(Ribosome)执行:
- 核糖体结合到 mRNA 上,从起始密码子(AUG)开始
- tRNA 携带对应氨基酸,按密码子顺序一个个对接
- 氨基酸之间形成肽键,链条延伸
- 遇到终止密码子,多肽链释放,折叠成功能性蛋白质
为什么这和"数据 pipeline"是同一类问题?
中心法则描述的是一套单向信息流处理系统:
DNA → RNA → 蛋白质
原始数据 中间表示 最终产出
(Git 仓库) (编译产物) (运行中的程序)
类比关系:
- 启动子 ≈ 触发 pipeline 的事件(如 cron 触发、API 请求)
- 转录因子 ≈ 开关某个 pipeline 的配置项(feature flag)
- 可变剪接 ≈ 同一套代码在不同参数下产生不同版本
- 蛋白质降解 ≈ 容器生命周期管理(用完销毁)
- 表观遗传修饰 ≈ 环境变量(不改代码,但影响运行行为)
这个类比不是玩文字游戏——生物学本质上是一套信息处理系统,只是底层用化学实现的。理解这一点,会让你在面对陌生的生物学概念时,能快速找到对应的计算机科学直觉。
1.2 基因组基础概念
概念全景
| 概念 | 类比 | 实际含义 |
|---|---|---|
| 基因组(Genome) | 整个代码仓库 | 人类约 30 亿碱基对,包括编码区和非编码区 |
| 染色体(Chromosome) | 代码库的模块目录 | 人类 23 对,共 46 条 |
| 基因(Gene) | 一个函数 | 编码特定蛋白的 DNA 片段,约 2 万个 |
| 外显子(Exon) | 函数体的有效代码 | 被翻译成蛋白质的部分,约占基因组 1.5% |
| 内含子(Intron) | 函数体内的注释 | 转录后被剪切掉,不编码蛋白质 |
| 启动子(Promoter) | 函数声明前的装饰器 | 控制基因何时、在哪里表达 |
| SNP | 代码里的一个字符差异 | 个体遗传差异的基础,约 500 万个 |
| Indel | 代码里插入/删除一段 | 插入或缺失几个碱基 |
| 突变(Mutation) | Bug | 可能致病,也可能无影响 |
| 等位基因(Allele) | 同一函数的不同版本 | 二倍体生物每个位置有两个等位基因 |
人类基因组的数字
了解这些量级,才能对数据处理有直觉:
总碱基对数: ~3,200,000,000 bp (3.2 Gbp)
基因数量: ~20,000 个(蛋白质编码基因)
外显子总长: ~35,000,000 bp(约占 1.5%)
常见 SNP 数: ~10,000,000 个
一个人的文件大小(FASTQ, 30× WGS):~100 GB
压缩后(BAM):~30-40 GB
只有约 1.5% 的基因组编码蛋白质——其余 98.5% 曾被称为"垃圾 DNA",但现在知道其中包含大量调控元件、结构 RNA 等功能性序列。WGS 测全部,WES 只测那 1.5%,Panel 测更少。
二倍体与基因型
人类是二倍体生物:每条染色体有两个拷贝(一个来自父亲,一个来自母亲)。因此每个基因组位置有两个等位基因。
位置 chr1:925952:
父源染色体:G(参考等位基因)
母源染色体:A(变异等位基因)
基因型表示:0/1(杂合子,heterozygous)
如果两条都是 A:1/1(纯合突变,homozygous alternate)
如果两条都是 G:0/0(纯合参考,homozygous reference)
这就是 VCF 文件里 GT 字段的含义。
临床意义:
- 显性遗传病(如亨廷顿病):一个拷贝突变(
0/1)就会发病 - 隐性遗传病(如囊性纤维化):需要两个拷贝都突变(
1/1)才发病 - 这就是为什么携带者(
0/1)不发病,但子女有 25% 概率得病
SNP:个体差异的基础
SNP(Single Nucleotide Polymorphism,单核苷酸多态性)是基因组中特定位置上个体之间的碱基差异。
人群参考序列:...ATCG[G]TACG...
个体 A: ...ATCG[G]TACG...(和参考一致)
个体 B: ...ATCG[A]TACG...(有 SNP,G→A)
SNP 的三种重要类型:
同义 SNP(synonymous):改变 DNA 但不改变氨基酸(密码子冗余导致)
GCA → GCG 两者都编码 Ala,蛋白质功能不变错义 SNP(missense):改变氨基酸,可能影响蛋白质功能
GAG → GTG Glu → Val,这就是镰刀型细胞贫血症的突变无义 SNP(nonsense):产生提前终止密码子,蛋白质被截断
CAG → TAG Gln → Stop,蛋白质提前终止
如何理解 SNP 频率:
- 常见 SNP(人群频率 > 1%):通常是中性的,是进化过程中保留的多样性
- 罕见变异(频率 < 0.1%):更可能对蛋白质功能有影响,是遗传病研究的重点
- de novo 突变:在父母中没有,在孩子中首次出现的突变,常见于重症遗传病
Indel:插入和缺失
Indel 是 Insertion(插入)和 Deletion(缺失)的合称。
参考序列:ATCG--TACG
有插入的:ATCGAATACG(插入了 AA)
有缺失的:AT--GTACG(缺失了 CG)
为什么 Indel 比 SNP 更危险?
如果 Indel 的长度不是 3 的倍数,会导致移码突变(Frameshift Mutation)——密码子的阅读框完全错乱,后续所有氨基酸都变了,蛋白质通常失去功能。
# 移码突变示意
original = "ATG GCA AAU CGA UGA" # Met-Ala-Asn-Arg-Stop
# 插入一个 T 在第 4 位
frameshift = "ATG TGC AAA UCG AUG A..." # 完全不同的氨基酸序列
基因表达:同样的 DNA,不同的细胞
人体所有细胞(肝细胞、神经元、红细胞)都含有完全相同的基因组,但它们的形态和功能截然不同。原因是不同细胞会表达不同的基因子集。
控制基因表达的机制:
- 转录因子:结合到启动子/增强子上,激活或抑制转录
- 表观遗传修饰(Epigenetics):不改变 DNA 序列,但影响基因是否被读取
- DNA 甲基化(methylation):通常抑制基因表达
- 组蛋白修饰(histone modification):影响 DNA 的紧密程度
- 增强子(Enhancer):可以在距离基因很远的地方控制基因表达
同样的 DNA 代码,不同的运行时配置 → 不同的运行结果
↕ ↕
同样的基因组,不同的表观遗传状态 → 不同的细胞类型
参考基因组:你的"标准库"
生物信息分析里有一个叫参考基因组(Reference Genome)的概念,它是一个"标准人"的基因组序列,用于:
- 测序 reads 的比对(把短片段定位回基因组的位置)
- 变异检测的基准(和参考基因组不同的地方就是变异)
常用人类参考基因组版本:
| 版本 | 别名 | 说明 |
|---|---|---|
| GRCh37 | hg19 | 2009 年发布,很多老数据用这个 |
| GRCh38 | hg38 | 2013 年发布,目前主流,修正了很多错误 |
| T2T-CHM13 | hg002 | 2022 年的端粒到端粒完整版,未来趋势 |
注意:hg19 和 hg38 坐标不兼容! 同一个基因在两个版本里的染色体坐标可能完全不同。混用会导致严重错误。这就像 API 版本不兼容——一定要在分析开始前确定用哪个版本,全程保持一致。
# 下载 hg38 参考基因组
wget https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.fa.gz
# 构建 BWA 索引(比对前必须做)
bwa index hg38.fa
1.3 三个关键概念深入:变异、频率、功能影响
变异 vs 突变 vs 多态性
这三个词在不同语境下有微妙区别:
| 词 | 英文 | 含义 |
|---|---|---|
| 变异 | Variant | 中性词,和参考基因组不同的位置 |
| 突变 | Mutation | 通常指有功能影响或致病的变异 |
| 多态性 | Polymorphism | 在人群中频率 ≥ 1% 的常见变异 |
在代码里你会看到 VCF 文件(Variant Call Format),存储的是"变异",不预设功能影响。注释步骤(ANNOVAR/VEP)才会给每个变异打上"致病性"标签。
变异数据库:读懂注释结果的关键
| 数据库 | 内容 | 用途 |
|---|---|---|
| dbSNP | 已知 SNP 的 rs 编号 | rs1234 这类 ID 就来自这里 |
| gnomAD | 14 万人的变异频率 | 判断变异是否罕见 |
| ClinVar | 临床意义注释 | 致病性、良性、意义不明 |
| HGMD | 人类基因突变数据库 | 已知致病突变的收录 |
实际分析中的过滤逻辑:
候选变异 100,000 个
↓ gnomAD 频率 < 0.1%(过滤常见多态性)
剩余 ~5,000 个
↓ 仅保留编码区变异(错义、无义、移码)
剩余 ~500 个
↓ ClinVar 已知致病 + 预测工具(CADD score > 20)
剩余 ~20-50 个
↓ 与临床表型匹配的基因
最终候选:1-5 个
1.4 一个完整的例子:从 DNA 到遗传病
让我们用一个真实案例把所有概念串起来:镰刀型细胞贫血症(Sickle Cell Disease)
背景:
- 致病基因:HBB(β-血红蛋白)
- 变异:chr11:5,246,696,G → A(hg38 坐标)
- 密码子变化:GAG → GTG
- 氨基酸变化:Glu(谷氨酸)→ Val(缬氨酸),蛋白质第 6 位
- 遗传方式:常染色体隐性(需要
1/1才发病)
信息流:
DNA: ...CAC CTG ACT CCT GTG GAG AAG...(正常)
↓ 突变 G→A
...CAC CTG ACT CCT GTG GAG AAG...
↑
这个 G 变成了 A
mRNA: GAG → GTG
蛋白质: Glu → Val(HbS 蛋白的第 6 个氨基酸)
结果: HbS 蛋白在低氧环境下聚合,红细胞变成镰刀形,阻塞毛细血管
在 VCF 文件里,这条变异长这样:
chr11 5246696 rs334 T A . PASS AF=0.006;AC=12
(注意:VCF 里显示的是反义链,所以 REF 是 T 而不是 G)
注释后的信息(ANNOVAR 输出):
Gene: HBB
Effect: nonsynonymous SNV
AA Change: p.Glu7Val (注意:有的标注方式从第6位算,有的从第7位)
ClinVar: Pathogenic
gnomAD AF: 0.006 (非洲人群中更高)
CADD Score: 24.5 (> 20 认为有功能影响)
1.5 自测题
读完本节后,你应该能回答这些问题:
- 为什么可变剪接让 2 万个基因能产生超过 10 万种蛋白质?
- VCF 文件里的
GT: 0/1和GT: 1/1分别意味着什么? - 一个 Indel 如果长度是 6 bp,会导致移码突变吗?
- 为什么 hg19 和 hg38 坐标不能混用?
- 一个变异在 gnomAD 里频率是 30%,它更可能是致病突变还是正常多态性?
1.6 推荐资源(带使用建议)
入门视频
MIT OpenCourseWare: 7.016 Introductory Biology
- 地址:B 站搜索"MIT 7.016"有中文字幕搬运版
- 建议:先看第 1-6 讲(约 9 小时),覆盖中心法则和基因表达
- 跳过:遗传学实验操作部分(对生物信息方向意义不大)
Khan Academy 生物学系列
- 中心法则部分:约 2 小时,讲解清晰,有动画
- 适合用来补充不理解的具体概念
教材
《生物信息学》(陈铭 主编,清华大学出版社)
- 国内大学课程用书,数学和编程背景的人会觉得比较亲切
- 重点读:第 1-3 章(序列数据库、序列比对基础)
《Bioinformatics Data Skills》(Vince Buffalo)
- 英文,面向有编程基础的读者
- 第 1-3 章是很好的生物学背景介绍
在线资源
NCBI Insights 博客 (ncbi.nlm.nih.gov/insights)
- 了解数据库更新和背后的设计逻辑
- 特别推荐:关于 RefSeq 和 GenBank 区别的文章
Ensembl 基因浏览器(ensembl.org)
- 直接在浏览器里看一个基因的结构:外显子、内含子、已知变异
- 推荐练习:搜索 BRCA1,看它有多少个外显子,有哪些已知致病变异
动手练习建议
第一周:
# 在 UCSC Genome Browser 里看 HBB 基因的结构
# 网址: genome.ucsc.edu → 搜索 HBB → 查看 Gene tracks
第二周:
# 用 Biopython 解析一个简单的基因序列
from Bio.Seq import Seq
dna = Seq("ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG")
mrna = dna.transcribe() # ATGGCCAUUGUAAUGGGCCGCUGAAAGGGUGCCCGAUAG
protein = dna.translate() # MAIVMGR*KGAR*
print(protein)
第三周:
- 在 ClinVar 里查找 BRCA1 的致病变异,理解注释信息的每个字段
- 在 gnomAD 里查找一个常见 SNP 和一个罕见变异,对比它们的人群频率
本阶段完成标志
当你能做到以下几点,说明第一阶段目标达成:
- 能向别人解释"为什么 RNA-seq 能测基因表达量"(不超过 3 句话)
- 看到 VCF 文件里的
GT:DP:GQ字段,知道每个字段大概是什么意思 - 能区分 WGS、WES、RNA-seq 分别在测什么、用在什么场景
- 知道 hg19 和 hg38 是什么,为什么不能混用
- 能用 Biopython 或纯 Python 处理简单的 DNA/蛋白质序列
完成后,进入 第二阶段:核心数据格式——真正开始动手跑测序数据分析。