Files
AIclinicalresearch/docs/03-业务模块/DC-数据清洗整理/04-开发计划/工具C_缺失值处理功能_更新说明.md
HaHafeng b47079b387 feat(iit): Phase 1.5 AI对话集成REDCap真实数据完成
- feat: ChatService集成DeepSeek-V3实现AI对话(390行)
- feat: SessionMemory实现上下文记忆(最近3轮对话,170行)
- feat: 意图识别支持REDCap数据查询(关键词匹配)
- feat: REDCap数据注入LLM(queryRedcapRecord, countRedcapRecords, getProjectInfo)
- feat: 解决LLM幻觉问题(基于真实数据回答,明确system prompt)
- feat: 即时反馈(正在查询...提示)
- test: REDCap查询测试通过(test0102项目,10条记录,ID 7患者详情)
- docs: 创建Phase1.5开发完成记录(313行)
- docs: 更新Phase1.5开发计划(标记完成)
- docs: 更新MVP开发任务清单(Phase 1.5完成)
- docs: 更新模块当前状态(60%完成度)
- docs: 更新系统总体设计文档(v2.6)
- chore: 删除测试脚本(test-redcap-query-for-ai.ts, check-env-config.ts)
- chore: 移除REDCap测试环境变量(REDCAP_TEST_*)

技术亮点:
- AI基于REDCap真实数据对话,不编造信息
- 从数据库读取项目配置,不使用环境变量
- 企业微信端测试通过,用户体验良好

测试通过:
-  查询项目记录总数(10条)
-  查询特定患者详情(ID 7)
-  项目信息查询
-  上下文记忆(3轮对话)
-  即时反馈提示

影响范围:IIT Manager Agent模块
2026-01-03 22:48:10 +08:00

6.4 KiB
Raw Blame History

工具C - 缺失值处理功能开发计划 - 更新说明

📝 更新日期2025-12-10

已完成的更新

1. Phase 1功能清单

新增第5、6项

    1. 前向填充Forward Fill
    • 适用于:时间序列数据、有顺序的观察数据
    • 实现:df[column].fillna(method='ffill'),用前一个非缺失值填充
    • 示例:[10, NaN, NaN, 20] → [10, 10, 10, 20]
    1. 后向填充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函数签名更新

def fillna_simple(
    ...
    method: Literal['mean', 'median', 'mode', 'constant', 'ffill', 'bfill'],  # 新增ffill和bfill
    ...
)

5. TypeScript类型更新

method: 'mean' | 'median' | 'mode' | 'constant' | 'ffill' | 'bfill'

6. 测试用例更新

从14个增加到18个

  • 新增TC-6:前向填充
  • 新增TC-7:后向填充
  • 新增TC-11前向填充边界首行NA
  • 新增TC-12后向填充边界末行NA
  • 原TC-6TC-14 重新编号为 TC-8TC-18

7. 测试数据准备更新

新增时间序列列随访血压有顺序缺失18%- 用于测试前/后向填充

8. 时间估算更新

项目 原计划 新计划 增加时间
Python后端 - 简单填补 40分钟 50分钟 +10分钟
前端UI - Tab 2 40分钟 50分钟 +10分钟
测试 40分钟14个用例 50分钟18个用例 +10分钟
总计 约5-6小时 约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多重插补 缺失率5%-30%,需考虑变量关系 IterativeImputer

📋 完整测试用例清单18个

编号 功能 测试场景 预期结果
TC-1 均值填补 对"年龄"列使用均值填补 创建新列,缺失值被均值填充
TC-2 中位数填补 对"体重"列使用中位数填补 创建新列,缺失值被中位数填充
TC-3 众数填补 对"婚姻状况"列使用众数填补 创建新列,缺失值被众数填充
TC-4 固定值填补(数值) 对"年龄"列填充固定值"0" 创建新列所有缺失值变为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 → 130120 → 120 → 120 → 130
  2. 观察性研究:假设变量在短期内相对稳定
  3. 传感器数据:设备临时故障,用最后一次正常值

不适合场景

  • 变化快的指标(如血糖波动大)
  • 首次观察即缺失(无前值可用)

后向填充Backward Fill- 新增

最适合场景

  1. 预测性数据:已知未来的值,向前填充
  2. 计划性事件:如手术日期,向前填充到准备期
  3. 数据补录:后期补充的数据向前填充

不适合场景

  • 末次观察缺失(无后值可用)
  • 因果关系要求严格的研究

更新确认清单

请确认以下更新是否符合您的需求:

  • 前向/后向填充功能加入Phase 1本次开发
  • Tab 2增加2个填补选项共6种方法
  • Python函数支持 'ffill''bfill' 方法
  • 测试用例从14个增加到18个
  • 开发时间从5-6小时增加到6-7小时
  • 适用场景说明清晰(医学研究背景)

🚀 如确认无误,即可开始开发!

开发顺序

  1. Python后端 - 简单填补(含前/后向填充)
  2. Python后端 - MICE填补
  3. Node.js后端API转发
  4. 前端UI3个TabTab 2含6种方法
  5. API集成
  6. 18个测试用例验证

预计总时间6-7小时


请确认后告诉我,我将立即开始开发! 🎯