Skip to content

科学数据管线:从实验数据到训练集的工程化 ​

说明:本篇为综述/无第一手实验数据,采用公开实践与数据工程路线。

实验目标 ​

AI for Science 的瓶颈常不在模型而在数据:实验数据格式五花八门(仪器厂商私有的 .csv/.h5/日志)、单位混乱、缺失值满天飞,还要和仿真数据对齐、打标注、做版本管理。本篇目标:建立一条科学数据管线的工程框架——接入解析 → 清洗对齐 → 特征化/标注 → 版本化数据集,覆盖"仪器数据、仿真输出、公共数据集"三类来源,并给出可落地的目录约定与质量门禁。

代码逐段拆解 ​

第一段:异构数据接入与统一 Schema ​

python
# 目标:把三类来源统一成一个 parquet 表(按实验 ID 对齐)
import pandas as pd
from pathlib import Path

def ingest_experiment(src: Path) -> pd.DataFrame:
    # 按扩展名分派解析器:仪器 csv / 厂商 h5 / 日志
    if src.suffix == '.csv':
        df = pd.read_csv(src, comment='#')          # 跳过注释头
    elif src.suffix == '.h5':
        df = pd.read_hdf(src)                        # 厂商 HDF5 导出
    else:
        df = parse_log(src)                          # 自定义日志解析
    # 统一列名与单位(关键!):原始列 → 标准 Schema
    df = df.rename(columns={'Temp [C]': 'temperature_c', '时间': 't_s'})
    return df.assign(source=src.stem)                # 保留来源溯源

要点:

  1. 扩展名分派是第一步:科学数据最常见的问题不是"没有数据",而是"数据在 N 种格式里"——先按文件类型路由解析器,再统一列名。
  2. 单位与列名标准化是数据管线的核心动作:Temp [C] → temperature_c,时间 → t_s——不统一单位,下游建模全是隐蔽 bug(华氏/摄氏、秒/毫秒)。
  3. source 列保留溯源:每个样本知道来自哪个原始文件,是回溯、去重、权限审计的基础。

第二段:清洗与质量门禁 ​

python
def clean_and_gate(df: pd.DataFrame) -> pd.DataFrame:
    n0 = len(df)
    df = df.dropna(subset=['t_s', 'temperature_c'])       # 关键列缺值即删
    df = df[(df['temperature_c'] > -50) & (df['temperature_c'] < 200)]  # 物理范围
    df = df.drop_duplicates(subset=['t_s', 'source'])     # 时间+来源去重
    n1 = len(df)
    print(f"[gate] {n0} -> {n1} rows ({n0-n1} dropped)")
    assert (n1 / n0) > 0.8, "清洗率过高,检查源数据质量"     # 质量门禁
    return df

要点:

  • 门禁不是可选项:缺值、物理越界、重复记录三类清洗各有规则;assert 门禁保证"清洗率异常高(>20% 被删)时报警",防止脏数据在不知道的情况下把清洗当正常。
  • 物理范围过滤是科学数据的特色:温度 -50~200°C、压力非负——用领域知识设物理约束,比统计离群点更可靠。
  • 去重要带来源:两个实验可能同时刻同值,['t_s','source'] 联合去重避免误删。

原理讲解 ​

三类来源的对齐策略 ​

来源特征对齐问题处理
仪器/实验数据格式私有、采样不定时间戳对齐重采样到统一网格
仿真输出网格/步长由求解器定与实验空间不一致插值/映射到实验坐标
公共数据集已整理但口径各异单位、定义不一致统一 Schema 重映射

核心方法:所有来源先转成"统一 Schema 的时空网格",再按实验 ID 对齐。不要试图保留每种格式的原生结构——统一网格 + 来源列是可回退的通用形式。

训练集/仿真输入的版本管理 ​

科学数据集和代码一样要版本管理:dataset/ 目录按"版本号 + 变更说明"组织,配 checksum:

text
datasets/
  v2026-10-baseline/    # 基线版:清洗规则 v1、含 10 万样本
  v2026-10-pharma/      # 制药扩展:新增专有数据 2 万
  MANIFEST.json         # 版本清单:来源、清洗规则、样本数、checksum

关键点:

  • 版本与代码版本绑定:训练脚本记录用的数据集版本(dataset_v=v2026-10-pharma),实验可复现的前提是"代码+数据版本都锁定"。
  • 清洗规则也要版本化:清洗逻辑改一行,整个数据集语义就变了——把清洗脚本与数据集同版本管理,比只记数据文件更严谨。
  • manifest 是可追溯性载体:每个版本声明"来源文件、清洗规则、样本数、checksum",审计与复现都靠它。

与 AI4S 各环节的衔接 ​

科学数据管线是 AI4S 的地基:生成模型(AI 制药篇)要"干净+多样"的训练数据,代理模型(hpc-surrogate 篇)要"仿真-实验对齐"的配对数据,可复现工作流(14 章)要求"数据版本可锁定"。管线做不好,后面所有模型都建立在流沙上——数据管线的工程投入回报率在 AI4S 里最高。

实验结果 ​

(估算口径,非实测)

管线阶段耗时占比常见失败
接入解析30%格式五花八门、解析器逐个适配
清洗对齐40%单位不一致、时间戳错位
特征化/标注20%标注口径漂移、人工标注不统一
版本管理10%忘记记录版本、清洗规则无版本

工程启示 ​

  1. 先统一 Schema 再谈质量:单位/列名标准化是第一步,不做它后面全是隐性 bug。
  2. 质量门禁用 assert 而非口头承诺:清洗率、缺失率、物理范围三张门禁表自动化,超阈值就拦——"数据质量是跑出来的"不是"觉得出来的"。
  3. 来源列与 manifest 双保险:每行有 source、每版本有 manifest,数据事故(错数据进训练集)才能回溯到根。
  4. 数据管线优先于模型选型:AI4S 项目把 40% 精力给数据管线是合理的——模型可以换,脏数据无法靠换模型解决。

下一篇预告:数据地基补好后,AI4S 的工程链(JAX→制药→数据)在本章已形成小闭环——下一步可回到 14 章科学智能章继续深化,或转向站点 SEO 收尾。由你裁量。

AI-HPC 智算超算专家 · Contact: openaihpc@gmail.com