feat(aia): Complete AIA V2.0 with universal streaming capabilities
Major Changes: - Add StreamingService with OpenAI Compatible format - Upgrade Chat component V2 with Ant Design X integration - Implement AIA module with 12 intelligent agents - Update API routes to unified /api/v1 prefix - Update system documentation Backend (~1300 lines): - common/streaming: OpenAI Compatible adapter - modules/aia: 12 agents, conversation service, streaming integration - Update route versions (RVW, PKB to v1) Frontend (~3500 lines): - modules/aia: AgentHub + ChatWorkspace (100% prototype restoration) - shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook - Update API endpoints to v1 Documentation: - AIA module status guide - Universal capabilities catalog - System overview updates - All module documentation sync Tested: Stream response verified, authentication working Status: AIA V2.0 core completed (85%)
This commit is contained in:
@@ -1,199 +1,67 @@
|
||||
# 工具C - 缺失值处理功能开发计划
|
||||
|
||||
# 撌亙<EFBFBD>C - 蝻箏仃<EFBFBD>澆<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>賢<EFBFBD><EFBFBD>𤏸恣<EFBFBD>?
|
||||
## <20><> 璁<>膩
|
||||
|
||||
**目标**:将现有的"删除缺失值"功能升级为综合的"缺失值处理"功能,包括删除、填补、高级填补三种策略。
|
||||
**<EFBFBD>格<EFBFBD>**嚗𡁜<E59A97><F0A1819C>唳<EFBFBD><E594B3>?<3F>𣳇膄蝻箏仃<E7AE8F>?<3F>蠘<EFBFBD><E8A098><EFBFBD>漣銝箇遞<E7AE87><E9819E><EFBFBD>"蝻箏仃<E7AE8F>澆<EFBFBD><E6BE86>?<3F>蠘<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>砍<EFBFBD><E7A08D>扎<EFBFBD><E6898E>‵銵乓<E98AB5><E4B993><EFBFBD>蝥批‵銵乩<E98AB5>蝘滨<E89D98><E6BBA8>乓<EFBFBD>?
|
||||
**霈曇恣<E69B87>寞<EFBFBD>**嚗𡁏䲮獢㇂ - <20><>僎撖寡<E69296>獢?+ Tab<61><62>揢
|
||||
|
||||
**设计方案**:方案B - 合并对话框 + Tab切换
|
||||
|
||||
**核心原则**:
|
||||
- ✅ **填补操作创建新列**(保留原始数据,便于对比)
|
||||
- ✅ **新列紧邻原列**(方便用户查看和比较)
|
||||
- ✅ **MICE功能必须实现**(医学研究核心需求)
|
||||
- ✅ **无需撤销功能**(原始数据未被修改)
|
||||
**<EFBFBD>詨<EFBFBD><EFBFBD>笔<EFBFBD>**嚗?- <20>?**憛怨‘<E680A8>滢<EFBFBD><E6BBA2>𥕦遣<F0A595A6>啣<EFBFBD>**嚗<><E59A97><EFBFBD>坔<EFBFBD>憪𧢲㺭<F0A7A2B2>殷<EFBFBD>靘蹂<E99D98>撖寞<E69296>嚗?- <20>?**<2A>啣<EFBFBD>蝝折<E89D9D><E68A98>笔<EFBFBD>**嚗<>䲮靘輻鍂<E8BCBB>瑟䰻<E7919F>见<EFBFBD>瘥磰<E798A5>嚗?- <20>?**MICE<43>蠘<EFBFBD>敹<EFBFBD>◆摰䂿緵**嚗<>龫摮衣<E691AE>蝛嗆瓲敹<E793B2><E695B9>瘙<EFBFBD><E79899>
|
||||
- <20>?**<2A>𣳇<EFBFBD><F0A3B387>日<EFBFBD><E697A5>蠘<EFBFBD>**嚗<><E59A97>憪𧢲㺭<F0A7A2B2>格𧊋鋡思耨<E6809D>對<EFBFBD>
|
||||
|
||||
---
|
||||
|
||||
## 🎯 功能需求
|
||||
|
||||
## <EFBFBD>㴓 <20>蠘<EFBFBD><E8A098><EFBFBD>瘙?
|
||||
### Phase 1嚗𡁜<E59A97>憭<EFBFBD><E686AD><EFBFBD>踝<EFBFBD><E8B89D>祆活撘<E6B4BB><E69298>𡢅<EFBFBD>
|
||||
|
||||
#### Tab 1:删除缺失值 ✅ 已有
|
||||
#### Tab 1嚗𡁜<EFBFBD><EFBFBD>斤撩憭勗<EFBFBD>?<3F>?撌脫<E6928C>
|
||||
- 靽萘<E99DBD><E89098>唳<EFBFBD><E594B3>蠘<EFBFBD>
|
||||
- 删除包含缺失值的行
|
||||
- 删除缺失率过高的列
|
||||
- <EFBFBD>𣳇膄<EFBFBD><EFBFBD>鉄蝻箏仃<EFBFBD>潛<EFBFBD>銵?- <20>𣳇膄蝻箏仃<E7AE8F><E4BB83><EFBFBD>擃条<E69383><E69DA1>?
|
||||
#### Tab 2嚗𡁜‵銵亦撩憭勗<E686AD>?潃?<3F>啣<EFBFBD>
|
||||
1. **<EFBFBD><EFBFBD><EFBFBD>澆‵銵?*嚗㇈ean Imputation嚗? - <20><>鍂鈭𠬍<E988AD><F0A0AC8D>啣<EFBFBD>澆<EFBFBD><E6BE86>㗛<EFBFBD>嚗峕迤<E5B395><E8BFA4><EFBFBD>撣? - 摰䂿緵嚗𡁜<E59A97>撱箸鰵<E7AEB8>梹<EFBFBD>憛怠<E6869B><E680A0><EFBFBD><EFBFBD>?
|
||||
2. **銝凋<E98A9D><E5878B>啣‵銵?*嚗㇈edian Imputation嚗? - <20><>鍂鈭𠬍<E988AD><F0A0AC8D>啣<EFBFBD>澆<EFBFBD><E6BE86>㗛<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD>撣? - 摰䂿緵嚗𡁜<E59A97>撱箸鰵<E7AEB8>梹<EFBFBD>憛怠<E6869B>銝凋<E98A9D><E5878B>?
|
||||
3. **隡埈㺭憛怨‘**嚗㇈ode Imputation嚗? - <20><>鍂鈭𠬍<E988AD><F0A0AC8D><EFBFBD>掩<EFBFBD>㗛<EFBFBD><E3979B><EFBFBD>氖<EFBFBD><E6B096><EFBFBD><EFBFBD>啣<EFBFBD>? - 摰䂿緵嚗𡁜<E59A97>撱箸鰵<E7AEB8>梹<EFBFBD>憛怠<E6869B>隡埈㺭
|
||||
|
||||
#### Tab 2:填补缺失值 ⭐ 新增
|
||||
1. **均值填补**(Mean Imputation)
|
||||
- 适用于:数值型变量,正态分布
|
||||
- 实现:创建新列,填充均值
|
||||
4. **<EFBFBD>箏<EFBFBD><EFBFBD>澆‵銵?*嚗㇃onstant Imputation嚗? - <20><>鍂鈭𠬍<E988AD>隞颱<E99A9E>蝐餃<E89D90>嚗𣬚鍂<F0A3AC9A>瑟<EFBFBD>摰𡁜<E691B0>? - 摰䂿緵嚗𡁜<E59A97>撱箸鰵<E7AEB8>梹<EFBFBD>憛怠<E6869B><E680A0><EFBFBD><EFBFBD><EFBFBD>?
|
||||
5. **<EFBFBD>滚<EFBFBD>憛怠<EFBFBD>**嚗㇅orward Fill嚗? - <20><>鍂鈭𠬍<E988AD><F0A0AC8D>園𡢿摨誩<E691A8><E8AAA9>唳旿<E594B3><E697BF><EFBFBD>憿箏<E686BF><E7AE8F><EFBFBD><EFBFBD>撖<EFBFBD>㺭<EFBFBD>? - 摰䂿緵嚗䫤df[column].fillna(method='ffill')`嚗𣬚鍂<F0A3AC9A>滢<EFBFBD>銝芷<E98A9D>蝻箏仃<E7AE8F>澆‵<E6BE86>? - 蝷箔<E89DB7>嚗靀10, NaN, NaN, 20] <20>?[10, 10, 10, 20]
|
||||
|
||||
2. **中位数填补**(Median Imputation)
|
||||
- 适用于:数值型变量,偏态分布
|
||||
- 实现:创建新列,填充中位数
|
||||
6. **<EFBFBD>𤾸<EFBFBD>憛怠<EFBFBD>**嚗㇂ackward Fill嚗? - <20><>鍂鈭𠬍<E988AD><F0A0AC8D>園𡢿摨誩<E691A8><E8AAA9>唳旿<E594B3><E697BF><EFBFBD>憿箏<E686BF><E7AE8F><EFBFBD><EFBFBD>撖<EFBFBD>㺭<EFBFBD>? - 摰䂿緵嚗䫤df[column].fillna(method='bfill')`嚗𣬚鍂<F0A3AC9A>𦒘<EFBFBD>銝芷<E98A9D>蝻箏仃<E7AE8F>澆‵<E6BE86>? - 蝷箔<E89DB7>嚗靀10, NaN, NaN, 20] <20>?[10, 20, 20, 20]
|
||||
|
||||
3. **众数填补**(Mode Imputation)
|
||||
- 适用于:分类变量、离散型数值
|
||||
- 实现:创建新列,填充众数
|
||||
|
||||
4. **固定值填补**(Constant Imputation)
|
||||
- 适用于:任何类型,用户指定值
|
||||
- 实现:创建新列,填充指定值
|
||||
|
||||
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]
|
||||
|
||||
**注意**:所有填补方法都会创建新列(如`体重_填补`),新列紧邻原列,便于对比验证。
|
||||
|
||||
#### Tab 3:高级填补 ⭐ 新增
|
||||
1. **MICE多重插补**(Multivariate Imputation by Chained Equations)
|
||||
- 适用于:缺失率5%-30%,需要考虑变量间关系
|
||||
- 实现:使用 `sklearn.impute.IterativeImputer`
|
||||
**瘜冽<E7989C>**嚗𡁏<E59A97><F0A1818F>匧‵銵交䲮瘜閖<E7989C>隡𡁜<E99AA1>撱箸鰵<E7AEB8>梹<EFBFBD>憒<EFBFBD>雿㯄<E99BBF>_憛怨‘`嚗㚁<E59A97><E39A81>啣<EFBFBD>蝝折<E89D9D><E68A98>笔<EFBFBD>嚗䔶噶鈭𤾸笆瘥娪<E798A5>霂<EFBFBD><E99C82>?
|
||||
#### Tab 3嚗𡁻<E59A97>蝥批‵銵?潃?<3F>啣<EFBFBD>
|
||||
1. **MICE憭𡁻<E686AD><F0A181BB>坿‘**嚗㇈ultivariate Imputation by Chained Equations嚗? - <20><>鍂鈭𠬍<E988AD>蝻箏仃<E7AE8F>?%-30%嚗屸<E59A97>閬<EFBFBD><E996AC><EFBFBD><EFBFBD><EFBFBD>㗛<EFBFBD><E3979B>游<EFBFBD>蝟? - 摰䂿緵嚗帋蝙<E5B88B>?`sklearn.impute.IterativeImputer`
|
||||
|
||||
### Phase 2嚗𡁏𧊋<F0A1818F>交<EFBFBD>撅𤏪<E69285><F0A48FAA>祆活銝滚<E98A9D><E6BB9A>𡢅<EFBFBD>
|
||||
- 分组填补(Grouped Imputation)
|
||||
- 线性插值(Linear Interpolation)
|
||||
- KNN填补(KNN Imputation)
|
||||
- 组合填补(根据条件使用不同填补方法)
|
||||
- <20><><EFBFBD>憛怨‘嚗𠃑rouped Imputation嚗?- 蝥踵<E89DA5>扳<EFBFBD><E689B3>潘<EFBFBD>Linear Interpolation嚗?- KNN憛怨‘嚗𠃋NN Imputation嚗?- 蝏<><E89D8F>憛怨‘嚗<E28098>覔<EFBFBD>格辺隞嗡蝙<E597A1>其<EFBFBD><E585B6><EFBFBD>‵銵交䲮瘜𤏪<E7989C>
|
||||
|
||||
---
|
||||
|
||||
## <20>綫 UI霈曇恣
|
||||
|
||||
### 1. 按钮重命名
|
||||
**原**:`[删除缺失值]`
|
||||
**新**:`[缺失值处理]`
|
||||
|
||||
### 2. 对话框结构
|
||||
### 1. <EFBFBD>厰僼<EFBFBD>滚𦶢<EFBFBD>?**<2A>?*嚗䫤[<5B>𣳇膄蝻箏仃<E7AE8F>奭`
|
||||
**<EFBFBD>?*嚗䫤[蝻箏仃<E7AE8F>澆<EFBFBD><E6BE86><EFBFBD>`
|
||||
|
||||
### 2. 撖寡<E69296>獢<EFBFBD><E78DA2><EFBFBD>?
|
||||
```
|
||||
┌───────────────────────────────────────────────────────┐
|
||||
│ 缺失值处理 [X] │
|
||||
├───────────────────────────────────────────────────────┤
|
||||
│ ┌────────┬────────┬──────────┐ │
|
||||
│ │ 删除 │ 填补 │ 高级填补 │ ← Ant Design Tabs │
|
||||
│ └────────┴────────┴──────────┘ │
|
||||
├───────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 【Tab内容区域】 │
|
||||
│ │
|
||||
│ │
|
||||
│ [取消] [执行处理] │
|
||||
└───────────────────────────────────────────────────────┘
|
||||
```
|
||||
<EFBFBD>𢞖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? 蝻箏仃<E7AE8F>澆<EFBFBD><E6BE86>? [X] <20>?<3F>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? <20>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>砂<EFBFBD><E7A082><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>砂<EFBFBD><E7A082><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>? <20>?<3F>𣳇膄 <20>?憛怨‘ <20>?擃条漣憛怨‘ <20>? <20>?Ant Design Tabs <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>氯<EFBFBD><E6B0AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>氯<EFBFBD><E6B0AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? <20>?<3F>? <20>辳ab<61><62>捆<EFBFBD>箏<EFBFBD><E7AE8F>? <20>?<3F>? <20>?<3F>? <20>?<3F>? [<5B>𡝗<EFBFBD>] [<5B>扯<EFBFBD>憭<EFBFBD><E686AD>] <20>?<3F>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?```
|
||||
|
||||
### 3. Tab 2嚗<32>‵銵伐<E98AB5>霂衣<E99C82>霈曇恣
|
||||
|
||||
```
|
||||
┌───────────────────────────────────────────────────────┐
|
||||
│ 【Tab 2: 填补缺失值】 │
|
||||
│ │
|
||||
│ 原始列:[体重(kg)▼] │
|
||||
│ ⚠️ 仅支持单列填补 │
|
||||
│ │
|
||||
│ 新列名:[体重_填补 ] ← 用户可修改 │
|
||||
│ 💡 新列将创建在原列旁边,便于对比 │
|
||||
│ │
|
||||
│ 📊 缺失值统计: │
|
||||
│ ┌──────────────────────────────────────────────┐ │
|
||||
│ │ • 当前缺失:125个(15.6%) │ │
|
||||
│ │ • 有效值:675个(84.4%) │ │
|
||||
│ │ • 数据类型:数值型 │ │
|
||||
│ │ • 有效值范围:45.2 - 98.5 kg │ │
|
||||
│ │ • 有效值均值:70.3 kg │ │
|
||||
│ │ • 有效值中位数:68.5 kg │ │
|
||||
│ │ • 推荐方法:中位数填补(数据偏态)⭐ │ │
|
||||
│ └──────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 填补方法: │
|
||||
│ ⚪ 均值填补(适合正态分布的数值变量) │
|
||||
│ ⚪ 中位数填补(适合偏态分布的数值变量)⭐ │
|
||||
│ ⚪ 众数填补(适合分类变量或离散数值) │
|
||||
│ ⚪ 固定值填补:[_______] ← 用户输入 │
|
||||
│ ⚪ 前向填充(用前一个值填充,适合时间序列) │
|
||||
│ ⚪ 后向填充(用后一个值填充,适合时间序列) │
|
||||
│ │
|
||||
│ 📈 填补预览: │
|
||||
│ ┌──────────────────────────────────────────────┐ │
|
||||
│ │ • 填补值:68.5 kg │ │
|
||||
│ │ • 填补后均值:70.2 kg(原75.3 kg) │ │
|
||||
│ │ • 填补后标准差:12.5 kg(原10.8 kg) │ │
|
||||
│ │ • 将创建新列:"体重_填补" │ │
|
||||
│ │ • 原列"体重(kg)"保持不变 ✅ │ │
|
||||
│ └──────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ✅ 优势:原始数据保留,可随时对比验证 │
|
||||
│ │
|
||||
│ [取消] [执行填补] │
|
||||
└───────────────────────────────────────────────────────┘
|
||||
```
|
||||
<EFBFBD>𢞖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? <20>辳ab 2: 憛怨‘蝻箏仃<E7AE8F>潦<EFBFBD>? <20>?<3F>? <20>?<3F>? <20>笔<EFBFBD><E7AC94>梹<EFBFBD>[雿㯄<E99BBF>嚗ɑg嚗争䲰] <20>?<3F>? <20>𩤃<EFBFBD> 隞<>𣈲<EFBFBD><F0A388B2><EFBFBD><EFBFBD>堒‵銵? <20>?<3F>? <20>?<3F>? <20>啣<EFBFBD><E595A3>㵪<EFBFBD>[雿㯄<E99BBF>_憛怨‘ ] <20>?<3F>冽<EFBFBD><E586BD>臭耨<E887AD>? <20>?<3F>? <20>働 <20>啣<EFBFBD>撠<EFBFBD><E692A0>撱箏銁<E7AE8F>笔<EFBFBD><E7AC94><EFBFBD>器嚗䔶噶鈭𤾸笆瘥? <20>?<3F>? <20>?<3F>? <20><> 蝻箏仃<E7AE8F>潛<EFBFBD>霈∴<E99C88> <20>?<3F>? <20>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>? <20>?<3F>?敶枏<E695B6>蝻箏仃嚗?25銝迎<E98A9D>15.6%嚗? <20>? <20>?<3F>? <20>?<3F>?<3F>㗇<EFBFBD><E39787>潘<EFBFBD>675銝迎<E98A9D>84.4%嚗? <20>? <20>?<3F>? <20>?<3F>?<3F>唳旿蝐餃<E89D90>嚗𡁏㺭<F0A1818F>澆<EFBFBD> <20>? <20>?<3F>? <20>?<3F>?<3F>㗇<EFBFBD><E39787>潸<EFBFBD><E6BDB8>湛<EFBFBD>45.2 - 98.5 kg <20>? <20>?<3F>? <20>?<3F>?<3F>㗇<EFBFBD><E39787>澆<EFBFBD><E6BE86>潘<EFBFBD>70.3 kg <20>? <20>?<3F>? <20>?<3F>?<3F>㗇<EFBFBD><E39787>潔葉雿齿㺭嚗?8.5 kg <20>? <20>?<3F>? <20>?<3F>?<3F>刻<EFBFBD><E588BB>寞<EFBFBD>嚗帋葉雿齿㺭憛怨‘嚗<E28098>㺭<EFBFBD>桀<EFBFBD><E6A180><EFBFBD><EFBFBD>潃? <20>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>? <20>?<3F>? 憛怨‘<E680A8>寞<EFBFBD>嚗? <20>?<3F>? <20>?<3F><><EFBFBD>澆‵銵伐<E98AB5><E4BC90><EFBFBD><EFBFBD>甇<EFBFBD><E79487><EFBFBD><EFBFBD>撣<EFBFBD><E692A3><EFBFBD>啣<EFBFBD>澆<EFBFBD><E6BE86>𧶏<EFBFBD> <20>?<3F>? <20>?銝凋<E98A9D><E5878B>啣‵銵伐<E98AB5><E4BC90><EFBFBD><EFBFBD><EFBFBD>𤩺<EFBFBD><F0A4A9BA><EFBFBD>撣<EFBFBD><E692A3><EFBFBD>啣<EFBFBD>澆<EFBFBD><E6BE86>𧶏<EFBFBD>潃? <20>?<3F>? <20>?隡埈㺭憛怨‘嚗<E28098><E59A97><EFBFBD><EFBFBD><EFBFBD><EFBFBD>掩<EFBFBD>㗛<EFBFBD><E3979B>𣇉氖<F0A38789><E6B096>㺭<EFBFBD>潘<EFBFBD> <20>?<3F>? <20>?<3F>箏<EFBFBD><E7AE8F>澆‵銵伐<E98AB5>[_______] <20>?<3F>冽<EFBFBD>颲枏<E9A2B2> <20>?<3F>? <20>?<3F>滚<EFBFBD>憛怠<E6869B>嚗<EFBFBD>鍂<EFBFBD>滢<EFBFBD>銝芸<E98A9D>澆‵<E6BE86><E280B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>園𡢿摨誩<E691A8>嚗? <20>?<3F>? <20>?<3F>𤾸<EFBFBD>憛怠<E6869B>嚗<EFBFBD>鍂<EFBFBD>𦒘<EFBFBD>銝芸<E98A9D>澆‵<E6BE86><E280B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>園𡢿摨誩<E691A8>嚗? <20>?<3F>? <20>?<3F>? <20><> 憛怨‘憸<E28098><E686B8>嚗? <20>?<3F>? <20>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>? <20>?<3F>?憛怨‘<E680A8>潘<EFBFBD>68.5 kg <20>? <20>?<3F>? <20>?<3F>?憛怨‘<E680A8>𤾸<EFBFBD><F0A4BEB8>潘<EFBFBD>70.2 kg嚗<67><E59A97>75.3 kg嚗? <20>? <20>?<3F>? <20>?<3F>?憛怨‘<E680A8>擧<EFBFBD><E693A7><EFBFBD>榆嚗?2.5 kg嚗<67><E59A97>10.8 kg嚗? <20>? <20>?<3F>? <20>?<3F>?撠<><E692A0>撱箸鰵<E7AEB8>梹<EFBFBD>"雿㯄<E99BBF>_憛怨‘" <20>? <20>?<3F>? <20>?<3F>?<3F>笔<EFBFBD>"雿㯄<E99BBF>嚗ɑg嚗?靽脲<E99DBD>銝滚<E98A9D> <20>? <20>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>? <20>?<3F>? <20>?隡睃飵嚗𡁜<E59A97>憪𧢲㺭<F0A7A2B2>桐<EFBFBD><E6A190>辷<EFBFBD><E8BEB7>舫<EFBFBD><E888AB>嗅笆瘥娪<E798A5>霂? <20>?<3F>? <20>?<3F>? [<5B>𡝗<EFBFBD>] [<5B>扯<EFBFBD>憛怨‘] <20>?<3F>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?```
|
||||
|
||||
### 4. Tab 3嚗<33><E59A97>蝥批‵銵伐<E98AB5>霂衣<E99C82>霈曇恣
|
||||
|
||||
```
|
||||
┌───────────────────────────────────────────────────────┐
|
||||
│ 【Tab 3: 高级填补 - MICE多重插补】⭐ 必须实现 │
|
||||
│ │
|
||||
│ ⭐ MICE多重插补 │
|
||||
│ (Multivariate Imputation by Chained Equations) │
|
||||
│ │
|
||||
│ 选择要填补的列(可多选): │
|
||||
│ ┌──────────────────────────────────────────────┐ │
|
||||
│ │ ☑ 体重(kg) 缺失:125(15.6%) │ │
|
||||
│ │ ☑ 收缩压(mmHg) 缺失:82(10.3%) │ │
|
||||
│ │ ☐ BMI 缺失:3(0.4%) │ │
|
||||
│ │ ☐ 舒张压(mmHg) 缺失:0(0%) │ │
|
||||
│ └──────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 新列命名规则: │
|
||||
│ ☑ 自动命名:原列名 + "_MICE" │
|
||||
│ 示例:体重(kg) → 体重(kg)_MICE │
|
||||
│ 收缩压(mmHg) → 收缩压(mmHg)_MICE │
|
||||
│ │
|
||||
│ 参数设置: │
|
||||
│ 迭代次数:[10▼] (默认10次,范围5-50) │
|
||||
│ 随机种子:[42 ] (确保结果可重复) │
|
||||
│ │
|
||||
│ 📊 MICE说明: │
|
||||
│ ┌──────────────────────────────────────────────┐ │
|
||||
│ │ MICE会根据其他变量的值来预测缺失值。 │ │
|
||||
│ │ │ │
|
||||
│ │ ✅ 适用场景: │ │
|
||||
│ │ • 缺失率5%-30% │ │
|
||||
│ │ • 需要考虑变量间的相关性 │ │
|
||||
│ │ • 多个变量同时有缺失 │ │
|
||||
│ │ • 医学研究高质量填补的首选方法 ⭐ │ │
|
||||
│ │ │ │
|
||||
│ │ ⚠️ 注意: │ │
|
||||
│ │ • 计算时间较长(10万行约1分钟) │ │
|
||||
│ │ • 需要足够的有效样本(建议>50%有效) │ │
|
||||
│ │ • 新列将创建在各原列旁边,便于对比 │ │
|
||||
│ └──────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 💡 新列位置:每个新列紧邻其原列,便于逐列验证 │
|
||||
│ │
|
||||
│ [取消] [执行MICE填补] │
|
||||
└───────────────────────────────────────────────────────┘
|
||||
```
|
||||
<EFBFBD>𢞖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? <20>辳ab 3: 擃条漣憛怨‘ - MICE憭𡁻<E686AD><F0A181BB>坿‘<E59DBF>爗<EFBFBD> 敹<>◆摰䂿緵 <20>?<3F>? <20>?<3F>? 潃?MICE憭𡁻<E686AD><F0A181BB>坿‘ <20>?<3F>? 嚗㇈ultivariate Imputation by Chained Equations嚗? <20>?<3F>? <20>?<3F>? <20>㗇𥋘閬<F0A58B98>‵銵亦<E98AB5><E4BAA6>梹<EFBFBD><E6A2B9>臬<EFBFBD><E887AC>㚁<EFBFBD>嚗? <20>?<3F>? <20>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>? <20>?<3F>?雿㯄<E99BBF>嚗ɑg嚗? 蝻箏仃嚗?25嚗?5.6%嚗? <20>? <20>?<3F>? <20>?<3F>?<3F>嗥憬<E597A5>页<EFBFBD>mmHg嚗? 蝻箏仃嚗?2嚗?0.3%嚗? <20>? <20>?<3F>? <20>?<3F>?BMI 蝻箏仃嚗?嚗?.4%嚗? <20>? <20>?<3F>? <20>?<3F>?<3F>鍦<EFBFBD><E98DA6>页<EFBFBD>mmHg嚗? 蝻箏仃嚗?嚗?%嚗? <20>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>? <20>?<3F>? <20>啣<EFBFBD><E595A3>賢<EFBFBD>閫<EFBFBD><E996AB>嚗? <20>?<3F>? <20>?<3F>芸𢆡<E88AB8>賢<EFBFBD>嚗𡁜<E59A97><F0A1819C>堒<EFBFBD> + "_MICE" <20>?<3F>? 蝷箔<E89DB7>嚗帋<E59A97><E5B88B>㵪<EFBFBD>kg嚗?<3F>?雿㯄<E99BBF>嚗ɑg嚗夲MICE <20>?<3F>? <20>嗥憬<E597A5>页<EFBFBD>mmHg嚗?<3F>?<3F>嗥憬<E597A5>页<EFBFBD>mmHg嚗夲MICE <20>?<3F>? <20>?<3F>? <20><>㺭霈曄蔭嚗? <20>?<3F>? 餈凋誨甈⊥㺭嚗靀10<31>奭 嚗<><E59A97>霈?0甈∴<E79488><E288B4><EFBFBD>凒5-50嚗? <20>?<3F>? <20>𤩺㦤蝘滚<E89D98>嚗靀42 ] 嚗<>&靽萘<E99DBD><E89098>𨅯虾<F0A885AF>滚<EFBFBD>嚗? <20>?<3F>? <20>?<3F>? <20><> MICE霂湔<E99C82>嚗? <20>?<3F>? <20>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>? <20>?MICE隡𡁏覔<F0A1818F>桀<EFBFBD>隞硋<E99A9E><E7A18B>讐<EFBFBD><E8AE90>潭䔉憸<E49489><E686B8>蝻箏仃<E7AE8F>潦<EFBFBD>? <20>? <20>?<3F>? <20>? <20>? <20>?<3F>? <20>?<3F>?<3F><>鍂<EFBFBD>箸艶嚗? <20>? <20>?<3F>? <20>? <20>?蝻箏仃<E7AE8F>?%-30% <20>? <20>?<3F>? <20>? <20>?<3F><>閬<EFBFBD><E996AC><EFBFBD><EFBFBD><EFBFBD>㗛<EFBFBD><E3979B>渡<EFBFBD><E6B8A1>詨<EFBFBD><E8A9A8>? <20>? <20>?<3F>? <20>? <20>?憭帋葵<E5B88B>㗛<EFBFBD><E3979B>峕𧒄<E5B395>厩撩憭? <20>? <20>?<3F>? <20>? <20>?<3F>餃郎<E9A483>𠉛弦擃䁅捶<E48185>誩‵銵亦<E98AB5>擐㚚<E69390>㗇䲮瘜?潃? <20>? <20>?<3F>? <20>? <20>? <20>?<3F>? <20>?<3F>𩤃<EFBFBD> 瘜冽<E7989C>嚗? <20>? <20>?<3F>? <20>? <20>?霈∠<E99C88><E288A0>園𡢿颲<F0A1A2BF>鵭嚗?0銝<30><E98A9D>蝥?<3F><><EFBFBD>嚗? <20>? <20>?<3F>? <20>? <20>?<3F><>閬<EFBFBD>雲憭毺<E686AD><E6AFBA>㗇<EFBFBD><E39787>瑟𧋦嚗<F0A78BA6>遣霈?50%<25>㗇<EFBFBD>嚗? <20>? <20>?<3F>? <20>? <20>?<3F>啣<EFBFBD>撠<EFBFBD><E692A0>撱箏銁<E7AE8F><E98A81><EFBFBD><EFBFBD>埈<EFBFBD>颲對<E9A2B2>靘蹂<E99D98>撖寞<E69296> <20>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>? <20>?<3F>? <20>働 <20>啣<EFBFBD>雿滨蔭嚗𡁏<E59A97>銝芣鰵<E88AA3>㛖揮<E39B96>餃<EFBFBD><E9A483>笔<EFBFBD>嚗䔶噶鈭𡡞<E988AD>𣂼<EFBFBD>撉諹<E69289> <20>?<3F>? <20>?<3F>? [<5B>𡝗<EFBFBD>] [<5B>扯<EFBFBD>MICE憛怨‘] <20>?<3F>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?```
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 技术实现方案
|
||||
|
||||
### 1. Python端(extraction_service)
|
||||
|
||||
## <EFBFBD><EFBFBD>儭?<3F><><EFBFBD>臬<EFBFBD><E887AC>唳䲮獢?
|
||||
### 1. Python蝡荔<E89DA1>extraction_service嚗?
|
||||
#### <20>啣<EFBFBD><E595A3><EFBFBD>辣嚗䫤operations/fillna.py`
|
||||
|
||||
```python
|
||||
"""
|
||||
缺失值填补 - 预写函数
|
||||
蝻箏仃<EFBFBD>澆‵銵?- 憸<><E686B8><EFBFBD>賣㺭
|
||||
<EFBFBD>舀<EFBFBD><EFBFBD><EFBFBD><EFBFBD>潦<EFBFBD><EFBFBD>葉雿齿㺭<EFBFBD><EFBFBD><EFBFBD><EFBFBD>啜<EFBFBD><EFBFBD>𤐄摰𡁜<EFBFBD>潦<EFBFBD><EFBFBD>ICE憛怨‘
|
||||
"""
|
||||
|
||||
@@ -211,18 +79,12 @@ def fillna_simple(
|
||||
fill_value: Any = None
|
||||
) -> dict:
|
||||
"""
|
||||
简单填补缺失值(创建新列)
|
||||
|
||||
蝞<EFBFBD><EFBFBD>訫‵銵亦撩憭勗<EFBFBD>潘<EFBFBD><EFBFBD>𥕦遣<EFBFBD>啣<EFBFBD>嚗?
|
||||
Args:
|
||||
df: 输入数据框
|
||||
column: 原始列名
|
||||
new_column_name: 新列名(如"体重_填补")
|
||||
method: 填补方法
|
||||
- 'mean': 均值填补
|
||||
- 'median': 中位数填补
|
||||
- 'mode': 众数填补
|
||||
- 'constant': 固定值填补
|
||||
- 'ffill': 前向填充(用前一个非缺失值)
|
||||
df: 颲枏<EFBFBD><EFBFBD>唳旿獢? column: <20>笔<EFBFBD><E7AC94>堒<EFBFBD>
|
||||
new_column_name: <20>啣<EFBFBD><E595A3>㵪<EFBFBD>憒?雿㯄<E99BBF>_憛怨‘"嚗? method: 憛怨‘<E680A8>寞<EFBFBD>
|
||||
- 'mean': <20><><EFBFBD>澆‵銵? - 'median': 銝凋<E98A9D><E5878B>啣‵銵? - 'mode': 隡埈㺭憛怨‘
|
||||
- 'constant': <20>箏<EFBFBD><E7AE8F>澆‵銵? - 'ffill': <20>滚<EFBFBD>憛怠<E6869B>嚗<EFBFBD>鍂<EFBFBD>滢<EFBFBD>銝芷<E98A9D>蝻箏仃<E7AE8F>潘<EFBFBD>
|
||||
- 'bfill': <20>𤾸<EFBFBD>憛怠<E6869B>嚗<EFBFBD>鍂<EFBFBD>𦒘<EFBFBD>銝芷<E98A9D>蝻箏仃<E7AE8F>潘<EFBFBD>
|
||||
fill_value: <20>箏<EFBFBD><E7AE8F>潘<EFBFBD>method='constant'<EFBFBD>嗅<EFBFBD>憛恬<EFBFBD>
|
||||
|
||||
@@ -230,17 +92,16 @@ def fillna_simple(
|
||||
{
|
||||
'df': <20><>鉄<EFBFBD>啣<EFBFBD><E595A3><EFBFBD>㺭<EFBFBD>格<EFBFBD>嚗<EFBFBD>鰵<EFBFBD>㛖揮<E39B96>餃<EFBFBD><E9A483>梹<EFBFBD>,
|
||||
'stats': {
|
||||
'original_column': 原列名,
|
||||
'new_column': 新列名,
|
||||
'original_column': <EFBFBD>笔<EFBFBD><EFBFBD>?
|
||||
'new_column': <EFBFBD>啣<EFBFBD><EFBFBD>?
|
||||
'missing_before': 蝻箏仃<E7AE8F>圈<EFBFBD>,
|
||||
'fill_value': 填补的值,
|
||||
'mean_after': 填补后均值,
|
||||
'fill_value': 憛怨‘<EFBFBD><EFBFBD><EFBFBD>?
|
||||
'mean_after': 憛怨‘<EFBFBD>𤾸<EFBFBD><EFBFBD>?
|
||||
'std_after': 憛怨‘<E680A8>擧<EFBFBD><E693A7><EFBFBD>榆
|
||||
}
|
||||
}
|
||||
|
||||
实现细节:
|
||||
1. 复制原列数据
|
||||
摰䂿緵蝏<EFBFBD><EFBFBD>嚗? 1. 憭滚<E686AD><E6BB9A>笔<EFBFBD><E7AC94>唳旿
|
||||
2. <20>扯<EFBFBD>憛怨‘
|
||||
3. 雿輻鍂 df.insert() 撠<>鰵<EFBFBD>埈<EFBFBD><E59F88>亙<EFBFBD><E4BA99>笔<EFBFBD><E7AC94><EFBFBD>器
|
||||
4. 餈𥪜<E9A488><F0A5AA9C><EFBFBD>鉄<EFBFBD>啣<EFBFBD><E595A3><EFBFBD><EFBFBD><EFBFBD>湔㺭<E6B994>格<EFBFBD>
|
||||
@@ -251,20 +112,18 @@ def get_column_missing_stats(
|
||||
column: str
|
||||
) -> dict:
|
||||
"""
|
||||
获取列的缺失值统计信息
|
||||
|
||||
<EFBFBD>瑕<EFBFBD><EFBFBD>㛖<EFBFBD>蝻箏仃<EFBFBD>潛<EFBFBD>霈∩縑<EFBFBD>?
|
||||
Returns:
|
||||
{
|
||||
'missing_count': 蝻箏仃<E7AE8F>圈<EFBFBD>,
|
||||
'missing_rate': 缺失率,
|
||||
'valid_count': 有效值数量,
|
||||
'missing_rate': 蝻箏仃<EFBFBD>?
|
||||
'valid_count': <EFBFBD>㗇<EFBFBD><EFBFBD>潭㺭<EFBFBD>?
|
||||
'data_type': <20>唳旿蝐餃<E89D90>,
|
||||
'value_range': [min, max], # 隞<>㺭<EFBFBD>澆<EFBFBD>
|
||||
'mean': 均值, # 仅数值型
|
||||
'median': 中位数, # 仅数值型
|
||||
'mean': <EFBFBD><EFBFBD><EFBFBD>? # 隞<EFBFBD>㺭<EFBFBD>澆<EFBFBD>
|
||||
'median': 銝凋<EFBFBD><EFBFBD>? # 隞<EFBFBD>㺭<EFBFBD>澆<EFBFBD>
|
||||
'mode': 隡埈㺭,
|
||||
'recommended_method': 推荐的填补方法
|
||||
}
|
||||
'recommended_method': <EFBFBD>刻<EFBFBD><EFBFBD><EFBFBD>‵銵交䲮瘜? }
|
||||
"""
|
||||
|
||||
def fillna_mice(
|
||||
@@ -274,39 +133,28 @@ def fillna_mice(
|
||||
random_state: int = 42
|
||||
) -> dict:
|
||||
"""
|
||||
MICE多重插补(创建新列)⭐ 必须实现
|
||||
MICE憭𡁻<EFBFBD><EFBFBD>坿‘嚗<EFBFBD><EFBFBD>撱箸鰵<EFBFBD>梹<EFBFBD>潃?敹<>◆摰䂿緵
|
||||
|
||||
Args:
|
||||
df: 输入数据框
|
||||
columns: 要填补的列名列表(如["体重(kg)", "收缩压(mmHg)"])
|
||||
n_iterations: 迭代次数(默认10,范围5-50)
|
||||
random_state: 随机种子(默认42,确保结果可重复)
|
||||
|
||||
df: 颲枏<EFBFBD><EFBFBD>唳旿獢? columns: 閬<>‵銵亦<E98AB5><E4BAA6>堒<EFBFBD><E5A092>𡑒”嚗<E2809D><E59A97>["雿㯄<EFBFBD>嚗ɑg嚗?, "<EFBFBD>嗥憬<EFBFBD>页<EFBFBD>mmHg嚗?]嚗? n_iterations: 餈凋誨甈⊥㺭嚗<E3BAAD><E59A97>霈?0嚗諹<E59A97><E8ABB9>?-50嚗? random_state: <20>𤩺㦤蝘滚<E89D98>嚗<EFBFBD><E59A97>霈?2嚗𣬚&靽萘<E99DBD><E89098>𨅯虾<F0A885AF>滚<EFBFBD>嚗?
|
||||
Returns:
|
||||
{
|
||||
'df': <20><>鉄<EFBFBD><E98984><EFBFBD>㗇鰵<E39787>㛖<EFBFBD><E39B96>唳旿獢<E697BF><E78DA2>瘥譍葵<E8AD8D>啣<EFBFBD>蝝折<E89D9D><E68A98>嗅<EFBFBD><E59785>梹<EFBFBD>,
|
||||
'stats': {
|
||||
column: {
|
||||
'original_column': 原列名,
|
||||
'new_column': 新列名(原名_MICE),
|
||||
'original_column': <EFBFBD>笔<EFBFBD><EFBFBD>?
|
||||
'new_column': <EFBFBD>啣<EFBFBD><EFBFBD>㵪<EFBFBD><EFBFBD>笔<EFBFBD>_MICE嚗?
|
||||
'missing_before': 蝻箏仃<E7AE8F>圈<EFBFBD>,
|
||||
'filled_count': 憛怨‘<E680A8>圈<EFBFBD>,
|
||||
'mean_before': 填补前均值,
|
||||
'mean_after': 填补后均值
|
||||
}
|
||||
'mean_before': 憛怨‘<EFBFBD>滚<EFBFBD><EFBFBD>?
|
||||
'mean_after': 憛怨‘<EFBFBD>𤾸<EFBFBD><EFBFBD>? }
|
||||
}
|
||||
}
|
||||
|
||||
实现细节:
|
||||
1. 对所选列执行MICE填补
|
||||
2. 为每列创建新列(命名:原列名_MICE)
|
||||
3. 使用 df.insert() 将每个新列插入到其原列旁边
|
||||
4. 返回包含所有新列的完整数据框
|
||||
|
||||
示例:
|
||||
原列:体重(kg)、收缩压(mmHg)
|
||||
新列:体重(kg)_MICE、收缩压(mmHg)_MICE
|
||||
结果顺序:体重(kg)、体重(kg)_MICE、收缩压(mmHg)、收缩压(mmHg)_MICE、...
|
||||
摰䂿緵蝏<EFBFBD><EFBFBD>嚗? 1. 撖寞<E69296><E5AF9E>匧<EFBFBD><E58CA7>扯<EFBFBD>MICE憛怨‘
|
||||
2. 銝箸<EFBFBD><EFBFBD>堒<EFBFBD>撱箸鰵<EFBFBD>梹<EFBFBD><EFBFBD>賢<EFBFBD>嚗𡁜<EFBFBD><EFBFBD>堒<EFBFBD>_MICE嚗? 3. 雿輻鍂 df.insert() 撠<><E692A0>銝芣鰵<E88AA3>埈<EFBFBD><E59F88>亙<EFBFBD><E4BA99>嗅<EFBFBD><E59785>埈<EFBFBD>颲? 4. 餈𥪜<E9A488><F0A5AA9C><EFBFBD>鉄<EFBFBD><E98984><EFBFBD>㗇鰵<E39787>㛖<EFBFBD>摰峕㟲<E5B395>唳旿獢?
|
||||
蝷箔<EFBFBD>嚗? <20>笔<EFBFBD>嚗帋<E59A97><E5B88B>㵪<EFBFBD>kg嚗剹<E59A97><E589B9>𤣰蝻拙<E89DBB>嚗émHg嚗? <20>啣<EFBFBD>嚗帋<E59A97><E5B88B>㵪<EFBFBD>kg嚗夲MICE<43><45>𤣰蝻拙<E89DBB>嚗émHg嚗夲MICE
|
||||
蝏𤘪<EFBFBD>憿箏<EFBFBD>嚗帋<EFBFBD><EFBFBD>㵪<EFBFBD>kg嚗剹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㵪<EFBFBD>kg嚗夲MICE<EFBFBD><EFBFBD>𤣰蝻拙<EFBFBD>嚗émHg嚗剹<EFBFBD><EFBFBD>𤣰蝻拙<EFBFBD>嚗émHg嚗夲MICE<EFBFBD>?..
|
||||
"""
|
||||
```
|
||||
|
||||
@@ -317,19 +165,18 @@ def fillna_mice(
|
||||
|
||||
@app.post("/fillna-simple")
|
||||
async def operation_fillna_simple(request: FillnaSimpleRequest):
|
||||
"""简单填补缺失值"""
|
||||
"""蝞<EFBFBD><EFBFBD>訫‵銵亦撩憭勗<EFBFBD>?""
|
||||
|
||||
@app.post("/fillna-stats")
|
||||
async def get_fillna_stats(request: FillnaStatsRequest):
|
||||
"""获取列的缺失值统计"""
|
||||
"""<EFBFBD>瑕<EFBFBD><EFBFBD>㛖<EFBFBD>蝻箏仃<EFBFBD>潛<EFBFBD>霈?""
|
||||
|
||||
@app.post("/fillna-mice")
|
||||
async def operation_fillna_mice(request: FillnaMiceRequest):
|
||||
"""MICE憭𡁻<EFBFBD><EFBFBD>坿‘"""
|
||||
```
|
||||
|
||||
### 2. Node.js后端(backend)
|
||||
|
||||
### 2. Node.js<EFBFBD>𡒊垢嚗Ê̄ackend嚗?
|
||||
#### 靽格㺿<E6A0BC><E3BABF>辣嚗䫤services/QuickActionService.ts`
|
||||
|
||||
```typescript
|
||||
@@ -364,10 +211,8 @@ async getFillnaStats(request, reply)
|
||||
async handleFillnaMice(request, reply)
|
||||
```
|
||||
|
||||
### 3. 前端(frontend-v2)
|
||||
|
||||
#### 重命名文件
|
||||
- `DropnaDialog.tsx` → `MissingValueDialog.tsx`
|
||||
### 3. <EFBFBD>滨垢嚗Êrontend-v2嚗?
|
||||
#### <20>滚𦶢<E6BB9A>齿<EFBFBD>隞?- `DropnaDialog.tsx` <20>?`MissingValueDialog.tsx`
|
||||
|
||||
#### 靽格㺿<E6A0BC><E3BABF>辣嚗䫤MissingValueDialog.tsx`
|
||||
|
||||
@@ -380,29 +225,25 @@ interface MissingValueDialogProps {
|
||||
onSuccess: () => void;
|
||||
}
|
||||
|
||||
// 新增状态
|
||||
const [activeTab, setActiveTab] = useState<'delete' | 'fill' | 'mice'>('fill');
|
||||
// <EFBFBD>啣<EFBFBD><EFBFBD>嗆<EFBFBD>?const [activeTab, setActiveTab] = useState<'delete' | 'fill' | 'mice'>('fill');
|
||||
const [selectedColumn, setSelectedColumn] = useState<string>('');
|
||||
const [fillMethod, setFillMethod] = useState<'mean' | 'median' | 'mode' | 'constant' | 'ffill' | 'bfill'>('median');
|
||||
const [fillValue, setFillValue] = useState<any>(null);
|
||||
const [columnStats, setColumnStats] = useState<any>(null);
|
||||
|
||||
// Tab 1: 删除(保留原有逻辑)
|
||||
// Tab 2: 填补(新增)
|
||||
// Tab 1: <EFBFBD>𣳇膄嚗<EFBFBD><EFBFBD><EFBFBD>坔<EFBFBD><EFBFBD>厰<EFBFBD>餉<EFBFBD>嚗?// Tab 2: 憛怨‘嚗<E28098>鰵憓痹<E68693>
|
||||
// Tab 3: MICE嚗<45>鰵憓痹<E68693>
|
||||
```
|
||||
|
||||
#### 靽格㺿<E6A0BC><E3BABF>辣嚗䫤index.tsx`
|
||||
|
||||
```typescript
|
||||
// 更新按钮组
|
||||
const actionButtons = [
|
||||
// <EFBFBD>湔鰵<EFBFBD>厰僼蝏?const actionButtons = [
|
||||
// ...
|
||||
{
|
||||
key: 'missing',
|
||||
icon: <DeleteOutlined />,
|
||||
label: '缺失值处理', // ← 重命名
|
||||
onClick: () => setMissingValueDialogOpen(true),
|
||||
label: '蝻箏仃<EFBFBD>澆<EFBFBD><EFBFBD>?, // <20>?<3F>滚𦶢<E6BB9A>? onClick: () => setMissingValueDialogOpen(true),
|
||||
},
|
||||
// ...
|
||||
];
|
||||
@@ -414,12 +255,10 @@ const actionButtons = [
|
||||
|
||||
### <20>啣<EFBFBD><E595A3><EFBFBD>辣
|
||||
1. `extraction_service/operations/fillna.py` - 憛怨‘<E680A8>蠘<EFBFBD>摰䂿緵
|
||||
2. `docs/03-业务模块/DC-数据清洗整理/04-开发计划/工具C_缺失值处理功能开发计划.md` - 本文档
|
||||
|
||||
2. `docs/03-銝𡁜𦛚璅∪<EFBFBD>/DC-<2D>唳旿皜<E697BF><E79A9C><EFBFBD>渡<EFBFBD>/04-撘<><E69298>𤏸恣<F0A48FB8>?撌亙<E6928C>C_蝻箏仃<E7AE8F>澆<EFBFBD><E6BE86><EFBFBD><EFBFBD><EFBFBD>賢<EFBFBD><E8B3A2>𤏸恣<F0A48FB8>?md` - <EFBFBD>祆<EFBFBD>獢?
|
||||
### 靽格㺿<E6A0BC><E3BABF>辣
|
||||
|
||||
#### Python端
|
||||
1. `extraction_service/main.py`
|
||||
#### Python蝡?1. `extraction_service/main.py`
|
||||
- <20>啣<EFBFBD> `/fillna-simple` 蝡舐<E89DA1>
|
||||
- <20>啣<EFBFBD> `/fillna-stats` 蝡舐<E89DA1>
|
||||
- <20>啣<EFBFBD> `/fillna-mice` 蝡舐<E89DA1>
|
||||
@@ -438,13 +277,12 @@ const actionButtons = [
|
||||
#### <20>滨垢
|
||||
4. `frontend-v2/src/modules/dc/pages/tool-c/components/DropnaDialog.tsx`
|
||||
- **<2A>滚𦶢<E6BB9A>滢蛹** `MissingValueDialog.tsx`
|
||||
- 新增 Tabs 组件(删除/填补/高级填补)
|
||||
- Tab 1: 保留原有删除功能
|
||||
- Tab 2: 新增简单填补功能(均值/中位数/众数/固定值)
|
||||
- <EFBFBD>啣<EFBFBD> Tabs 蝏<EFBFBD>辣嚗<EFBFBD><EFBFBD><EFBFBD>?憛怨‘/擃条漣憛怨‘嚗? - Tab 1: 靽萘<E99DBD><E89098><EFBFBD><EFBFBD><EFBFBD>𣳇膄<F0A3B387>蠘<EFBFBD>
|
||||
- Tab 2: <EFBFBD>啣<EFBFBD>蝞<EFBFBD><EFBFBD>訫‵銵亙<EFBFBD><EFBFBD>踝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?銝凋<E98A9D><E5878B>?隡埈㺭/<2F>箏<EFBFBD><E7AE8F>潘<EFBFBD>
|
||||
- Tab 3: <20>啣<EFBFBD>MICE憛怨‘<E680A8>蠘<EFBFBD>
|
||||
|
||||
5. `frontend-v2/src/modules/dc/pages/tool-c/index.tsx`
|
||||
- 更新按钮标签:`删除缺失值` → `缺失值处理`
|
||||
- <EFBFBD>湔鰵<EFBFBD>厰僼<EFBFBD><EFBFBD>倌嚗䫤<EFBFBD>𣳇膄蝻箏仃<EFBFBD>嬋 <20>?`蝻箏仃<E7AE8F>澆<EFBFBD><E6BE86><EFBFBD>
|
||||
- <20>湔鰵 Dialog 蝏<>辣撘閧鍂
|
||||
|
||||
6. `frontend-v2/src/modules/dc/api/index.ts`
|
||||
@@ -454,51 +292,37 @@ const actionButtons = [
|
||||
|
||||
---
|
||||
|
||||
## 🔄 开发步骤
|
||||
|
||||
### Step 1: Python端基础功能(30min)
|
||||
1. 创建 `fillna.py`
|
||||
## <EFBFBD><EFBFBD> 撘<><E69298>烐郊撉?
|
||||
### Step 1: Python蝡臬抅蝖<E68A85><E89D96>蠘<EFBFBD>嚗?0min嚗?1. <20>𥕦遣 `fillna.py`
|
||||
2. 摰䂿緵 `fillna_simple` <20>賣㺭
|
||||
3. 摰䂿緵 `get_column_missing_stats` <20>賣㺭
|
||||
4. 在 `main.py` 添加对应端点
|
||||
4. <EFBFBD>?`main.py` 瘛餃<EFBFBD>撖孵<EFBFBD>蝡舐<EFBFBD>
|
||||
5. 瘚贝<E7989A>嚗帋蝙<E5B88B>沌ostman<61>鈪url瘚贝<E7989A>API
|
||||
|
||||
### Step 2: Python端高级功能(30min)
|
||||
1. 实现 `fillna_mice` 函数
|
||||
2. 在 `main.py` 添加对应端点
|
||||
### Step 2: Python蝡舫<EFBFBD>蝥批<EFBFBD><EFBFBD>踝<EFBFBD>30min嚗?1. 摰䂿緵 `fillna_mice` <20>賣㺭
|
||||
2. <EFBFBD>?`main.py` 瘛餃<E7989B>撖孵<E69296>蝡舐<E89DA1>
|
||||
3. 瘚贝<E7989A>嚗帋蝙<E5B88B>沌ostman瘚贝<E7989A>MICE<43>蠘<EFBFBD>
|
||||
|
||||
### Step 3: Node.js后端(20min)
|
||||
1. 修改 `QuickActionService.ts`
|
||||
### Step 3: Node.js<EFBFBD>𡒊垢嚗?0min嚗?1. 靽格㺿 `QuickActionService.ts`
|
||||
2. 靽格㺿 `QuickActionController.ts`
|
||||
3. 瘚贝<E7989A>嚗𡁶&靽𨆯PI頧砍<E9A0A7>甇<EFBFBD>虜
|
||||
|
||||
### Step 4: 前端UI重构(40min)
|
||||
1. 重命名 `DropnaDialog.tsx` → `MissingValueDialog.tsx`
|
||||
### Step 4: <EFBFBD>滨垢UI<EFBFBD>齿<EFBFBD>嚗?0min嚗?1. <20>滚𦶢<E6BB9A>?`DropnaDialog.tsx` <20>?`MissingValueDialog.tsx`
|
||||
2. 摰䂿緵Tabs蝏𤘪<E89D8F>
|
||||
3. Tab 1: 餈<>宏<EFBFBD><E5AE8F><EFBFBD><EFBFBD>𣳇膄<F0A3B387>蠘<EFBFBD>
|
||||
4. Tab 2: 摰䂿緵蝞<E7B7B5><E89D9E>訫‵銵冊I
|
||||
5. Tab 3: 摰䂿緵MICE憛怨‘UI
|
||||
6. 更新 `index.tsx` 中的引用和按钮标签
|
||||
|
||||
### Step 5: 前端API集成(20min)
|
||||
1. 在 `api/index.ts` 添加新API
|
||||
2. 集成到 `MissingValueDialog.tsx`
|
||||
6. <EFBFBD>湔鰵 `index.tsx` 銝剔<EFBFBD>撘閧鍂<EFBFBD>峕<EFBFBD><EFBFBD>格<EFBFBD>蝑?
|
||||
### Step 5: <20>滨垢API<50><49><EFBFBD>嚗?0min嚗?1. <20>?`api/index.ts` 瘛餃<E7989B><E9A483>蚊PI
|
||||
2. <20><><EFBFBD><EFBFBD>?`MissingValueDialog.tsx`
|
||||
3. 摰䂿緵摰墧𧒄蝏蠘恣<E8A098>瑕<EFBFBD>
|
||||
4. 摰䂿緵憛怨‘憸<E28098><E686B8>
|
||||
|
||||
### Step 6: 端到端测试(30min)
|
||||
1. 测试均值填补
|
||||
2. 测试中位数填补
|
||||
3. 测试众数填补
|
||||
4. 测试固定值填补
|
||||
5. 测试MICE填补
|
||||
6. 测试删除功能(确保未破坏原有功能)
|
||||
|
||||
### Step 7: 优化和文档(20min)
|
||||
1. 添加错误处理
|
||||
2. 优化加载状态
|
||||
3. 更新用户提示
|
||||
### Step 6: 蝡臬<EFBFBD>蝡舀<EFBFBD>霂𤏪<EFBFBD>30min嚗?1. 瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>澆‵銵?2. 瘚贝<E7989A>銝凋<E98A9D><E5878B>啣‵銵?3. 瘚贝<E7989A>隡埈㺭憛怨‘
|
||||
4. 瘚贝<EFBFBD><EFBFBD>箏<EFBFBD><EFBFBD>澆‵銵?5. 瘚贝<E7989A>MICE憛怨‘
|
||||
6. 瘚贝<EFBFBD><EFBFBD>𣳇膄<EFBFBD>蠘<EFBFBD>嚗<EFBFBD>&靽脲𧊋<EFBFBD>游<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蠘<EFBFBD>嚗?
|
||||
### Step 7: 隡睃<E99AA1><E79D83>峕<EFBFBD>獢<EFBFBD><E78DA2>20min嚗?1. 瘛餃<E7989B><E9A483>躰秤憭<E7A7A4><E686AD>
|
||||
2. 隡睃<E99AA1><E79D83>㰘蝸<E3B098>嗆<EFBFBD>?3. <20>湔鰵<E6B994>冽<EFBFBD><E586BD>鞟內
|
||||
4. 霈啣<E99C88>撘<EFBFBD><E69298>烐<EFBFBD>餌<EFBFBD>
|
||||
|
||||
**<EFBFBD>餉恣嚗𡁶漲3撠𤩺𧒄**
|
||||
@@ -511,174 +335,132 @@ const actionButtons = [
|
||||
|
||||
#### 瘚贝<E7989A><E8B49D>唳旿<E594B3><E697BF><EFBFBD>
|
||||
```
|
||||
- 数值列(正态分布):年龄(缺失15%)
|
||||
- 数值列(偏态分布):体重(缺失20%)
|
||||
- 分类列:婚姻状况(缺失10%)
|
||||
- 多列缺失:收缩压(15%)+ 舒张压(12%)
|
||||
- 时间序列列:随访血压(有顺序,缺失18%)- 用于测试前/后向填充
|
||||
- <EFBFBD>啣<EFBFBD>澆<EFBFBD>嚗<EFBFBD>迤<EFBFBD><EFBFBD><EFBFBD>撣<EFBFBD><EFBFBD>嚗𡁜僑樴<EFBFBD><EFBFBD>蝻箏仃15%嚗?- <20>啣<EFBFBD>澆<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD>撣<EFBFBD><E692A3>嚗帋<E59A97><E5B88B>㵪<EFBFBD>蝻箏仃20%嚗?- <20><>掩<EFBFBD>梹<EFBFBD>憍𡁜宏<F0A1819C>嗅<EFBFBD>嚗<EFBFBD>撩憭?0%嚗?- 憭𡁜<E686AD>蝻箏仃嚗𡁏𤣰蝻拙<E89DBB>嚗?5%嚗? <20>鍦<EFBFBD><E98DA6>页<EFBFBD>12%嚗?- <20>園𡢿摨誩<E691A8><E8AAA9>梹<EFBFBD><E6A2B9>讛挪銵<E68CAA><E98AB5>页<EFBFBD><E9A1B5>厰◇摨𧶏<E691A8>蝻箏仃18%嚗? <20>其<EFBFBD>瘚贝<E7989A><E8B49D>?<3F>𤾸<EFBFBD>憛怠<E6869B>
|
||||
```
|
||||
|
||||
#### 瘚贝<E7989A><E8B49D>其<EFBFBD>
|
||||
|
||||
| 蝻硋噡 | <20>蠘<EFBFBD> | 瘚贝<E7989A><E8B49D>箸艶 | 憸<><E686B8>蝏𤘪<E89D8F> |
|
||||
|------|------|----------|----------|
|
||||
| TC-1 | 均值填补 | 对"年龄"列使用均值填补,新列名"年龄_填补" | 创建新列,缺失值被均值填充,原列不变 ✅ |
|
||||
| TC-2 | 中位数填补 | 对"体重"列使用中位数填补 | 创建新列,缺失值被中位数填充 ✅ |
|
||||
| TC-3 | 众数填补 | 对"婚姻状况"列使用众数填补 | 创建新列,缺失值被众数填充 ✅ |
|
||||
| TC-4 | 固定值填补(数值) | 对"年龄"列填充固定值"0" | 创建新列,所有缺失值变为0 ✅ |
|
||||
| TC-5 | 固定值填补(文本) | 对"婚姻状况"列填充"未知" | 创建新列,所有缺失值变为"未知" ✅ |
|
||||
| TC-6 | MICE填补 | 选择"收缩压"+"舒张压",执行MICE | 创建2个新列(_MICE后缀),缺失值被预测 ✅ |
|
||||
| TC-7 | 新列位置验证 ⭐ | 对"列A"填补,查看新列位置 | 新列"列A_填补"紧邻原列"列A"右侧 ✅ |
|
||||
| TC-8 | MICE新列位置 ⭐ | 对"列A"+"列C"执行MICE | 列A_MICE在列A旁,列C_MICE在列C旁 ✅ |
|
||||
| TC-9 | 统计信息准确性 | 选择任意列,查看统计信息 | 显示正确的缺失数、均值、中位数等 |
|
||||
| TC-10 | 删除功能保留 | Tab 1删除缺失行 | 功能正常,与原功能一致 |
|
||||
| TC-11 | 空列处理 | 对完全无缺失的列执行填补 | 提示"该列无缺失值"或复制原列 |
|
||||
| TC-12 | 全缺失列处理 | 对全部缺失的列执行填补 | 提示警告,仍创建新列(全部为填补值) |
|
||||
| TC-13 | 重复新列名处理 | 新列名已存在 | 自动添加后缀(如"体重_填补_1")或提示 |
|
||||
| TC-14 | 原始数据保留 ⭐ | 填补后,检查原列 | 原列数据完全不变 ✅ |
|
||||
| TC-1 | <EFBFBD><EFBFBD><EFBFBD>澆‵銵?| 撖?撟湧<E6929F>"<22>𦯀蝙<F0A6AF80>典<EFBFBD><E585B8>澆‵銵伐<E98AB5><E4BC90>啣<EFBFBD><E595A3>?撟湧<E6929F>_憛怨‘" | <20>𥕦遣<F0A595A6>啣<EFBFBD>嚗𣬚撩憭勗<E686AD>潸◤<E6BDB8><E297A4><EFBFBD>澆‵<E6BE86><E280B5><EFBFBD><EFBFBD>笔<EFBFBD>銝滚<E98A9D> <20>?|
|
||||
| TC-2 | 銝凋<EFBFBD><EFBFBD>啣‵銵?| 撖?雿㯄<E99BBF>"<22>𦯀蝙<F0A6AF80>其葉雿齿㺭憛怨‘ | <20>𥕦遣<F0A595A6>啣<EFBFBD>嚗𣬚撩憭勗<E686AD>潸◤銝凋<E98A9D><E5878B>啣‵<E595A3>?<3F>?|
|
||||
| TC-3 | 隡埈㺭憛怨‘ | 撖?憍𡁜宏<F0A1819C>嗅<EFBFBD>"<22>𦯀蝙<F0A6AF80>其<EFBFBD><E585B6>啣‵銵?| <20>𥕦遣<F0A595A6>啣<EFBFBD>嚗𣬚撩憭勗<E686AD>潸◤隡埈㺭憛怠<E6869B> <20>?|
|
||||
| TC-4 | <EFBFBD>箏<EFBFBD><EFBFBD>澆‵銵伐<EFBFBD><EFBFBD>啣<EFBFBD>潘<EFBFBD> | 撖?撟湧<E6929F>"<22>堒‵<E5A092><E280B5>𤐄摰𡁜<E691B0>?0" | <20>𥕦遣<F0A595A6>啣<EFBFBD>嚗峕<E59A97><E5B395>厩撩憭勗<E686AD>澆<EFBFBD>銝? <20>?|
|
||||
| TC-5 | <EFBFBD>箏<EFBFBD><EFBFBD>澆‵銵伐<EFBFBD><EFBFBD><EFBFBD>𧋦嚗?| 撖?憍𡁜宏<F0A1819C>嗅<EFBFBD>"<22>堒‵<E5A092>?<3F>芰䰻" | <20>𥕦遣<F0A595A6>啣<EFBFBD>嚗峕<E59A97><E5B395>厩撩憭勗<E686AD>澆<EFBFBD>銝?<3F>芰䰻" <20>?|
|
||||
| TC-6 | MICE憛怨‘ | <20>㗇𥋘"<22>嗥憬<E597A5>?+"<22>鍦<EFBFBD><E98DA6>?嚗峕<E59A97>銵愢ICE | <20>𥕦遣2銝芣鰵<E88AA3>梹<EFBFBD>_MICE<43>𡒊<EFBFBD>嚗㚁<E59A97>蝻箏仃<E7AE8F>潸◤憸<E297A4><E686B8> <20>?|
|
||||
| TC-7 | <EFBFBD>啣<EFBFBD>雿滨蔭撉諹<EFBFBD> 潃?| 撖?<3F>嫎"憛怨‘嚗峕䰻<E5B395>𧢲鰵<F0A7A2B2>𦯀<EFBFBD>蝵?| <20>啣<EFBFBD>"<22>嫎_憛怨‘"蝝折<E89D9D><E68A98>笔<EFBFBD>"<22>嫎"<22>喃儒 <20>?|
|
||||
| TC-8 | MICE<EFBFBD>啣<EFBFBD>雿滨蔭 潃?| 撖?<3F>嫎"+"<22>䊼"<22>扯<EFBFBD>MICE | <EFBFBD>嫎_MICE<EFBFBD>典<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD>䊼_MICE<EFBFBD>典<EFBFBD>C<EFBFBD>?<3F>?|
|
||||
| TC-9 | 蝏蠘恣靽⊥<EFBFBD><EFBFBD><EFBFBD>&<EFBFBD>?| <20>㗇𥋘隞餅<E99A9E><E9A485>梹<EFBFBD><E6A2B9>亦<EFBFBD>蝏蠘恣靽⊥<E99DBD> | <20>曄內甇<E585A7>&<EFBFBD><EFBC86>撩憭望㺭<E69C9B><E3BAAD><EFBFBD><EFBFBD>潦<EFBFBD><E6BDA6>葉雿齿㺭蝑?|
|
||||
| TC-10 | <EFBFBD>𣳇膄<EFBFBD>蠘<EFBFBD>靽萘<EFBFBD> | Tab 1<>𣳇膄蝻箏仃銵?| <20>蠘<EFBFBD>甇<EFBFBD>虜嚗䔶<E59A97><E494B6>笔<EFBFBD><E7AC94>賭<EFBFBD><E8B3AD>?|
|
||||
| TC-11 | 蝛箏<EFBFBD>憭<EFBFBD><EFBFBD> | 撖孵<E69296><E5ADB5>冽<EFBFBD>蝻箏仃<E7AE8F><E4BB83><EFBFBD><EFBFBD>扯<EFBFBD>憛怨‘ | <20>鞟內"霂亙<E99C82><E4BA99>删撩憭勗<E686AD>?<3F>硋<EFBFBD><E7A18B>嗅<EFBFBD><E59785>?|
|
||||
| TC-12 | <EFBFBD>函撩憭勗<EFBFBD>憭<EFBFBD><EFBFBD> | 撖孵<E69296><E5ADB5>函撩憭梁<E686AD><E6A281>埈<EFBFBD>銵<EFBFBD>‵銵?| <20>鞟內霅血<E99C85>嚗䔶<E59A97><E494B6>𥕦遣<F0A595A6>啣<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>其蛹憛怨‘<E680A8>潘<EFBFBD> |
|
||||
| TC-13 | <EFBFBD>滚<EFBFBD><EFBFBD>啣<EFBFBD><EFBFBD>滚<EFBFBD><EFBFBD>?| <20>啣<EFBFBD><E595A3>滚歇摮睃銁 | <20>芸𢆡瘛餃<E7989B><E9A483>𡒊<EFBFBD>嚗<EFBFBD><E59A97>"雿㯄<E99BBF>_憛怨‘_1"嚗㗇<E59A97><E39787>鞟內 |
|
||||
| TC-14 | <EFBFBD>笔<EFBFBD><EFBFBD>唳旿靽萘<EFBFBD> 潃?| 憛怨‘<E680A8>𠬍<EFBFBD>璉<EFBFBD><E79289>亙<EFBFBD><E4BA99>?| <20>笔<EFBFBD><E7AC94>唳旿摰<E697BF><E691B0>銝滚<E98A9D> <20>?|
|
||||
|
||||
### 颲寧<E9A2B2>瘚贝<E7989A>
|
||||
|
||||
| 测试项 | 场景 | 预期 |
|
||||
| 瘚贝<EFBFBD>憿?| <20>箸艶 | 憸<><E686B8> |
|
||||
|--------|------|------|
|
||||
| 超大数据集 | 10万行数据执行MICE | 显示进度,不崩溃 |
|
||||
| 特殊字符列名 | 列名带括号、等号 | 正常处理(使用columnMapping) |
|
||||
| 数据类型混合 | 对文本列执行均值填补 | 提示错误或自动跳过 |
|
||||
| 并发处理 | 同时打开多个Dialog | 状态隔离,不互相影响 |
|
||||
| 頞<EFBFBD>之<EFBFBD>唳旿<EFBFBD>?| 10銝<30><E98A9D><EFBFBD>唳旿<E594B3>扯<EFBFBD>MICE | <20>曄內餈𥕦漲嚗䔶<E59A97>撏拇<E6928F> |
|
||||
| <EFBFBD>寞<EFBFBD>摮㛖泵<EFBFBD>堒<EFBFBD> | <20>堒<EFBFBD>撣行𡠺<E8A18C>瑯<EFBFBD><E791AF><EFBFBD><EFBFBD>?| 甇<>虜憭<E8999C><E686AD>嚗<EFBFBD>蝙<EFBFBD>牢olumnMapping嚗?|
|
||||
| <EFBFBD>唳旿蝐餃<EFBFBD>瘛瑕<EFBFBD> | 撖寞<E69296><E5AF9E>砍<EFBFBD><E7A08D>扯<EFBFBD><E689AF><EFBFBD><EFBFBD>澆‵銵?| <20>鞟內<E99E9F>躰秤<E8BAB0>𤥁䌊<F0A4A581>刻歲餈?|
|
||||
| 撟嗅<EFBFBD>憭<EFBFBD><EFBFBD> | <20>峕𧒄<E5B395>枏<EFBFBD>憭帋葵Dialog | <20>嗆<EFBFBD><E59786><EFBFBD>蝳鳴<E89DB3>銝滢<E98A9D><E6BBA2>詨蔣<E8A9A8>?|
|
||||
|
||||
---
|
||||
|
||||
## <20><> <20>扯<EFBFBD>閬<EFBFBD><E996AC>
|
||||
|
||||
| 操作 | 数据量 | 目标响应时间 |
|
||||
| <EFBFBD>滢<EFBFBD> | <20>唳旿<E594B3>?| <20>格<EFBFBD><E6A0BC>滚<EFBFBD><E6BB9A>園𡢿 |
|
||||
|------|--------|--------------|
|
||||
| 简单填补(均值/中位数/众数) | 1万行 | < 1秒 |
|
||||
| 简单填补 | 10万行 | < 5秒 |
|
||||
| MICE填补 | 1万行 | < 10秒 |
|
||||
| MICE填补 | 10万行 | < 60秒 |
|
||||
| 统计信息获取 | 任意 | < 0.5秒 |
|
||||
| 蝞<EFBFBD><EFBFBD>訫‵銵伐<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?銝凋<E98A9D><E5878B>?隡埈㺭嚗?| 1銝<31><E98A9D> | < 1蝘?|
|
||||
| 蝞<EFBFBD><EFBFBD>訫‵銵?| 10銝<EFBFBD><EFBFBD> | < 5蝘?|
|
||||
| MICE憛怨‘ | 1銝<EFBFBD><EFBFBD> | < 10蝘?|
|
||||
| MICE憛怨‘ | 10銝<EFBFBD><EFBFBD> | < 60蝘?|
|
||||
| 蝏蠘恣靽⊥<EFBFBD><EFBFBD>瑕<EFBFBD> | 隞餅<E99A9E> | < 0.5蝘?|
|
||||
|
||||
---
|
||||
|
||||
## 🚨 风险和注意事项
|
||||
## <EFBFBD>辶 憌𡡞埯<F0A1A19E>峕釣<E5B395>譍<EFBFBD>憿?
|
||||
### 1. <20>唳旿摰匧<E691B0> <20>?撌脰圾<E884B0>?- <20>?憛怨‘<E680A8>滢<EFBFBD><E6BBA2>𥕦遣<F0A595A6>啣<EFBFBD>嚗<EFBFBD><E59A97>憪𧢲㺭<F0A7A2B2>桀<EFBFBD><E6A180>其<EFBFBD><E585B6>?- <20>?<3F>啣<EFBFBD>蝝折<E89D9D><E68A98>笔<EFBFBD>嚗䔶噶鈭𤾸笆瘥娪<E798A5>霂?- <20>?<3F>𣳇<EFBFBD><F0A3B387>日<EFBFBD><E697A5>蠘<EFBFBD>嚗<EFBFBD><E59A97>憪𧢲㺭<F0A7A2B2>格𧊋鋡思耨<E6809D>對<EFBFBD>
|
||||
- <20>?<3F>冽<EFBFBD><E586BD>舫<EFBFBD><E888AB>嗅<EFBFBD><E59785>文‵銵亙<E98AB5><E4BA99><EFBFBD><EFBFBD>嚗峕<E59A97><E5B395>齿鰵憛怨‘
|
||||
|
||||
### 1. 数据安全 ✅ 已解决
|
||||
- ✅ 填补操作创建新列,原始数据完全保留
|
||||
- ✅ 新列紧邻原列,便于对比验证
|
||||
- ✅ 无需撤销功能(原始数据未被修改)
|
||||
- ✅ 用户可随时删除填补后的列,或重新填补
|
||||
|
||||
### 2. MICE性能 ⭐ 重点关注
|
||||
- ⚠️ MICE在大数据集上可能很慢(10万行约1分钟)
|
||||
- ✅ **必须显示进度条或加载动画**
|
||||
- ✅ 添加"预计耗时"提示(基于数据量估算)
|
||||
- ✅ 提供"取消执行"按钮(长时间任务)
|
||||
- 💡 优化建议:考虑使用Web Worker或后台任务队列
|
||||
|
||||
### 3. 数据类型兼容性
|
||||
- ⚠️ 均值/中位数只适用于数值列
|
||||
- ✅ 需要前端验证列的数据类型
|
||||
- ✅ 后端也需要校验并返回友好错误
|
||||
### 2. MICE<EFBFBD>扯<EFBFBD> 潃?<3F>滨<EFBFBD><E6BBA8>單釣
|
||||
- <EFBFBD>𩤃<EFBFBD> MICE<43>典之<E585B8>唳旿<E594B3><E697BF><EFBFBD><EFBFBD>航<EFBFBD>敺<EFBFBD><E695BA>嚗?0銝<30><E98A9D>蝥?<3F><><EFBFBD>嚗?- <20>?**敹<>◆<EFBFBD>曄內餈𥕦漲<F0A595A6>⊥<EFBFBD><E28AA5>㰘蝸<E3B098>函𤫇**
|
||||
- <EFBFBD>?瘛餃<E7989B>"憸<>恣<EFBFBD>埈𧒄"<22>鞟內嚗<E585A7>抅鈭擧㺭<E693A7>桅<EFBFBD>隡啁<E99AA1>嚗?- <20>?<3F>𣂷<EFBFBD>"<22>𡝗<EFBFBD><F0A19D97>扯<EFBFBD>"<22>厰僼嚗<E583BC>鵭<EFBFBD>園𡢿隞餃𦛚嚗?- <20>働 隡睃<E99AA1>撱箄悅嚗朞<E59A97><E69C9E><EFBFBD>雿輻鍂Web Worker<65>硋<EFBFBD><E7A18B>唬遙<E594AC>⊿<EFBFBD><E28ABF>?
|
||||
### 3. <20>唳旿蝐餃<E89D90><E9A483>澆捆<E6BE86>?- <20>𩤃<EFBFBD> <20><><EFBFBD>?銝凋<E98A9D><E5878B>啣蘨<E595A3><E898A8>鍂鈭擧㺭<E693A7>澆<EFBFBD>
|
||||
- <EFBFBD>?<3F><>閬<EFBFBD><E996AC>蝡舫<E89DA1>霂<EFBFBD><E99C82><EFBFBD><EFBFBD>㺭<EFBFBD>桃掩<E6A183>?- <20>?<3F>𡒊垢銋罸<E98A8B>閬<EFBFBD>嵗撉<E5B597>僎餈𥪜<E9A488><F0A5AA9C>见末<E8A781>躰秤
|
||||
|
||||
### 4. <20>堒<EFBFBD><E5A092>寞<EFBFBD>摮㛖泵
|
||||
- <20>𩤃<EFBFBD> <20>堒<EFBFBD><E5A092>航<EFBFBD><E888AA><EFBFBD>鉄<EFBFBD>寞<EFBFBD>摮㛖泵
|
||||
- ✅ 使用现有的 `columnMapping` 机制
|
||||
- ✅ 确保与compute列功能一致
|
||||
|
||||
- <EFBFBD>?雿輻鍂<E8BCBB>唳<EFBFBD><E594B3>?`columnMapping` <EFBFBD>箏<EFBFBD>
|
||||
- <EFBFBD>?蝖桐<E89D96>銝莜ompute<74>堒<EFBFBD><E5A092>賭<EFBFBD><E8B3AD>?
|
||||
### 5. <20>券<EFBFBD>蝻箏仃<E7AE8F><E4BB83><EFBFBD>
|
||||
- ⚠️ 如果列全部为空,均值/中位数为NaN
|
||||
- ✅ 需要特殊处理并提示用户
|
||||
- <EFBFBD>𩤃<EFBFBD> 憒<><E68692><EFBFBD>堒<EFBFBD><E5A092>其蛹蝛綽<E89D9B><E7B6BD><EFBFBD><EFBFBD>?銝凋<E98A9D><E5878B>唬蛹NaN
|
||||
- <EFBFBD>?<3F><>閬<EFBFBD>鸌畾𠰴<E795BE><F0A0B0B4><EFBFBD>僎<EFBFBD>鞟內<E99E9F>冽<EFBFBD>
|
||||
|
||||
---
|
||||
|
||||
## 📝 依赖项
|
||||
|
||||
## <EFBFBD><EFBFBD> 靘肽<E99D98>憿?
|
||||
### Python靘肽<E99D98>嚗<EFBFBD><E59A97>閬<EFBFBD>&霈歹<E99C88>
|
||||
```
|
||||
pandas >= 1.5.0
|
||||
numpy >= 1.23.0
|
||||
scikit-learn >= 1.2.0 # ← MICE需要
|
||||
```
|
||||
scikit-learn >= 1.2.0 # <EFBFBD>?MICE<EFBFBD><EFBFBD>閬?```
|
||||
|
||||
### <20>滨垢靘肽<E99D98>
|
||||
- 无新增依赖(使用现有的Ant Design组件)
|
||||
|
||||
- <20>䭾鰵憓硺<E68693>韏吔<E99F8F>雿輻鍂<E8BCBB>唳<EFBFBD><E594B3><EFBFBD>nt Design蝏<EFBFBD>辣嚗?
|
||||
---
|
||||
|
||||
## <20>㴓 撉峕𤣰<E5B395><F0A4A3B0><EFBFBD>
|
||||
|
||||
### 必须满足 ⭐
|
||||
1. ✅ **MICE功能完全实现**(非常重要!)
|
||||
2. ✅ **新列位置正确**(紧邻原列右侧)
|
||||
3. ✅ **原始数据完全保留**(填补不修改原列)
|
||||
4. ✅ 所有测试用例通过(特别是TC-7, TC-8, TC-14)
|
||||
5. ✅ 无Breaking Changes(原有删除功能不受影响)
|
||||
6. ✅ UI符合设计稿(3个Tab切换流畅)
|
||||
7. ✅ 代码通过Linter检查
|
||||
8. ✅ 添加适当的日志和错误处理
|
||||
9. ✅ MICE显示进度条或加载动画
|
||||
### 敹<EFBFBD>◆皛∟雲 潃?1. <20>?**MICE<43>蠘<EFBFBD>摰<EFBFBD><E691B0>摰䂿緵**嚗<><E59A97>撣賊<E692A3>閬<EFBFBD><E996AC>嚗?2. <20>?**<2A>啣<EFBFBD>雿滨蔭甇<E894AD>&**嚗<>揮<EFBFBD>餃<EFBFBD><E9A483>堒𢰧靘改<E99D98>
|
||||
3. <20>?**<2A>笔<EFBFBD><E7AC94>唳旿摰<E697BF><E691B0>靽萘<E99DBD>**嚗<>‵銵乩<E98AB5>靽格㺿<E6A0BC>笔<EFBFBD>嚗?4. <20>?<3F><><EFBFBD>㗇<EFBFBD>霂閧鍂靘钅<E99D98>朞<EFBFBD>嚗<EFBFBD>鸌<EFBFBD>急糓TC-7, TC-8, TC-14嚗?5. <20>?<3F>泎reaking Changes嚗<73><E59A97><EFBFBD>匧<EFBFBD><E58CA7>文<EFBFBD><E69687>賭<EFBFBD><E8B3AD>堒蔣<E5A092>㵪<EFBFBD>
|
||||
6. <20>?UI蝚血<E89D9A>霈曇恣蝔選<E89D94>3銝枚ab<61><62>揢瘚<E68FA2><E7989A>嚗?7. <20>?隞<><E99A9E><EFBFBD>朞<EFBFBD>Linter璉<72><E79289>?8. <20>?瘛餃<E7989B><E9A483><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𠯫敹堒<E695B9><E5A092>躰秤憭<E7A7A4><E686AD>
|
||||
9. <20>?MICE<43>曄內餈𥕦漲<F0A595A6>⊥<EFBFBD><E28AA5>㰘蝸<E3B098>函𤫇
|
||||
|
||||
### 加分项
|
||||
1. ⭐ 性能优于预期
|
||||
2. ⭐ UI动画流畅
|
||||
3. ⭐ 错误提示友好且具体
|
||||
4. ⭐ 添加单元测试
|
||||
### <EFBFBD>惩<EFBFBD>憿?1. 潃?<3F>扯<EFBFBD>隡䀝<E99AA1>憸<EFBFBD><E686B8>
|
||||
2. 潃?UI<55>函𤫇瘚<F0A4AB87><E7989A>
|
||||
3. 潃?<3F>躰秤<E8BAB0>鞟內<E99E9F>见末銝𥪜<E98A9D>雿?4. 潃?瘛餃<E7989B><E9A483>訫<EFBFBD>瘚贝<E7989A>
|
||||
|
||||
---
|
||||
|
||||
## 📅 时间估算(已更新)
|
||||
|
||||
## <EFBFBD><EFBFBD> <20>園𡢿隡啁<E99AA1>嚗<EFBFBD>歇<EFBFBD>湔鰵嚗?
|
||||
| <20>嗆挾 | 憸<>恣<EFBFBD>園𡢿 | 憭<>釣 |
|
||||
|------|----------|------|
|
||||
| Python后端 - 简单填补 | 40分钟 | fillna.py基础功能 |
|
||||
| Python后端 - MICE填补 ⭐ | 50分钟 | **必须实现**,包括sklearn集成 |
|
||||
| Python后端 - 新列插入逻辑 | 30分钟 | df.insert()实现,确保新列紧邻原列 |
|
||||
| Python<EFBFBD>𡒊垢 - 蝞<><E89D9E>訫‵銵?| 40<EFBFBD><EFBFBD><EFBFBD> | fillna.py<EFBFBD>箇<EFBFBD><EFBFBD>蠘<EFBFBD> |
|
||||
| Python<EFBFBD>𡒊垢 - MICE憛怨‘ 潃?| 50<EFBFBD><EFBFBD><EFBFBD> | **敹<EFBFBD>◆摰䂿緵**嚗<><E59A97><EFBFBD>毗klearn<EFBFBD><EFBFBD><EFBFBD> |
|
||||
| Python<EFBFBD>𡒊垢 - <20>啣<EFBFBD><E595A3>鍦<EFBFBD><E98DA6>餉<EFBFBD> | 30<EFBFBD><EFBFBD><EFBFBD> | df.insert()摰䂿緵嚗𣬚&靽脲鰵<EFBFBD>㛖揮<EFBFBD>餃<EFBFBD><EFBFBD>?|
|
||||
| Python - main.py蝡舐<E89DA1> | 20<32><30><EFBFBD> | <20>啣<EFBFBD>3銝服PI蝡舐<E89DA1> |
|
||||
| Node.js后端 | 20分钟 | 简单转发 |
|
||||
| Node.js<EFBFBD>𡒊垢 | 20<EFBFBD><EFBFBD><EFBFBD> | 蝞<><E89D9E>閗蓮<E99697>?|
|
||||
| <20>滨垢UI - Tab蝏𤘪<E89D8F> | 30<33><30><EFBFBD> | 3銝枚ab<61><62>揢 |
|
||||
| 前端UI - Tab 2(简单填补) | 40分钟 | 表单 + 统计 + 新列名输入 |
|
||||
| 前端UI - Tab 3(MICE) ⭐ | 40分钟 | 多选列 + 参数 + 进度条 |
|
||||
| <EFBFBD>滨垢UI - Tab 2嚗<EFBFBD><EFBFBD><EFBFBD>訫‵銵伐<EFBFBD> | 40<34><30><EFBFBD> | 銵典<E98AB5> + 蝏蠘恣 + <20>啣<EFBFBD><E595A3>滩<EFBFBD><E6BBA9>?|
|
||||
| <EFBFBD>滨垢UI - Tab 3嚗㇈ICE嚗?潃?| 40<34><30><EFBFBD> | 憭𡁻<E686AD>匧<EFBFBD> + <20><>㺭 + 餈𥕦漲<F0A595A6>?|
|
||||
| API<50><49><EFBFBD> | 30<33><30><EFBFBD> | <20>滨垢靚<E59EA2>鍂<EFBFBD>𡒊垢嚗<E59EA2><E59A97><EFBFBD><EFBFBD>鰵<EFBFBD>堒<EFBFBD> |
|
||||
| 瘚贝<E7989A> | 40<34><30><EFBFBD> | 14銝芣<E98A9D>霂閧鍂靘页<E99D98><E9A1B5>滨<EFBFBD>瘚贝<E7989A><E8B49D>啣<EFBFBD>雿滨蔭 |
|
||||
| 优化和文档 | 20分钟 | 错误处理 + 文档 |
|
||||
| **总计** | **约5-6小时** | **包含完整MICE实现** ⭐ |
|
||||
| 隡睃<EFBFBD><EFBFBD>峕<EFBFBD>獢?| 20<32><30><EFBFBD> | <20>躰秤憭<E7A7A4><E686AD> + <20><>﹝ |
|
||||
| **<EFBFBD>餉恣** | **蝥?-6撠𤩺𧒄** | **<EFBFBD><EFBFBD>鉄摰峕㟲MICE摰䂿緵** 潃?|
|
||||
|
||||
**说明**:
|
||||
- MICE是医学研究的核心需求,必须完整实现
|
||||
**霂湔<EFBFBD>**嚗?- MICE<43>臬龫摮衣<E691AE>蝛嗥<E89D9B><E597A5>詨<EFBFBD><E8A9A8><EFBFBD>瘙<EFBFBD><E79899>敹<EFBFBD>◆摰峕㟲摰䂿緵
|
||||
- <20>啣<EFBFBD><E595A3>鍦<EFBFBD><E98DA6>餉<EFBFBD><E9A489><EFBFBD>閬<EFBFBD><E996AC>蝏<EFBFBD><E89D8F><EFBFBD><EFBFBD><EFBFBD>蝖桐<E89D96>雿滨蔭甇<E894AD>&
|
||||
- 前端需要额外时间处理新列名输入和预览
|
||||
|
||||
- <20>滨垢<E6BBA8><E59EA2>閬<EFBFBD><E996AC>憭𡝗𧒄<F0A19D97>游<EFBFBD><E6B8B8><EFBFBD>鰵<EFBFBD>堒<EFBFBD>颲枏<E9A2B2><E69E8F>屸<EFBFBD>閫?
|
||||
---
|
||||
|
||||
## 📚 参考资料
|
||||
|
||||
### 缺失值填补理论
|
||||
- [sklearn.impute.IterativeImputer文档](https://scikit-learn.org/stable/modules/generated/sklearn.impute.IterativeImputer.html)
|
||||
## <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
### 蝻箏仃<E7AE8F>澆‵銵亦<E98AB5>霈?- [sklearn.impute.IterativeImputer<65><72>﹝](https://scikit-learn.org/stable/modules/generated/sklearn.impute.IterativeImputer.html)
|
||||
- [MICE蝞埈<E89D9E><E59F88>毺<EFBFBD>](https://www.jstatsoft.org/article/view/v045i03)
|
||||
|
||||
### 医学研究中的缺失值处理
|
||||
- 均值/中位数填补:最常用,简单快速
|
||||
- MICE:高质量研究首选,考虑变量间关系
|
||||
- 分组填补:不同人群特征差异大时使用
|
||||
|
||||
### <EFBFBD>餃郎<EFBFBD>𠉛弦銝剔<EFBFBD>蝻箏仃<EFBFBD>澆<EFBFBD><EFBFBD>?- <20><><EFBFBD>?銝凋<E98A9D><E5878B>啣‵銵伐<E98AB5><E4BC90><EFBFBD>撣貊鍂嚗𣬚<E59A97><F0A3AC9A>訫翰<E8A8AB>?- MICE嚗𡁻<E59A97>韐券<E99F90><E588B8>𠉛弦擐㚚<E69390>㚁<EFBFBD><E39A81><EFBFBD><EFBFBD><EFBFBD>㗛<EFBFBD><E3979B>游<EFBFBD>蝟?- <20><><EFBFBD>憛怨‘嚗帋<E59A97><E5B88B>䔶犖蝢斤鸌敺<E9B88C>榆撘<E6A686>之<EFBFBD>嗡蝙<E597A1>?
|
||||
---
|
||||
|
||||
## ✅ 开发前确认清单
|
||||
## <EFBFBD>?撘<><E69298>穃<EFBFBD>蝖株恕皜<E68195><E79A9C>
|
||||
|
||||
已确认事项 ✅:
|
||||
撌脩&霈支<EFBFBD>憿?<3F><><EFBFBD>
|
||||
|
||||
- [x] **MICE功能必须开发**(医学研究核心需求)✅
|
||||
- [x] **填补方式:创建新列**(保留原始数据)✅
|
||||
- [x] **新列位置:紧邻原列**(便于对比验证)✅
|
||||
- [x] **无需撤销功能**(原始数据未被修改)✅
|
||||
- [x] UI设计符合预期(3个Tab切换)✅
|
||||
- [x] **MICE<EFBFBD>蠘<EFBFBD>敹<EFBFBD>◆撘<EFBFBD><EFBFBD>?*嚗<>龫摮衣<E691AE>蝛嗆瓲敹<E793B2><E695B9>瘙<EFBFBD><E79899><EFBFBD>?- [x] **憛怨‘<E680A8>孵<EFBFBD>嚗𡁜<E59A97>撱箸鰵<E7AEB8>?*嚗<><E59A97><EFBFBD>坔<EFBFBD>憪𧢲㺭<F0A7A2B2>殷<EFBFBD><E6AEB7>?- [x] **<2A>啣<EFBFBD>雿滨蔭嚗𡁶揮<F0A181B6>餃<EFBFBD><E9A483>?*嚗<>噶鈭𤾸笆瘥娪<E798A5>霂<EFBFBD><E99C82><EFBFBD>?- [x] **<2A>𣳇<EFBFBD><F0A3B387>日<EFBFBD><E697A5>蠘<EFBFBD>**嚗<><E59A97>憪𧢲㺭<F0A7A2B2>格𧊋鋡思耨<E6809D>對<EFBFBD><E5B08D>?- [x] UI霈曇恣蝚血<E89D9A>憸<EFBFBD><E686B8>嚗?銝枚ab<61><62>揢嚗争<E59A97>
|
||||
- [x] <20>蠘<EFBFBD><E8A098><EFBFBD>凒<EFBFBD><E58792><EFBFBD>嚗㇊hase 1銝滚<E98A9D><E6BB9A>砍<EFBFBD>蝏<EFBFBD>‵銵乓<E98AB5><E4B993><EFBFBD><EFBFBD>潛<EFBFBD>嚗争<E59A97>
|
||||
- [x] 性能要求合理(MICE 10万行<60秒)✅
|
||||
- [x] 测试用例完整(14个测试用例)✅
|
||||
- [x] 时间估算可接受(约3-4小时)✅
|
||||
|
||||
## 🚀 准备开始开发
|
||||
- [x] <20>扯<EFBFBD>閬<EFBFBD><E996AC><EFBFBD><EFBFBD><EFBFBD>嚗㇈ICE 10銝<30><E98A9D><60蝘𡜐<E89D98><F0A19C90>?- [x] 瘚贝<E7989A><E8B49D>其<EFBFBD>摰峕㟲嚗?4銝芣<E98A9D>霂閧鍂靘页<E99D98><E9A1B5>?- [x] <20>園𡢿隡啁<E99AA1><E59581>舀𦻖<E88880>梹<EFBFBD>蝥?-4撠𤩺𧒄嚗争<E59A97>
|
||||
|
||||
## <20><> <20><><EFBFBD>撘<EFBFBD>憪见<E686AA><E8A781>?
|
||||
<EFBFBD><EFBFBD><EFBFBD>厩&霈斗<EFBFBD><EFBFBD>訫歇摰峕<EFBFBD>嚗屸<EFBFBD><EFBFBD>嗅虾隞亙<EFBFBD>憪见<EFBFBD><EFBFBD>踝<EFBFBD>
|
||||
|
||||
---
|
||||
@@ -687,49 +469,27 @@ scikit-learn >= 1.2.0 # ← MICE需要
|
||||
|
||||
### 2025-12-10 <20>湔鰵嚗<E9B0B5>鍂<EFBFBD>瑁<EFBFBD>瘙<EFBFBD><E79899>
|
||||
|
||||
**新增功能**:
|
||||
1. ✅ **前向/后向填充加入本次开发**(原计划在Phase 2)
|
||||
- 前向填充(Forward Fill):用前一个非缺失值填充
|
||||
- 后向填充(Backward Fill):用后一个非缺失值填充
|
||||
- 适用场景:时间序列数据、有顺序的观察数据
|
||||
**<EFBFBD>啣<EFBFBD><EFBFBD>蠘<EFBFBD>**嚗?1. <20>?**<2A>滚<EFBFBD>/<2F>𤾸<EFBFBD>憛怠<E6869B><E680A0>惩<EFBFBD><E683A9>祆活撘<E6B4BB><E69298>?*嚗<><E59A97>霈∪<E99C88><E288AA>沌hase 2嚗? - <20>滚<EFBFBD>憛怠<E6869B>嚗㇅orward Fill嚗㚁<E59A97><E39A81>典<EFBFBD>銝<EFBFBD>銝芷<E98A9D>蝻箏仃<E7AE8F>澆‵<E6BE86>? - <20>𤾸<EFBFBD>憛怠<E6869B>嚗㇂ackward Fill嚗㚁<E59A97><E39A81>典<EFBFBD>銝<EFBFBD>銝芷<E98A9D>蝻箏仃<E7AE8F>澆‵<E6BE86>? - <20><>鍂<EFBFBD>箸艶嚗𡁏𧒄<F0A1818F>游<EFBFBD><E6B8B8>埈㺭<E59F88>柴<EFBFBD><E69FB4><EFBFBD>憿箏<E686BF><E7AE8F><EFBFBD><EFBFBD>撖<EFBFBD>㺭<EFBFBD>?
|
||||
**敶勗<E695B6>**嚗?- Tab 2<>啣<EFBFBD>2銝芸‵銵仿<E98AB5>厰★嚗<E29885><E59A97>6蝘齿䲮瘜𤏪<E7989C>
|
||||
- Python<6F>賣㺭 `fillna_simple` <20>寞<EFBFBD><E5AF9E><EFBFBD>㺭<EFBFBD>啣<EFBFBD> `'ffill'` <20>?`'bfill'`
|
||||
- 瘚贝<E7989A><E8B49D>其<EFBFBD>隞?4銝芸<E98A9D><E88AB8>惩<EFBFBD>18銝?- 撘<><E69298>烐𧒄<E78390>港<EFBFBD>5-6撠𤩺𧒄憓𧼮<E68693><F0A7BCAE>?-7撠𤩺𧒄
|
||||
|
||||
**影响**:
|
||||
- Tab 2新增2个填补选项(共6种方法)
|
||||
- Python函数 `fillna_simple` 方法参数新增 `'ffill'` 和 `'bfill'`
|
||||
- 测试用例从14个增加到18个
|
||||
- 开发时间从5-6小时增加到6-7小时
|
||||
|
||||
**适用场景说明**:
|
||||
- 均值/中位数:适合独立观察的数值变量
|
||||
- 众数:适合分类变量
|
||||
- 固定值:用户自定义场景
|
||||
- **前向填充**:随访数据(如多次测量,用上次值填充)
|
||||
**<EFBFBD><EFBFBD>鍂<EFBFBD>箸艶霂湔<EFBFBD>**嚗?- <20><><EFBFBD>?銝凋<E98A9D><E5878B>堆<EFBFBD><E5A086><EFBFBD><EFBFBD><EFBFBD>祉<EFBFBD>閫<EFBFBD><E996AB><EFBFBD><EFBFBD>㺭<EFBFBD>澆<EFBFBD><E6BE86>?- 隡埈㺭嚗𡁻<E59A97><F0A181BB><EFBFBD><EFBFBD><EFBFBD>掩<EFBFBD>㗛<EFBFBD>
|
||||
- <20>箏<EFBFBD><E7AE8F>潘<EFBFBD><E6BD98>冽<EFBFBD><E586BD>芸<EFBFBD>銋匧㦤<E58CA7>?- **<2A>滚<EFBFBD>憛怠<E6869B>**嚗𡁻<E59A97>霈踵㺭<E8B8B5>殷<EFBFBD>憒<EFBFBD><E68692>甈⊥<E79488><E28AA5>𧶏<EFBFBD><F0A7B68F>其<EFBFBD>甈∪<E79488>澆‵<E6BE86><E280B5><EFBFBD>
|
||||
- **<2A>𤾸<EFBFBD>憛怠<E6869B>**嚗𡁻<E59A97>瘚𧢲<E7989A>扳㺭<E689B3>殷<EFBFBD><E6AEB7>冽𧊋<E586BD>亙歇<E4BA99>亙<EFBFBD>澆‵<E6BE86><E280B5><EFBFBD>
|
||||
- MICE:需要考虑变量间关系的高质量填补
|
||||
|
||||
- MICE嚗𡁻<EFBFBD>閬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗛<EFBFBD><EFBFBD>游<EFBFBD>蝟餌<EFBFBD>擃䁅捶<EFBFBD>誩‵銵?
|
||||
---
|
||||
|
||||
### 2025-12-09 <20>湔鰵嚗<E9B0B5>覔<EFBFBD>桃鍂<E6A183>瑞&霈歹<E99C88>
|
||||
|
||||
**核心变更**:
|
||||
1. ✅ **MICE功能必须实现**(医学研究核心需求)
|
||||
2. ✅ **填补方式改为创建新列**(保留原始数据)
|
||||
3. ✅ **新列位置:紧邻原列右侧**(便于对比验证)
|
||||
4. ✅ **取消撤销功能**(原始数据未被修改,无需撤销)
|
||||
|
||||
**影响**:
|
||||
- Python函数签名新增 `new_column_name` 参数
|
||||
- UI新增"新列名"输入框
|
||||
- 实现逻辑使用 `df.insert()` 确保位置正确
|
||||
- 测试用例新增新列位置验证(TC-7, TC-8)
|
||||
- 开发时间从3小时增加到5-6小时(MICE+新列逻辑)
|
||||
|
||||
**优势**:
|
||||
- ✅ 原始数据完全保留,数据安全性更高
|
||||
- ✅ 新旧数据并列显示,便于验证填补效果
|
||||
- ✅ 用户可多次尝试不同填补方法对比
|
||||
- ✅ 符合医学研究的严谨性要求
|
||||
|
||||
**<EFBFBD>詨<EFBFBD><EFBFBD>䀹凒**嚗?1. <20>?**MICE<43>蠘<EFBFBD>敹<EFBFBD>◆摰䂿緵**嚗<>龫摮衣<E691AE>蝛嗆瓲敹<E793B2><E695B9>瘙<EFBFBD><E79899>
|
||||
2. <20>?**憛怨‘<E680A8>孵<EFBFBD><E5ADB5>嫣蛹<E5ABA3>𥕦遣<F0A595A6>啣<EFBFBD>**嚗<><E59A97><EFBFBD>坔<EFBFBD>憪𧢲㺭<F0A7A2B2>殷<EFBFBD>
|
||||
3. <20>?**<2A>啣<EFBFBD>雿滨蔭嚗𡁶揮<F0A181B6>餃<EFBFBD><E9A483>堒𢰧靘?*嚗<>噶鈭𤾸笆瘥娪<E798A5>霂<EFBFBD><E99C82>
|
||||
4. <20>?**<2A>𡝗<EFBFBD><F0A19D97>日<EFBFBD><E697A5>蠘<EFBFBD>**嚗<><E59A97>憪𧢲㺭<F0A7A2B2>格𧊋鋡思耨<E6809D>對<EFBFBD><E5B08D>𣳇<EFBFBD><F0A3B387>日<EFBFBD>嚗?
|
||||
**敶勗<E695B6>**嚗?- Python<6F>賣㺭蝑曉<E89D91><E69B89>啣<EFBFBD> `new_column_name` <20><>㺭
|
||||
- UI<55>啣<EFBFBD>"<22>啣<EFBFBD><E595A3>?颲枏<E9A2B2>獢?- 摰䂿緵<E482BF>餉<EFBFBD>雿輻鍂 `df.insert()` 蝖桐<E89D96>雿滨蔭甇<E894AD>&
|
||||
- 瘚贝<E7989A><E8B49D>其<EFBFBD><E585B6>啣<EFBFBD><E595A3>啣<EFBFBD>雿滨蔭撉諹<E69289>嚗㇍C-7, TC-8嚗?- 撘<><E69298>烐𧒄<E78390>港<EFBFBD>3撠𤩺𧒄憓𧼮<E68693><F0A7BCAE>?-6撠𤩺𧒄嚗㇈ICE+<2B>啣<EFBFBD><E595A3>餉<EFBFBD>嚗?
|
||||
**隡睃飵**嚗?- <20>?<3F>笔<EFBFBD><E7AC94>唳旿摰<E697BF><E691B0>靽萘<E99DBD>嚗峕㺭<E5B395>桀<EFBFBD><E6A180>冽<EFBFBD>扳凒擃?- <20>?<3F>唳唂<E594B3>唳旿撟嗅<E6929F><E59785>曄內嚗䔶噶鈭𡡞<E988AD>霂<EFBFBD>‵銵交<E98AB5><E4BAA4>?- <20>?<3F>冽<EFBFBD><E586BD>臬<EFBFBD>甈∪<E79488>霂蓥<E99C82><E893A5><EFBFBD>‵銵交䲮瘜訫笆瘥?- <20>?蝚血<E89D9A><E8A180>餃郎<E9A483>𠉛弦<F0A0899B><E5BCA6>艇靚冽<E99D9A>扯<EFBFBD>瘙?
|
||||
---
|
||||
|
||||
**撌脩&霈歹<E99C88><E6ADB9><EFBFBD><EFBFBD>撘<EFBFBD>憪见<E686AA><E8A781>𡢅<EFBFBD>** <20><>
|
||||
|
||||
Reference in New Issue
Block a user