1. 临床研究数据清洗工程导论
临床研究的数据清洗,不是把表格里的空格删掉、把日期格式统一这么简单。它是一项贯穿数据接收、结构解析、质量核查、规则执行、版本留痕和可追溯交付的系统工程。理解这一点,是进入本课程后续所有工具与流程设计的前提。
1.1 临床数据从哪里来,长什么样
临床研究的数据来源通常分为四类。第一类是电子数据采集系统(EDC),例如临床试验中常用的 Rave、Medidata、太美等平台,它们以受控表单形式录入,字段结构相对规范,但不同中心、不同访视的填写习惯仍会造成缺失、逻辑冲突和单位混用。第二类是医院信息系统(HIS/LIS/PACS)导出的诊疗数据,包括检验、影像、医嘱、病程记录,这类数据字段多、编码体系复杂,常以 CSV、Excel 或数据库视图形式交付。第三类是实验室与设备原始数据,如生化分析仪、心电、影像组学输出,往往带有仪器时间戳、单位、参考区间和质控标记。第四类是外部数据与人工记录,包括患者日记卡、随访电话记录、纸质 CRF 转录、第三方数据交换文件等。
从数据类型看,临床数据可分为:结构化字段(如年龄、性别、血压值、实验室指标)、半结构化文本(如不良事件描述、合并用药名称)、时间序列(如生命体征多次测量、连续血糖监测)、编码型数据(如 MedDRA、WHO Drug、ICD-10、LOINC)以及自由文本(如研究者备注、影像报告)。不同来源和类型的数据,清洗策略完全不同:结构化字段适合规则校验和范围检查,文本字段需要术语映射与自然语言处理,时间序列则要处理访视窗、时间点偏移和重复测量。
1.2 清洗在临床研究中的定位
数据清洗位于数据管理与统计分析之间,是保证分析数据集(如 FAS、PPS、安全性集)可信的关键环节。它的上游是数据采集与传输,下游是统计编程、锁库和监管递交。清洗的目标不是“让数据好看”,而是让每一条进入分析的数据都满足完整性、一致性、准确性、及时性和可追溯性。
在监管语境下,清洗还必须满足 ALCOA+ 原则:可归属、可读、同步、原始、准确,以及完整、一致、持久、可用。这意味着每一次修改都要有原因、有操作者、有时间戳、有旧值和新值。清洗不是一次性动作,而是一个带版本控制的持续过程。
1.3 自动化清洗的价值与挑战
自动化清洗的核心价值在于:把重复的格式转换、缺失检查、逻辑校验、术语映射和异常检测交给程序执行,让人专注于规则设计、医学判断和异常裁决。以一项 300 例、5 个访视、约 1200 个字段的 II 期研究为例,人工逐字段核查可能需要数周,而基于规则引擎的自动化清洗可以在数小时内完成首轮扫描,并输出可复核的异常清单。
但自动化并非没有挑战。第一,规则来源多样:方案、CRF 填写指南、统计分析计划、CDISC 标准、实验室参考区间都可能产生校验规则,规则之间可能冲突。第二,数据异质性高:不同中心、不同设备、不同版本表单导致同一字段的取值空间不一致。第三,假阳性与假阴性并存:规则太严会淹没真实问题,规则太松会漏掉关键异常。第四,可追溯性要求高:自动化脚本本身也需要版本管理、测试用例和变更记录。第五,医学判断不可替代:例如“肌酐升高”是否属于不良事件,必须由医学人员结合病史判断,程序只能标记。
1.4 课程项目与工具链概览
本课程以一个贯穿始终的模拟项目为载体:某多中心 II 期研究,计划入组 300 例受试者,设置筛选期、基线、第 4 周、第 8 周、第 12 周共 5 个访视,数据来自 EDC 导出、中心实验室文件和部分纸质 CRF 转录。项目将覆盖从原始数据接收到分析数据集交付的完整清洗链路。
工具链方面,课程以 Python 为主要实现语言,使用 pandas 做结构化数据处理,pandera 或自定义规则函数做字段级校验,great_expectations 做数据质量断言,openpyxl 处理 Excel 交付物,SQLite 或 PostgreSQL 管理中间数据表,Git 做脚本与规则版本控制。对于术语映射,课程会演示如何调用本地字典表完成 MedDRA 和 WHO Drug 的初步匹配,并保留人工复核接口。整个工具链不依赖商业软件,所有示例均可在本地环境复现。
需要强调的是,自动化清洗的最终产出不是“干净的数据”这一句话,而是一套可审计的证据链:原始数据、清洗规则、执行日志、异常处理记录、版本差异和最终数据集。只有这条链路完整,临床研究的数据质量才经得起核查,统计分析结论才具备可信度。