light-data-engineering
数据处理、数据质量分析与数据集构建。当用户需要清洗数据、处理缺失/异常值、特征工程、数据增强、划分数据集、评估数据质量,或需自建数据集(采集、标注规范、格式、说明文档、隐私合规、发布)时使用。在提 idea 前优先判断现有数据是否足以支撑研究。
git clone --depth 1 https://github.com/Light0305/Light-skills /tmp/light-data-engineering && cp -r /tmp/light-data-engineering/skills/light-data-engineering ~/.claude/skills/light-data-engineeringSKILL.md
# 数据处理、质量分析与数据集构建
## 核心原则
**数据先行**:在 m03 提 idea 之前,先回答四问——数据是否足以支撑研究?质量是否可靠?规模是否足够?特征是否有挖掘价值?避免脱离数据基础的空想。**"规模是否足够"可先跑 `scripts/sample_size_check.py` 拿经验预警**(分类每类最小样本/回归样本特征比 EPV/检测每类实例数),它给 ok/warn/insufficient 粗筛——但**不是 power analysis**,主结论样本量仍须正式功效论证。
## 输入 / 触发
- **上游(idea 前,主线)**:用户原始数据 / 现成数据集 / 自建需求 → 出四问结论喂给 m03/m04。
- **回边(实验阶段,来自 m05)**:可接收 research-plan 实验矩阵「派生数据规格」区块的派生数据需求(基础数据集 + 变换类型 + 关键参数 + 划分策略),据此产出对应的**加噪/缺失/跨域/扫参**评测集与 dataset_card,回填 db04 供 ROB/GEN/SEN 实验使用。派生集构建沿用下文「处理流程」「划分」「自建数据集规划」的方法与防泄漏铁律。
## 数据体检(先做)
1. 概览:行列、类型、内存、样例。
- 中小数据 pandas:读入即定 `dtype`/`parse_dates`,`df.info(memory_usage='deep')` 看真实内存,`df.isna().mean()` 一行得缺失率,`df.describe(include='all')`。object 列转 `category` 省内存。
- 大数据按场景选引擎:单机想要快+查询优化用 Polars 惰性管线 `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 后已停维护、勿新用。)
2. 质量画像:按需各取所长,别只跑一个。
- ydata-profiling 出整体 EDA 报告:`ProfileReport(df, title=...).to_file("r.html")`;列多/行多务必 `minimal=True`,时序 `tsmode=True`;对比清洗前后/train-test 用 `r1.compare(r2)`。看报告 Alerts(高相关、高基数、常量、缺失)。
- Deepchecks 跑结构化校验套件:`Dataset(df, label=, cat_features=[...])` 后 `data_integrity().run(ds)`(重复/混合类型/特征-标签泄漏/异常值)、`train_test_validation().run(train_ds, test_ds)`(漂移/新类别/train-test 样本重叠泄漏)。
- Great Expectations 做可复现质量门禁:`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:`frictionless describe` 推断 Table Schema,`frictionless validate datapackage.json` 出 cell/row 级错误报告。
3. 质量结论:给出“可直接用 / 需清洗 / 不足以支撑 / 需补采”的明确判断与理由。
## EDA 与统计分析流程
- EDA 七步:结构概览→缺失分析(missingno matrix/heatmap 看缺失模式)→单变量(数值直方图+箱线、类别频次)→双变量(散点+相关、分组箱线、交叉表/卡方)→多变量(相关热力图、pairplot、PCA)→目标关系(特征 vs 目标,初判预测力与泄漏)→质量小结。EDA 结论只是假设,别用同一份数据既探索又下统计定论。
- 统计检验决策:先查前提——正态性(Shapiro-Wilk,大样本改看 QQ 图,因其过敏感)、方差齐性(Levene)。两组数值正态→t 检验(方差不齐用 Welch);非正态→Mann-Whitney U;配对→配对 t/Wilcoxon;多组→ANOVA/Kruskal-Wallis;类别关联→卡方/Fisher。必报效应量(Cohen's d、Cramér's V、r/ρ)与置信区间,不只报 p。多检验必校正:FDR(Benjamini-Hochberg) 优先,Bonferroni 更保守。警惕 p-hacking 与 HARKing。
## 处理流程
- 清洗:去重、类型修正、统一编码/单位、文本规范化。
- 缺失值:分机制(MCAR/MAR/MNAR)选策略——删除/均值中位数/模型插补/标记位。
- 异常值:IQR/z-score/孤立森林/业务规则,区分错误 vs 真实极端。
- 特征工程:编码、缩放、构造、选择(过滤/包裹/嵌入)、降维。
- 数据增强:按模态选工具,**先划分再增强、只增训练折**(验证/测试保持原始分布,否则指标虚高)——图像 albumentations(bbox/mask 同步变换)、文本 nlpaug(同义词/上下文/回译,注意别翻转标签语义)、时序 tsaug(TimeWarp/Drift/加噪,注意别破坏因果引入泄漏)、表格 SMOTE 等只在训练折拟合。各模态用法与红线见 references「数据增强」节。
- 划分(scikit-learn)——**命名方法论锚点**(db04 卡 recommended_splits/preprocessing_steps 指针引用,跨数据集单点维护):`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 字段)。
- **标注规范用模板 [templates/annotation_guide.md](templates/annotation_guide.md)**:类目定义 / 边界案例判定规则 / LLM 辅助标注+人工审核闭环 / 质检抽样率 / IAA 一致性指标。一致性指标**复用 `code_assets/agreement.py`**(Cohen's κ / 二次加权 κ 用于有序评分 / Fleiss' κ ≥3 标注者 / ICC(2,1) 连续值,已对齐 sklearn),不重写;κ<0.6 不达标要回补边界规则重标。
- **LLM 预标注不可直接当真值**:会放大模型偏差,必须人工审核闭环,留痕 `pred_label/human_label/是否修正/仲裁`。
## 找现成数据集(自建前先查)
- OpenML:轻量取数 `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 保证复现。
- Hugging Face Datasets:`load_dataset(name, split=)`,本地 `load_dataset("csv"/"parquet", data_files=)`,超大 `streaming=True`(IterableDataset)。处理用 `.map(batched=True)`/`.filter`/`.train_test_split`。
- Kaggle:`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 大改,认版本,且“检出漂移≠有害”需结合业务判断。
- **标注质量有指标更要有检测手段**:用 **cleanlab** 置信学习定位疑似标错样本——交叉验证 out-of-sample 预测概率 → `find_label_issues` 出按可疑度排序清单(用法见 references「cleanlab」节)。pred_probs 必须 out-of-sample,找出候选后**人工裁定 top-K,不全自动删**。cleanlab(定位具体可疑样本)与 IAA(评标注流程整体可靠度,`code_assets/agreement.py`)互补,两者都做。
## 产出
1. 数据质量报告(含四问结论)。**标准工件:`quality_report.md`**(命名见 CONVENTIONS §6.1)。
2. 可复现处理流水线(脚本 + 参数 + 种子,交 a03 落地)。
3. 划分方案与说明。
4. dataset_card(自建时)。**项目级数据卡标准工件:`data_card.md`**(交 m05/a03/m06)。
5. **四问结论卡 `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。
## 随技能脚本(可直接运行,纯 python + 合成自测,无网络依赖)
所有脚本带 `--selftest`(无需数据,内置合成数据 + 断言验证检测器真的触发)。
- `scripts/data_doctor.py`:CSV → Markdown 数据体检报告(形状/类型/真实内存/缺失/重复/常量列/全空列/高基数/IQR 异常值/强相关/**目标泄漏提示/ID-like 列/inf 无穷值/混合类型列/类不均衡/强偏态/稀有类别**,按 HIGH/MED/LOW 给问题摘要)。**泄漏检测覆盖数值目标(|corr|≥0.98)与分类目标(数值特征 η² 相关比、类别特征条件纯度,纯 numpy/后端代码编写、逻辑强、安全性高、可读性好、版本控制、代码审查。当任务需要写实验代码、模型代码、数据处理代码、可视化代码、后端接口或系统逻辑时使用。要求逻辑清晰、安全、可读、可维护、便于复现/扩展/部署。支持 Git 版本管理、代码审查、注释规范、README、依赖管理、环境配置、运行说明与项目结构整理。
论文引用规划、审查与多格式生成。当用户需要处理参考文献、引用、bibtex 时使用。审查引用的关联度、真实性、权威性、时效性、数量、中外占比,是否引用了经典/最新/代表性/对比工作。避免虚假引用、过度引用、无关引用、堆砌、遗漏关键文献、低质量来源、引用与正文不匹配。生成 BibTeX/EndNote/GB-T 7714/APA/IEEE 等格式并按目标 venue 调整。
竞赛与项目申报材料辅助。当用户做统计建模、数学建模、互联网+、挑战杯、大创、创新创业、科研训练等项目时使用。辅助写申报书、项目计划书、商业计划书、路演 PPT、答辩稿、项目摘要、技术路线、创新点、可行性分析、市场分析、研究基础、预期成果、经费预算、团队分工。用于非论文投稿场景,可与论文/软著/专利/PPT 联动。
统一风格与一致性维护。在论文、PPT、图表、代码、项目文档之间保持术语一致、视觉风格一致、逻辑线索一致、创新点表述一致(常驻,所有任务后台生效)。避免同一项目在不同材料中出现说法不一致、指标名称不统一、图表风格混乱、创新点前后矛盾、方法名称变化、数据集名称不统一、论文与 PPT 逻辑不一致、软著与系统功能不一致。
从顶会大牛角度进行专业绘图与组图。当用户需要把规划好的图实际画出来时使用。按情况用 Python(matplotlib/seaborn/plotly/altair)、R(ggplot2)、MATLAB、Visio、Origin、LaTeX/TikZ、Illustrator、PowerPoint 等。审美统一、专业清晰、配色合理、字体规范、线条清楚、高分辨率,适合直接投稿。不仅画图,还从论文表达角度判断怎么排、怎么组、怎么标注、怎么突出重点。
根据论文内容规划应该做哪些图、哪些表、插在哪里、各起什么作用。当用户需要论文图表规划时使用。图表不限于统计图,也包括数据集真实效果图、模型输出示例、案例展示、可解释性可视化等。规划框架图、技术路线图、数据集示意图、模型结构图、算法流程图、结果对比/消融/敏感性图、真实效果图、统计表/对比表等,以审稿人标准判断哪些必做、哪些冗余。
强大地读文件并学习——Word、PDF、PPTX、Excel、CSV、图片、视频、代码、压缩包等。当用户提供任何文件、问"这个文件讲了什么"、或任务需要理解已有材料时使用(常驻,自动触发)。不只提取文字,而是理解结构、逻辑、图表、数据、实验结果、格式要求、章节关系、视觉风格、隐含要求与可复用内容,并转化为可执行任务。
独特吸睛、审美好、有特色、美观全面的前端设计。当任务涉及前端界面、项目展示页、系统演示、大屏可视化、可视化平台、微信小程序 UI、移动端界面、设计系统、Tailwind v4、shadcn/ui、Next.js、React、Vite、可访问性、动效、重设计审计时使用。不只是能用,而是好看、统一、清晰、有亮点、有视觉记忆点,适合展示/答辩/演示/落地。按主题选风格:科技感、学术感、农业智慧化、数据可视化、极简、玻璃拟态、卡片式、大屏、管理系统、移动端、小程序等。