4. 实验结果的数据清洗与预处理工程
药物研发实验数据往往来自多台仪器、多个实验批次和不同记录人,原始数据在进入统计分析或建模之前,通常同时存在缺失值、异常值、单位不一致、重复记录、格式混乱等问题。数据清洗与预处理工程的目标,不是简单“把脏数据删掉”,而是建立一套可追溯、可复现、可审计的规则体系,使每一处修改都有依据、有记录、有回退路径。本节围绕药物研发数据的典型质量问题,讲解如何识别、设计清洗规则,并构建自动化预处理流水线。
一、药物研发数据的四类典型质量问题
在药物研发场景中,数据质量问题具有明显的领域特征。第一类是缺失值,例如某批次细胞活性实验因污染导致复孔数据缺失,或药代动力学采样时间点因动物状态异常未采集。第二类是异常值,例如酶标仪读板时孔边缘效应造成吸光度偏高,或某只小鼠体重因记录错误出现数量级偏差。第三类是单位不一致,同一指标可能以 mg/mL、μg/mL、ng/mL 混用,浓度单位与剂量单位混淆,时间单位在 h、min、s 之间不统一。第四类是重复记录,包括同一实验因多次导出产生的完全重复行,以及同一化合物因命名规则不同(如游离碱与盐形式)产生的语义重复。
识别这些问题时,不能只看数据表面。缺失值需要区分“真缺失”与“不适用”,例如某指标未检测与检测结果为“低于定量下限”在统计处理上完全不同。异常值需要结合实验背景判断,是仪器漂移、操作失误,还是真实的生物学极端响应。单位不一致需要建立指标—单位映射表,而不是依赖人工逐列检查。重复记录需要定义业务主键,例如“化合物编号 + 实验类型 + 批次号 + 时间点”组合是否唯一。
二、清洗规则的设计原则
清洗规则应遵循四条原则:可解释、可追溯、可复现、可回退。可解释指每条规则都要说明触发条件和处理动作;可追溯指原始值、清洗后值、规则编号、执行时间、执行人(或程序版本)都要记录;可复现指相同输入在相同规则版本下必须得到相同输出;可回退指清洗过程不能覆盖原始数据,应保留原始层与清洗层两套数据。
以缺失值处理为例,规则可以设计为:若某指标缺失比例低于 5%,且缺失机制为随机缺失,则采用同批次同组中位数填充;若缺失比例高于 20%,则标记该批次为“数据不足”,不进入主分析,仅作探索性展示。异常值处理可采用“统计阈值 + 业务阈值”双条件,例如某酶活性值同时满足“超出均值 ±3 倍标准差”和“超出历史同条件范围”,才判定为异常并置为缺失,而不是直接删除整条记录。单位不一致则通过单位换算表统一到基准单位,例如浓度统一为 μmol/L,质量统一为 mg,时间统一为 h。
示例:某激酶抑制实验数据清洗规则片段
规则 R-001:去除完全重复行
条件:所有字段完全一致
动作:保留首次出现记录,其余标记 duplicate_drop
规则 R-002:浓度单位统一
条件:unit in [mg/mL, μg/mL, ng/mL]
动作:换算为 μmol/L,记录原始值与换算系数
规则 R-003:抑制率异常值处理
条件:|抑制率 - 批次中位数| > 3×MAD 且 抑制率 < -10% 或 > 110%
动作:置为缺失,标记 outlier_flag,不删除整行
规则 R-004:关键字段缺失拦截
条件:compound_id、batch_id、time_point 任一为空
动作:整行进入 quarantine 隔离表,不进入下游分析
三、自动化预处理流水线的结构
自动化流水线通常分为五层:接入层、校验层、清洗层、隔离层、输出层。接入层负责读取原始文件并保留原始快照;校验层执行字段完整性、类型、范围、单位映射检查;清洗层按规则顺序执行去重、单位换算、缺失填充、异常标记;隔离层存放无法自动处理或触发拦截规则的数据,供人工复核;输出层生成清洗后数据集、清洗日志和质量报告。
流水线设计的关键是规则顺序。一般应先做结构类清洗(去重、字段标准化),再做语义类清洗(单位换算、缺失填充),最后做统计类清洗(异常值标记)。如果顺序颠倒,例如先填充缺失再统一单位,会导致填充值基于错误单位计算,产生系统性偏差。另一个关键是幂等性:同一批数据重复执行流水线,结果应保持一致,不能因为重复执行而反复填充或反复标记。
四、从规则到流水线的实现要点
实现自动化流水线时,建议采用“配置驱动”而非“硬编码”。将清洗规则写成结构化配置,例如 YAML 或 JSON,每条规则包含规则编号、适用字段、条件表达式、处理动作、优先级。这样当实验方案变更时,只需修改配置,不必改动程序主体。同时,每次执行流水线应生成清洗日志,记录每行数据被哪条规则修改、修改前后的值、执行时间戳和规则版本号。
对于药物研发数据,还需要特别注意审计追踪。监管环境要求数据修改可追溯,因此清洗层不能直接覆盖原始数据,而应保留原始层、清洗层和隔离层三套数据。清洗层中的每个修改字段应附带来源标记,例如 value_cleaned、rule_id、original_value。当后续分析发现异常时,可以快速定位是原始数据问题还是清洗规则误判。
实践建议:在流水线正式上线前,先用一批已知质量问题的历史数据做回归测试,检查规则是否误杀正常值、是否漏掉已知异常、隔离比例是否合理。建议将清洗前后的数据分布做对比图,观察均值、标准差、缺失率的变化是否在预期范围内。
五、结果判断与持续改进
清洗完成后,需要从三个层面判断是否达到目标。第一,数据层面:关键字段缺失率是否低于阈值,单位是否全部统一,重复记录是否清除,异常值标记比例是否在合理区间。第二,分析层面:用清洗后数据跑一遍核心分析流程,观察结果是否稳定、是否符合生物学预期,与清洗前结果差异是否可解释。第三,工程层面:流水线是否可重复执行,日志是否完整,隔离数据是否有人工复核闭环。
数据清洗不是一次性任务,而是持续迭代的过程。随着实验规模扩大、仪器更新、记录规范变化,新的质量问题会不断出现。建议每季度回顾一次清洗日志和隔离记录,统计高频触发的规则和常见问题类型,据此优化规则阈值或补充新的校验项。只有把清洗规则当作实验数据管理的一部分持续维护,才能真正保证后续统计分析和建模的可靠性。