# 工具C - 缺失值处理功能开发计?- 更新说明 ## 📝 更新日期?025-12-10 ## ?已完成的更新 ### 1. Phase 1功能清单 **新增???*? - 5. **前向填充**(Forward Fill? - 适用于:时间序列数据、有顺序的观察数? - 实现:`df[column].fillna(method='ffill')`,用前一个非缺失值填? - 示例:[10, NaN, NaN, 20] ?[10, 10, 10, 20] - 6. **后向填充**(Backward Fill? - 适用于:时间序列数据、有顺序的观察数? - 实现:`df[column].fillna(method='bfill')`,用后一个非缺失值填? - 示例:[10, NaN, NaN, 20] ?[10, 20, 20, 20] ### 2. Phase 2功能清单 **移除**:前?后向填充(已移到Phase 1? **保留**:分组填补、线性插值、KNN填补、组合填? ### 3. UI设计更新 Tab 2填补方法新增? - ?前向填充(用前一个值填充,适合时间序列? - ?后向填充(用后一个值填充,适合时间序列? ### 4. Python函数签名更新 ```python def fillna_simple( ... method: Literal['mean', 'median', 'mode', 'constant', 'ffill', 'bfill'], # 新增ffill和bfill ... ) ``` ### 5. TypeScript类型更新 ```typescript method: 'mean' | 'median' | 'mode' | 'constant' | 'ffill' | 'bfill' ``` ### 6. 测试用例更新 ?4个增加到18个: - **新增TC-6**:前向填? - **新增TC-7**:后向填? - **新增TC-11**:前向填充边界(首行NA? - **新增TC-12**:后向填充边界(末行NA? - 原TC-6~TC-14 重新编号?TC-8~TC-18 ### 7. 测试数据准备更新 **新增**:时间序列列:随访血压(有顺序,缺失18%? 用于测试?后向填充 ### 8. 时间估算更新 | 项目 | 原计?| 新计?| 增加时间 | |------|--------|--------|---------| | Python后端 - 简单填?| 40分钟 | 50分钟 | +10分钟 | | 前端UI - Tab 2 | 40分钟 | 50分钟 | +10分钟 | | 测试 | 40分钟?4个用例)| 50分钟?8个用例)| +10分钟 | | **总计** | **?-6小时** | **?-7小时** | **+30分钟** | --- ## 🎯 功能完整清单(Phase 1? | 编号 | 功能 | 适用场景 | 实现方法 | |------|------|----------|----------| | 1 | 均值填?| 数值型变量,正态分?| `fillna(mean())` | | 2 | 中位数填?| 数值型变量,偏态分?| `fillna(median())` | | 3 | 众数填补 | 分类变量、离散数?| `fillna(mode()[0])` | | 4 | 固定值填?| 任何类型,用户指?| `fillna(value)` | | 5 | **前向填充** ?| **时间序列、随访数?* | **`fillna(method='ffill')`** | | 6 | **后向填充** ?| **时间序列、预测数?* | **`fillna(method='bfill')`** | | 7 | MICE多重插补 | 缺失?%-30%,需考虑变量关系 | `IterativeImputer` | --- ## 📋 完整测试用例清单?8个) | 编号 | 功能 | 测试场景 | 预期结果 | |------|------|----------|----------| | TC-1 | 均值填?| ?年龄"列使用均值填?| 创建新列,缺失值被均值填??| | TC-2 | 中位数填?| ?体重"列使用中位数填补 | 创建新列,缺失值被中位数填??| | TC-3 | 众数填补 | ?婚姻状况"列使用众数填?| 创建新列,缺失值被众数填充 ?| | TC-4 | 固定值填补(数值) | ?年龄"列填充固定?0" | 创建新列,所有缺失值变? ?| | TC-5 | 固定值填补(文本?| ?婚姻状况"列填?未知" | 创建新列,所有缺失值变?未知" ?| | **TC-6** | **前向填充** ?| **对随访血压列使用前向填充** | **缺失值被前一个非缺失值填??* | | **TC-7** | **后向填充** ?| **对随访血压列使用后向填充** | **缺失值被后一个非缺失值填??* | | TC-8 | MICE填补 | 选择"收缩?+"舒张?,执行MICE | 创建2个新列(_MICE后缀)✅ | | TC-9 | 新列位置验证 ?| ?列A"填补,查看新列位?| 新列紧邻原列右侧 ?| | TC-10 | MICE新列位置 ?| ?列A"+"列C"执行MICE | 各新列紧邻其原列 ?| | **TC-11** | **前向填充边界** ?| **对首行为NA的列前向填充** | **首行NA保持NA(无前值)?* | | **TC-12** | **后向填充边界** ?| **对末行为NA的列后向填充** | **末行NA保持NA(无后值)?* | | TC-13 | 统计信息准确?| 选择任意列,查看统计 | 显示正确的缺失数、均值等 | | TC-14 | 删除功能保留 | Tab 1删除缺失?| 功能正常,与原功能一?| | TC-15 | 空列处理 | 对无缺失列执行填?| 提示或复制原?| | TC-16 | 全缺失列处理 | 对全缺失列执行填?| 提示警告,创建新?| | TC-17 | 重复新列名处?| 新列名已存在 | 自动添加后缀或提?| | TC-18 | 原始数据保留 ?| 填补后,检查原?| 原列数据完全不变 ?| --- ## 💡 适用场景说明 ### 前向填充(Forward Fill? 新增 **最适合场景**? 1. **多次随访数据**:患者在不同时间点的测量,如果某次随访缺失,用上次的? - 示例:血压随访(120 ?NaN ?NaN ?130)→ ?20 ?120 ?120 ?130? 2. **观察性研?*:假设变量在短期内相对稳? 3. **传感器数?*:设备临时故障,用最后一次正常? **不适合场景**? - 变化快的指标(如血糖波动大? - 首次观察即缺失(无前值可用) ### 后向填充(Backward Fill? 新增 **最适合场景**? 1. **预测性数?*:已知未来的值,向前填充 2. **计划性事?*:如手术日期,向前填充到准备? 3. **数据补录**:后期补充的数据向前填充 **不适合场景**? - 末次观察缺失(无后值可用) - 因果关系要求严格的研? --- ## ?更新确认清单 请确认以下更新是否符合您的需求: - [x] 前向/后向填充功能加入Phase 1(本次开发) - [x] Tab 2增加2个填补选项(共6种方法) - [x] Python函数支持 `'ffill'` ?`'bfill'` 方法 - [x] 测试用例?4个增加到18? - [x] 开发时间从5-6小时增加?-7小时 - [x] 适用场景说明清晰(医学研究背景) --- ## 🚀 如确认无误,即可开始开发! **开发顺?*? 1. Python后端 - 简单填补(含前/后向填充? 2. Python后端 - MICE填补 3. Node.js后端API转发 4. 前端UI?个Tab,Tab 2?种方法) 5. API集成 6. 18个测试用例验? **预计总时间:6-7小时** --- **请确认后告诉我,我将立即开始开发!** 🎯