LABS
6 个动手实验
每个实验都是一个可以直接跑的 Python 脚本,不是伪代码。四个离线可跑,两个需要联网(真的去请求 HGNC / UniProt)。
先跑起来
$ git clone https://github.com/Runix-lab/ai4s-for-programmers $ cd ai4s-for-programmers $ python3 -m venv .venv && source .venv/bin/activate $ pip install -r labs/requirements.txt $ python labs/lab1_read_one_record.py
需要 Python 3.10+。仓库里自带一份 29 条的小样本数据集,
全部由 RCSB PDB 的公开数据现场构建(构建脚本也在仓库里,
labs/data/build_sample.py,可复现)。
所以四个离线实验开箱即跑,不需要你先去下载几十 GB 的东西。
六个实验
按课程顺序排列。如果只跑一个,跑 Lab 4。
LAB 2 · 给数据做体检
$ python labs/lab2_data_checkup.py
SELECT COUNT(*) ... GROUP BY 的生物版:总量、外键基数、
证据等级分布、字段填充率、QC 标记分布。拿到任何陌生数据的第一件事。
离线可跑 · 约 1 分钟 · 配套 S4
LAB 3 · 亲手复现子串匹配 bug
$ python labs/lab3_substring_bug.py
三类 bug 现场发生:词边界缺失导致的假阳性、 前缀关系导致的误判(加词边界也救不了)、以及正则根本解决不了的语义陷阱。
离线可跑 · 约 1 分钟 · 配套 S7
LAB 4 · 交叉源验证 ★ 最重要
$ python labs/lab4_cross_source.py
把同一个问题问三次(HGNC + 两种 UniProt 查法),把归一化冲突现场打出来。 你会看到两种都「合理」的查法各自以不同方式翻车—— 这比「有个 bug」重要得多。
输入 HGNC UniProt-A 朴素 UniProt-B 严谨 CCR4 CCR4 CCR4 P51679 [Homo sapiens] NOCT Q9UK39 ← 别名劫持 HER2 ERBB2 GTF1 P53260 [Saccharomyces] ERBB2 P04626 ← 跨物种泄漏 PD-1 PDCD1 PD-1 Q9UMF3 [Homo sapiens] (查不到) OX40 TNFRSF4 - O02764 [Oryctolagus] (查不到) ← 兔子同源
需要联网 · 约 1 分钟 · 配套 S7
LAB 5 · 从三维结构算出表位
$ python labs/lab5_compute_epitope.py
把两侧原子丢进 KD 树做空间近邻查询,算出表位和互补位残基。
输出里的 SEP/TPO 会顺带告诉你这个抗体识别的是磷酸化状态的目标。
离线可跑(结构文件已内置)· 约 1 分钟 · 配套 S7
LAB 6 · 断言式质检
$ python labs/lab6_assert_qc.py
把数据质量写成一组必须成立的断言。里面埋了一个陷阱—— 关于 HTTP 403 该不该判定为「链接坏了」。自己跑出来体会。
需要联网 · 约 2 分钟 · 配套 S7
关于这份样本数据
为了让实验开箱即跑,仓库里带了一份小样本数据集(labs/data/)。
关于它你需要知道三件事:
- 它只来自公开来源:RCSB PDB 的结构、序列与 UniProt 交叉引用,
CDR 用 ANARCI/abnumber 本地算,表位用 gemmi 现场算。
构建脚本
labs/data/build_sample.py就在仓库里,可以自己重跑一遍。 - 它是 29 条的小样本,不是完整数据集:够跑通全部实验、 够看清每一类问题,但不足以训练任何东西。
- 它包含真实的瑕疵:3 条单域抗体没有轻链、2 条缺 UniProt 交叉引用、 1 条含氨基酸模糊码——全部保留并在 QC_flags 里如实标记。 一份被洗得完美无瑕的教学数据,会让你学到一套在真实世界里不成立的直觉。
- 它自己就验证了课程里的两个论断:29/29 行的 Kabat 与 Chothia CDRH3 完全相同, 16/29 行的抗原链不是 A。不用信我,跑 Lab 2 自己数。