4. 原始临床数据导入与结构解析
临床研究数据清洗的第一道工程关口,不是“清洗”,而是“把异构原始文件稳定地读进来,并识别出它们各自的结构”。EDC 系统导出的数据、中心实验室的检测结果、影像报告的文本或结构化字段、可穿戴设备的高频时序数据,以及多中心各自命名习惯不同的文件,往往在同一项目里同时存在。若导入阶段没有把结构解析清楚,后续的去重、缺失处理、单位换算和逻辑核查都会建立在错误的数据模型上。
本节的核心任务是建立一条“批量读取—模式识别—结构归一”的导入链路。它要回答三个问题:文件如何被批量发现与读取;文件内部的结构如何被自动识别;识别结果如何映射到统一的目标字段。
一、四类数据源的结构特征
不同来源的数据在结构上差异明显,导入策略必须区别对待。
- EDC 导出:通常为宽表或长表 CSV/XLSX,含受试者编号、访视、表单、字段名、字段值、录入时间等列。结构相对规整,但不同 EDC 厂商的列名、编码字典和缺失值表示(空串、NA、-9、9999)不一致。
- 实验室数据:多为“一行一个检测项”的长表,关键字段包括样本号、检测项目代码(如 LOINC 或本地代码)、结果值、单位、参考范围、检测方法、报告时间。同一项目在不同中心可能使用不同单位。
- 影像报告:可能是 PDF、纯文本或半结构化字段,包含检查部位、影像号、报告结论、RECIST 评估等。结构化程度最低,常需按关键词或正则抽取。
- 可穿戴设备数据:高频时序,如心率、步数、睡眠分期,采样间隔从秒级到分钟级不等,文件常按设备序列号或日期分片,含时间戳、指标名、数值、质量标记。
多中心异构文件还叠加了命名差异:同一访视可能被写成 V1、Visit1、基线;同一性别字段可能是 M/F、1/2、男/女。导入阶段必须把这些差异收敛到统一编码。
二、批量读取与模式识别
批量读取的第一步是建立文件清单。工程上通常按“项目—中心—数据源—批次”组织目录,例如:
raw/
center_A/edc/export_20240601.csv
center_A/lab/lab_20240601.xlsx
center_B/edc/export_20240601.csv
center_B/wearable/device_SN001_202406.csv
center_C/imaging/report_202406.txt
读取时先做文件级模式识别:按扩展名和目录名判断数据源类型,再按文件名中的日期、中心、设备号提取元数据。对 CSV 需处理编码(UTF-8、GBK)、分隔符(逗号、制表符、分号)和引号转义;对 XLSX 需指定工作表;对文本报告需按行或段落切分。
字段级模式识别是更关键的一步。常用方法包括:
- 列名匹配:用同义词字典把“受试者编号”“Subject ID”“SUBJID”映射到统一字段 subject_id。
- 值域识别:通过取值分布判断某列是性别、日期还是数值。例如某列取值集中在 {M,F},可识别为性别。
- 格式识别:用正则识别日期(YYYY-MM-DD、DD/MM/YYYY)、时间戳、单位(mg/dL、mmol/L)。
- 结构识别:判断文件是宽表还是长表,长表需按“指标名—值”对进行透视。
下面这张图展示了从多源原始文件到统一结构表的导入与解析链路,重点体现文件级识别、字段级识别和结构归一三个环节的输入输出关系。
三、结构归一与映射表
识别出字段含义后,需要把各来源字段映射到统一目标结构。一个可用的目标结构至少包含:受试者标识、中心标识、访视、数据源类型、检测项代码、结果值、单位、报告时间、质量标记。映射关系建议用一张可维护的映射表管理,而不是硬编码在脚本里。
| 来源 | 原始字段 | 目标字段 | 转换规则 |
|---|---|---|---|
| EDC | SUBJID | subject_id | 去空格、统一大写 |
| 实验室 | TEST_CODE | item_code | 本地代码映射到 LOINC |
| 实验室 | RESULT_UNIT | unit | mg/dL → mmol/L(×0.0555) |
| 可穿戴 | timestamp | report_time | 统一为 ISO 8601 |
| 影像 | 报告结论文本 | finding | 关键词/正则抽取 |
单位换算必须显式记录换算系数和方向。例如血糖从 mg/dL 转为 mmol/L,系数为 0.0555;若反向转换则除以该系数。参照系一旦确定,全文和图示保持一致,避免同一字段在不同中心出现两种单位混用。
四、异常处理与质量检查
导入阶段最常见的异常包括:文件编码错误导致中文乱码、分隔符不一致导致列错位、日期格式混杂、单位缺失、长表透视后出现重复键。处理策略是“先记录、再隔离、后修复”:
- 对无法识别的文件,写入异常日志并跳过,不中断整批导入。
- 对列错位,按列数与预期不符进行标记,人工确认后再重读。
- 对单位缺失,标记 quality_flag 为“单位待确认”,不直接参与换算。
- 对重复键,按“受试者+访视+检测项+时间”判断,保留最新报告时间并记录冲突。
把导入与结构解析做扎实,后续的缺失值处理、逻辑核查和统计分析才有可靠的数据基础。工程上应把文件清单、映射表、异常日志和解析报告作为可复现的交付物固定下来,使同一批原始数据在任何时间都能被一致地读入和解释。