From light
Processes and analyzes data quality for ML research. Handles cleaning, missing values, feature engineering, augmentation, splitting, and dataset creation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/light:light-data-engineeringThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**数据先行**:在 m03 提 idea 之前,先回答四问——数据是否足以支撑研究?质量是否可靠?规模是否足够?特征是否有挖掘价值?避免脱离数据基础的空想。**"规模是否足够"可先跑 `scripts/sample_size_check.py` 拿经验预警**(分类每类最小样本/回归样本特征比 EPV/检测每类实例数),它给 ok/warn/insufficient 粗筛——但**不是 power analysis**,主结论样本量仍须正式功效论证。
assets/data_card_template.mdexamples/derive_spec.example.jsonexamples/rules.example.yamlexamples/worked_example.mdreferences.mdscripts/check_access_level.pyscripts/croissant_export.pyscripts/data_doctor.pyscripts/data_feasibility.pyscripts/derive_eval_set.pyscripts/drift_check.pyscripts/emit_artifacts.pyscripts/quality_gate.pyscripts/safe_split.pyscripts/sample_size_check.pytemplates/annotation_guide.md数据先行:在 m03 提 idea 之前,先回答四问——数据是否足以支撑研究?质量是否可靠?规模是否足够?特征是否有挖掘价值?避免脱离数据基础的空想。"规模是否足够"可先跑 scripts/sample_size_check.py 拿经验预警(分类每类最小样本/回归样本特征比 EPV/检测每类实例数),它给 ok/warn/insufficient 粗筛——但不是 power analysis,主结论样本量仍须正式功效论证。
dtype/parse_dates,df.info(memory_usage='deep') 看真实内存,df.isna().mean() 一行得缺失率,df.describe(include='all')。object 列转 category 省内存。pl.scan_csv(...).filter(...).group_by(...).collect(),超大开 collect(streaming=True);想用 SQL 直查 parquet/csv 且 out-of-core 用 DuckDB(duckdb.sql("SELECT ... FROM 'data/*.parquet'"),超内存自动 spill);想保持 pandas 写法又超内存用 Dask dd.read_csv("*.csv")...compute()。(引擎选型矩阵以 a09 tool-selection decision_matrix.md 为单一口径;旧推荐的 Vaex 2023 后已停维护、勿新用。)ProfileReport(df, title=...).to_file("r.html");列多/行多务必 minimal=True,时序 tsmode=True;对比清洗前后/train-test 用 r1.compare(r2)。看报告 Alerts(高相关、高基数、常量、缺失)。Dataset(df, label=, cat_features=[...]) 后 data_integrity().run(ds)(重复/混合类型/特征-标签泄漏/异常值)、train_test_validation().run(train_ds, test_ds)(漂移/新类别/train-test 样本重叠泄漏)。gx.get_context() → Data Source/Asset/Batch → Expectation Suite(ExpectColumnValuesToNotBeNull/ToBeBetween/ToBeInSet/ToBeUnique/ToMatchRegex)→ Validation Definition → Checkpoint,产出 Data Docs。注意 GX 1.x 与 0.x API 断层,认版本。frictionless describe 推断 Table Schema,frictionless validate datapackage.json 出 cell/row 级错误报告。train_test_split(..., stratify=y, random_state=) 分类必分层;交叉验证按数据性质选——SPLIT-01(time-forward 防未来穿越) 时序用 TimeSeriesSplit、SPLIT-02(按组/患者/牧场/地点分域防泄漏) 重复个体用 GroupKFold/StratifiedGroupKFold、一般分类用 StratifiedKFold。LEAK-01(只在训练折 fit):缩放/插补/编码/特征选择全部放进 Pipeline+ColumnTransformer,只在训练折 fit,绝不在划分前对全量 fit_transform。记录随机种子。(safe_split.py 已对 LEAK-01 做折内 refit 断言。)采集方式、标注规范、数据格式、数据说明文档(datasheet)、隐私合规(脱敏/授权/许可)、发布方式(Zenodo/HF/Figshare + DOI + license)。产出 dataset_card(见 db04 字段)。
code_assets/agreement.py(Cohen's κ / 二次加权 κ 用于有序评分 / Fleiss' κ ≥3 标注者 / ICC(2,1) 连续值,已对齐 sklearn),不重写;κ<0.6 不达标要回补边界规则重标。pred_label/human_label/是否修正/仲裁。fetch_openml(name=, version=, as_frame=True) 或 fetch_openml(data_id=);完整能力 openml.datasets.get_dataset(id).get_data(target=)、list_datasets(...)、标准化 tasks/runs 可复现。锁 version/data_id 保证复现。load_dataset(name, split=),本地 load_dataset("csv"/"parquet", data_files=),超大 streaming=True(IterableDataset)。处理用 .map(batched=True)/.filter/.train_test_split。kaggle.json 放 ~/.kaggle/(权限 600),kaggle datasets list -s 关键词、kaggle datasets download -d owner/name --unzip。需先接受数据集条款,注意各数据集 license。完整性、一致性、准确性、时效性、唯一性、代表性、偏差(bias_risk)、隐私(privacy_risk)、标注质量。漂移监控用 Evidently 新版 API:Dataset.from_pandas(df, data_definition=DataDefinition(...)) 包装 current/reference,Report(metrics=[DataDriftPreset()]).run(current_data=, reference_data=),.save_html()。漂移按列选检验(KS/PSI/卡方/Wasserstein);注意 Evidently 近年 API 大改,认版本,且“检出漂移≠有害”需结合业务判断。
find_label_issues 出按可疑度排序清单(用法见 references「cleanlab」节)。pred_probs 必须 out-of-sample,找出候选后人工裁定 top-K,不全自动删。cleanlab(定位具体可疑样本)与 IAA(评标注流程整体可靠度,code_assets/agreement.py)互补,两者都做。quality_report.md(命名见 CONVENTIONS §6.1)。data_card.md(交 m05/a03/m06)。data_feasibility.md(交 m03/m04):把"数据是否足以支撑/质量是否可靠/规模是否足够/特征是否有价值"四问收敛成 ok/warn/insufficient + 依据的轻量落盘工件,给 m03 判 idea 该不该立项、m04 复核数据声明用——区别于给做实验用的重工件 data_card/quality_report。由 scripts/data_feasibility.py 生成;insufficient 即退出码 1,可当"不进 m03"的闸门。这是 m02→m03/m04 的标准交接工件,补此前靠聊天传的单向挂载(CONVENTIONS §6.1 双向声明)。工件落位:用
scripts/emit_artifacts.py --check核三件套(quality_report.md / data_card.md / data_feasibility.md)是否落到 §6.1 标准名,--register打印 passport 登记命令(委托 a01 orchestrator 的 passport.py),保证 orchestrator 台账与 a07 一致性回扫扫得到。
结论喂给 m03/m04;流水线交 a03 实现;数据集登记 db04 与项目库 db09。隐私/许可问题上报 a10。
所有脚本带 --selftest(无需数据,内置合成数据 + 断言验证检测器真的触发)。
scripts/data_doctor.py:CSV → Markdown 数据体检报告(形状/类型/真实内存/缺失/重复/常量列/全空列/高基数/IQR 异常值/强相关/目标泄漏提示/ID-like 列/inf 无穷值/混合类型列/类不均衡/强偏态/稀有类别,按 HIGH/MED/LOW 给问题摘要)。泄漏检测覆盖数值目标(|corr|≥0.98)与分类目标(数值特征 η² 相关比、类别特征条件纯度,纯 numpy/pandas 算单特征近乎可分);低基数整数目标自动当分类处理;ID-like 列(近乎逐行唯一)单列提示;高基数阈值随行数自适应。
python scripts/data_doctor.py --selftestpython scripts/data_doctor.py --csv data.csv --target y --out report.md(--sample N 先抽样防大表卡死)。scripts/safe_split.py:按 --task clf/reg/timeseries/group 构建 Pipeline+ColumnTransformer(数值 median 插补+标准化、类别 most_frequent 插补+OneHot)并自动选 CV——StratifiedKFold/KFold/TimeSeriesSplit/GroupKFold/StratifiedGroupKFold。内置泄漏断言:证明预处理在每折单独 refit(折内 mean ≠ 全量 mean),杜绝划分前 fit_transform。时序正确性护栏:timeseries 任务用 --time-col 按时间升序重排并校验单调(不给则显式警告,不静默用乱序数据跑出穿越结果)。group 分类/回归显式声明 --group-clf/--group-reg(不再靠 nunique<=20 猜,避免 20+ 类分类误退化丢分层)。
python scripts/safe_split.py --selftest(四种任务全跑 + 时序排序护栏 + 显式 group 判定)。python scripts/safe_split.py --csv data.csv --target y --task group --group-col user_id --group-clf;时序 --task timeseries --time-col date。scripts/sample_size_check.py:数据规模充足性经验预警(四问之"规模")。按经验阈值给 ok/warn/insufficient——分类每类最小样本(50/100 档)、回归样本/特征比 EPV(10/20 档)、检测每类实例数、二分类正例 EPV(Peduzzi 1996)。明确非 power analysis,只做"低于经验下限就预警"的粗筛,主结论样本量仍须正式功效论证(statsmodels / code_assets stats_tests power 函数)。阈值可调。
python scripts/sample_size_check.py --selftestpython scripts/sample_size_check.py --task clf --n 1200 --classes 3 --features 20(--per-class 960,20,20 按最小类更严谨)。scripts/quality_gate.py:拿 YAML 规则校验 CSV,出 PASS/FAIL 报告(dataset: min/max_rows、no_duplicate_rows;columns: dtype/required/non_null/unique/min/max/enum/regex)。纯 pandas+PyYAML,无 GX/Frictionless 硬依赖,退出码 0/1 可直接做 CI 数据门禁。
python scripts/quality_gate.py --selftest;规则示例见 examples/rules.example.yaml。python scripts/quality_gate.py --csv data.csv --rules rules.yaml --out gate.md。assets/data_card_template.md:datasheet 模板(字段对齐 db04),含质量评估、偏差/隐私风险、访问分级、推荐划分、溯源核实区。scripts/croissant_export.py:把数据卡关键字段导出为 Croissant JSON-LD(MLCommons 机器可读数据卡标准,HF/Kaggle/OpenML 已采用),发布数据集时附上便于被自动索引——人读 Markdown(data_card) + 机读 JSON-LD(croissant) 双产物。最小骨架(name/license/url/citation + 字段字典),完整 distribution 校验和/hash 须用 mlcommons/croissant 官方库补全。python scripts/croissant_export.py --in card_fields.json --out ds.croissant.json(缺核心字段会 warn 不臆造)。scripts/check_access_level.py:数据访问分级守门。每份数据/派生集在数据卡声明 access_level(raw/redacted/verified_only),脚本校验它能否流向某下游 sink——raw 数据流向 paper/figure/public-repo 等公开环节会被阻断(退出码非零,可当 pipeline 闸门)。三态 pass/blocked/unknown,只按声明判定,真实脱敏是否到位仍需 a10 复核。
python scripts/check_access_level.py --selftestpython scripts/check_access_level.py --level raw --sink paper,或 --manifest flows.json 批量校验流向清单。scripts/data_feasibility.py:数据先行四问 → data_feasibility.md(交 m03/m04 的标准工件)。四问各给 ok/warn/insufficient + 依据,整体取最差档(usable/usable_with_caveats/insufficient)。可手填(--q1 ok:理由)或吃 sample_size_check.py --json 自动填 Q3(--scale-json)。insufficient → 退出码 1,可当"不进 m03"闸门。补 m02→m03/m04 的单向挂载。
python scripts/data_feasibility.py --selftestpython scripts/data_feasibility.py --project X --q1 ok:... --q2 warn:... --q3 insufficient:... --q4 ok:... --out data_feasibility.md。scripts/drift_check.py:两数据集分布漂移检验(reference vs current),补 data_doctor 单数据集体检之外的 train/test 同分布 / 上线漂移 / 清洗前后对比。数值列 KS+PSI、类别列卡方+PSI;纯 numpy 实现(p 值渐近近似,无 scipy 硬依赖)。PSI 档 <0.1 稳定/0.1~0.25 轻微/>0.25 显著。以 PSI 效应量为主、p 为辅(大样本 p 过敏),检出漂移≠有害。
python scripts/drift_check.py --selftestpython scripts/drift_check.py --ref train.csv --cur test.csv --out drift.md。scripts/derive_eval_set.py:m05 派生数据回边的可执行实现。据派生规格 JSON(基础集 + 变换 + 参数)生成鲁棒性/泛化/敏感性评测集 + 对齐 db04 的 dataset_card 字段。变换:noise(加噪)/missing(MCAR缺失)/subset(跨域子集)/scale(扫参)。铁律:默认只动特征不碰标签(target_safe)、固定 seed 记入卡、仅作评测不回流训练折。规格示例见 examples/derive_spec.example.json,产出 card_fields 可喂 croissant_export.py 回填 db04。
python scripts/derive_eval_set.py --selftestpython scripts/derive_eval_set.py --base data.csv --spec derive_spec.json --outdir derived/。scripts/emit_artifacts.py:m02 标准工件落位守门——--check 核 quality_report.md/data_card.md/data_feasibility.md 是否落到 §6.1 标准名,--register 打印委托 orchestrator passport.py 的登记命令(artifacts 路径是 a07 回扫权威清单)。纯标准库。
python scripts/emit_artifacts.py --selftestpython scripts/emit_artifacts.py --check --dir .。code_assets/stats_tests.py(相对本技能为 ../../code_assets/,含 welch_t、benjamini_hochberg、wilson_ci 等),标注一致性复用 agreement.py,长尾重采样复用 longtail_resample.py,不要重造。工具的真实端点/API/参数与已知坑详见 references.md(逐工具核查笔记)。
npx claudepluginhub light0305/light-skillsProfiles datasets for data quality issues: missing values, outliers, class imbalance, correlation problems, and schema drift. Provides detection methods and actionable recommendations.
Analyzes dataset distributions, class imbalances, co-occurrences, and metadata; assesses bias and fairness; creates stratified splits; evaluates annotation quality; recommends expansions.