DAY 1 · S4 · 下午 60 分钟

动手:把今天学的跑一遍

所有实验都在真实数据上跑,不是玩具样例。

今天学的三节全是概念。这一节把它们落到真实数据上—— 如果你能在一条真实记录里逐个指出 S1–S3 的每个概念,Day 1 就算过了。

LAB 1 · 打开一条真实记录

$ python labs/lab1_read_one_record.py

脚本会打印一条抗体记录的所有字段:VH/VL 序列、三套编号下的 CDR、 PDB 号与链标识、表位残基、溯源链接。

你要做的事:对照 S1–S3 的每个概念,逐个在输出里找到它。 找不到的概念就回去重看那一段。

重点看这三处:
IMGT / Kabat / Chothia 三行 —— 同一条序列,三套编号切出的 CDR 完全不同(S3.2
VH_sequence vs VH_full_chain —— 切掉恒定区前后的差别(S1.3
Epitope 那一列 —— 一串残基编号,Day 2 你会亲手把它算出来

LAB 2 · 给数据做体检

$ python labs/lab2_data_checkup.py

这就是 SELECT COUNT(*) ... GROUP BY,只不过字段名是生物术语。 它回答四个问题,每个都对应你已经会问的一个数据库问题:

体检项你熟悉的版本为什么要看
总行数 / 独立靶点数COUNT(*) / COUNT(DISTINCT fk) 外键基数太低 = 数据集中在少数几个靶点上,泛化会很差
按证据等级分层GROUP BY confidence_tier 最重要的一项。总数好看但全堆在最低等级,等于没有
各字段填充率COUNT(col) / COUNT(*) 关键列(如表位)填充率通常远低于你的预期,先知道再规划
QC 标记分布GROUP BY qc_flag 真实数据一定有瑕疵。全是 OK 反而说明质检没做到位
这一步要养成的习惯

拿到任何一份陌生数据, 先做这四项再看内容。它们花不了五分钟, 但能立刻告诉你这份数据是「有 3 万行」还是「有 3 万行其中 2.4 万行没有可用标签」。

Day 1 收尾:花 2 分钟做这件事

打开 rcsb.org/3d-view/5B8C (人 PD-1 与一个抗体的真实复合物),用鼠标转一转, 找到抗体尖端贴在 PD-1 上的那个地方。
那里就是表位和互补位。这 2 分钟比读十页文字管用—— 概念从此就有了实物对应。

Day 1 检验

15 题,覆盖 S1–S3。12 题以上可以进 Day 2;不到 10 题建议回头重看。

DAY 1 · 共 15 题