feat(admin): Add user management and upgrade to module permission system
Features - User Management (Phase 4.1): - Database: Add user_modules table for fine-grained module permissions - Database: Add 4 user permissions (view/create/edit/delete) to role_permissions - Backend: UserService (780 lines) - CRUD with tenant isolation - Backend: UserController + UserRoutes (648 lines) - 13 API endpoints - Backend: Batch import users from Excel - Frontend: UserListPage (412 lines) - list/filter/search/pagination - Frontend: UserFormPage (341 lines) - create/edit with module config - Frontend: UserDetailPage (393 lines) - details/tenant/module management - Frontend: 3 modal components (592 lines) - import/assign/configure - API: GET/POST/PUT/DELETE /api/admin/users/* endpoints Architecture Upgrade - Module Permission System: - Backend: Add getUserModules() method in auth.service - Backend: Login API returns modules array in user object - Frontend: AuthContext adds hasModule() method - Frontend: Navigation filters modules based on user.modules - Frontend: RouteGuard checks requiredModule instead of requiredVersion - Frontend: Remove deprecated version-based permission system - UX: Only show accessible modules in navigation (clean UI) - UX: Smart redirect after login (avoid 403 for regular users) Fixes: - Fix UTF-8 encoding corruption in ~100 docs files - Fix pageSize type conversion in userService (String to Number) - Fix authUser undefined error in TopNavigation - Fix login redirect logic with role-based access check - Update Git commit guidelines v1.2 with UTF-8 safety rules Database Changes: - CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled) - ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code) - INSERT 4 permissions + role assignments - UPDATE PUBLIC tenant with 8 module subscriptions Technical: - Backend: 5 new files (~2400 lines) - Frontend: 10 new files (~2500 lines) - Docs: 1 development record + 2 status updates + 1 guideline update - Total: ~4900 lines of code Status: User management 100% complete, module permission system operational
This commit is contained in:
@@ -1,83 +1,111 @@
|
||||
# 蝻箏仃<EFBFBD>澆<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?- 撘<><E69298>穃<EFBFBD><E7A983>鞱秩<E99EB1>?
|
||||
**撘<><E69298>烐𠯫<E78390>?*: 2025-12-10
|
||||
**<EFBFBD>嗆<EFBFBD>?*: <20>?**撘<><E69298>穃<EFBFBD><E7A983>琜<EFBFBD>敺<EFBFBD><E695BA>霂?*
|
||||
# 缺失值处理功能 - 开发完成说明
|
||||
|
||||
**开发日期**: 2025-12-10
|
||||
**状态**: ✅ **开发完成,待测试**
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>𣑐 撌脣<E6928C><E884A3>鞟<EFBFBD>撘<EFBFBD><E69298>睲遙<E79DB2>?
|
||||
### 1. Python<6F>𡒊垢 (100% <20>?
|
||||
## 📦 已完成的开发任务
|
||||
|
||||
### 1. Python后端 (100% ✅)
|
||||
|
||||
#### 文件: `extraction_service/operations/fillna.py`
|
||||
- <EFBFBD>?`fillna_simple()` - 6蝘滨<EFBFBD><EFBFBD>訫‵銵交䲮瘜? - mean嚗<6E><E59A97><EFBFBD>潘<EFBFBD>
|
||||
- median嚗<EFBFBD>葉雿齿㺭嚗? - mode嚗<65><E59A97><EFBFBD>堆<EFBFBD>
|
||||
- ✅ `fillna_simple()` - 6种简单填补方法
|
||||
- mean(均值)
|
||||
- median(中位数)
|
||||
- mode(众数)
|
||||
- constant(固定值)
|
||||
- **ffill嚗<EFBFBD><EFBFBD><EFBFBD>穃‵<EFBFBD><EFBFBD><EFBFBD>潃?*
|
||||
- **bfill嚗<EFBFBD><EFBFBD><EFBFBD>穃‵<EFBFBD><EFBFBD><EFBFBD>潃?*
|
||||
- <EFBFBD>?`get_column_missing_stats()` - 蝻箏仃<EFBFBD>潛<EFBFBD>霈?- <20>?`fillna_mice()` - MICE憭𡁻<E686AD><F0A181BB>坿‘ 潃?
|
||||
**<2A>喲睸<E596B2>寞<EFBFBD>?*:
|
||||
- <20>?<3F><><EFBFBD>匧‵銵交䲮瘜閖<E7989C><E99696>𥕦遣<F0A595A6>啣<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>游<EFBFBD><E6B8B8><EFBFBD>㺭<EFBFBD>殷<EFBFBD>
|
||||
- <20>?<3F>啣<EFBFBD><E595A3>芸𢆡<E88AB8>鍦<EFBFBD><E98DA6>啣<EFBFBD><E595A3>埈<EFBFBD>颲?- <20>?<3F>芸𢆡<E88AB8>唳旿蝐餃<E89D90>璉<EFBFBD>瘚见<E7989A><E8A781>刻<EFBFBD><E588BB>寞<EFBFBD>
|
||||
- <EFBFBD>?摰<><E691B0><EFBFBD><EFBFBD><EFBFBD>霂臬<E99C82><E887AC>?
|
||||
- **ffill(前向填充)⭐**
|
||||
- **bfill(后向填充)⭐**
|
||||
- ✅ `get_column_missing_stats()` - 缺失值统计
|
||||
- ✅ `fillna_mice()` - MICE多重插补 ⭐
|
||||
|
||||
**关键特性**:
|
||||
- ✅ 所有填补方法都创建新列(不破坏原数据)
|
||||
- ✅ 新列自动插入到原列旁边
|
||||
- ✅ 自动数据类型检测和推荐方法
|
||||
- ✅ 完善的错误处理
|
||||
|
||||
#### 文件: `extraction_service/main.py`
|
||||
- <EFBFBD>?<3F>啣<EFBFBD>3銝服PI蝡舐<E89DA1>:
|
||||
- ✅ 新增3个API端点:
|
||||
- `POST /api/operations/fillna-stats` - 获取统计
|
||||
- `POST /api/operations/fillna-simple` - 蝞<EFBFBD><EFBFBD>訫‵銵? - `POST /api/operations/fillna-mice` - MICE憛怨‘
|
||||
- <EFBFBD>?Pydantic璅∪<E79285>撉諹<E69289>
|
||||
- <EFBFBD>?<3F>亙<EFBFBD>霈啣<E99C88>
|
||||
- `POST /api/operations/fillna-simple` - 简单填补
|
||||
- `POST /api/operations/fillna-mice` - MICE填补
|
||||
- ✅ Pydantic模型验证
|
||||
- ✅ 日志记录
|
||||
|
||||
---
|
||||
|
||||
### 2. Node.js<EFBFBD>𡒊垢 (100% <EFBFBD>?
|
||||
### 2. Node.js后端 (100% ✅)
|
||||
|
||||
#### 文件: `backend/src/modules/dc/tool-c/services/QuickActionService.ts`
|
||||
- <EFBFBD>?<3F>啣<EFBFBD><E595A3>亙藁:
|
||||
- ✅ 新增接口:
|
||||
- `FillnaSimpleParams`
|
||||
- `FillnaMiceParams`
|
||||
- <EFBFBD>?<3F>啣<EFBFBD><E595A3>寞<EFBFBD>:
|
||||
- ✅ 新增方法:
|
||||
- `getFillnaStats()` - 调用Python获取统计
|
||||
- `executeFillnaSimple()` - 靚<EFBFBD>鍂Python<EFBFBD>扯<EFBFBD>蝞<EFBFBD><EFBFBD>訫‵銵? - `executeFillnaMice()` - 靚<>鍂Python<6F>扯<EFBFBD>MICE憛怨‘
|
||||
- `executeFillnaSimple()` - 调用Python执行简单填补
|
||||
- `executeFillnaMice()` - 调用Python执行MICE填补
|
||||
|
||||
#### 文件: `backend/src/modules/dc/tool-c/controllers/QuickActionController.ts`
|
||||
- <EFBFBD>?<3F>啣<EFBFBD>3銝芸<E98A9D><E88AB8><EFBFBD>䲮瘜?
|
||||
- ✅ 新增3个处理方法:
|
||||
- `handleGetFillnaStats()` - 获取统计
|
||||
- `handleFillnaSimple()` - 蝞<EFBFBD><EFBFBD>訫‵銵? - `handleFillnaMice()` - MICE憛怨‘
|
||||
- `handleFillnaSimple()` - 简单填补
|
||||
- `handleFillnaMice()` - MICE填补
|
||||
|
||||
#### 文件: `backend/src/modules/dc/tool-c/routes/index.ts`
|
||||
- <EFBFBD>?<3F>啣<EFBFBD>3銝芾楝<E88ABE>?
|
||||
- ✅ 新增3个路由:
|
||||
- `POST /fillna/stats`
|
||||
- `POST /fillna/simple`
|
||||
- `POST /fillna/mice`
|
||||
|
||||
---
|
||||
|
||||
### 3. React<EFBFBD>滨垢 (100% <EFBFBD>?
|
||||
### 3. React前端 (100% ✅)
|
||||
|
||||
#### 文件: `frontend-v2/src/modules/dc/pages/tool-c/components/MissingValueDialog.tsx`
|
||||
- <EFBFBD>?<3F>冽鰵<E586BD><E9B0B5>ab<61>屸𢒰霈曇恣
|
||||
- **Tab 1 - <EFBFBD>𣳇膄**: <20>𣳇膄<F0A3B387>怎撩憭勗<E686AD>潛<EFBFBD>銵?<3F>? - **Tab 2 - 憛怨‘**: 6蝘滨<EFBFBD><EFBFBD>訫‵銵交䲮瘜𤏪<EFBFBD><EFBFBD>怠<EFBFBD><EFBFBD>?<3F>𤾸<EFBFBD>憛怠<E6869B>嚗? - **Tab 3 - 擃条漣憛怨‘**: MICE憭𡁻<E686AD><F0A181BB>坿‘
|
||||
- <EFBFBD>?摰墧𧒄蝏蠘恣靽⊥<E99DBD>撅閧內
|
||||
- <EFBFBD>?<3F>箄<EFBFBD><E7AE84>刻<EFBFBD>憛怨‘<E680A8>寞<EFBFBD>
|
||||
- <EFBFBD>?摰峕㟲<E5B395><E39FB2>”<EFBFBD>閖<EFBFBD>霂?- <20>?<3F>冽<EFBFBD><E586BD>见末<E8A781><E69CAB><EFBFBD>霂舀<E99C82>蝷?
|
||||
- ✅ 全新的Tab界面设计
|
||||
- **Tab 1 - 删除**: 删除含缺失值的行/列
|
||||
- **Tab 2 - 填补**: 6种简单填补方法(含前向/后向填充)
|
||||
- **Tab 3 - 高级填补**: MICE多重插补
|
||||
- ✅ 实时统计信息展示
|
||||
- ✅ 智能推荐填补方法
|
||||
- ✅ 完整的表单验证
|
||||
- ✅ 用户友好的错误提示
|
||||
|
||||
#### 文件: `frontend-v2/src/modules/dc/pages/tool-c/index.tsx`
|
||||
- <EFBFBD>?<3F>湔鰵撘閧鍂: `DropnaDialog` <EFBFBD>?`MissingValueDialog`
|
||||
- ✅ 更新引用: `DropnaDialog` → `MissingValueDialog`
|
||||
|
||||
---
|
||||
|
||||
## 🎯 功能亮点
|
||||
|
||||
### 1. <EFBFBD>餃郎<EFBFBD>𠉛弦銝梶鍂 - MICE憭𡁻<E686AD><F0A181BB>坿‘ 潃?- 擃䁅捶<E48185>誩‵銵伐<E98AB5><E4BC90><EFBFBD><EFBFBD><EFBFBD>㗛<EFBFBD><E3979B>渡㮾<E6B8A1>單<EFBFBD>?- <20><><EFBFBD>蝻箏仃<E7AE8F>?%-30%<25><>㦤<EFBFBD>?- <20>餃郎霈箸<E99C88>霈文虾<E69687><E899BE>䲮瘜?
|
||||
### 2. <20>園𡢿摨誩<E691A8><E8AAA9>舀<EFBFBD> - <20>滚<EFBFBD>/<2F>𤾸<EFBFBD>憛怠<E6869B> 潃?- <20>滚<EFBFBD>憛怠<E6869B>嚗Êfill嚗㚁<E59A97><E39A81>典<EFBFBD>銝<EFBFBD>銝芸<E98A9D>澆‵<E6BE86>?- <20>𤾸<EFBFBD>憛怠<E6869B>嚗Ê̄fill嚗㚁<E59A97><E39A81>典<EFBFBD>銝<EFBFBD>銝芸<E98A9D>澆‵<E6BE86>?- <20><><EFBFBD><EFBFBD>園𡢿摨誩<E691A8><E8AAA9>唳旿
|
||||
### 1. 医学研究专用 - MICE多重插补 ⭐
|
||||
- 高质量填补,考虑变量间相关性
|
||||
- 适合缺失率5%-30%的场景
|
||||
- 医学论文认可的方法
|
||||
|
||||
### 2. 时间序列支持 - 前向/后向填充 ⭐
|
||||
- 前向填充(ffill):用前一个值填充
|
||||
- 后向填充(bfill):用后一个值填充
|
||||
- 适合时间序列数据
|
||||
|
||||
### 3. 非破坏性设计
|
||||
- 所有填补都创建新列
|
||||
- 新列紧邻原列,便于对比
|
||||
- 无需撤销功能(原数据始终保留)
|
||||
|
||||
### 3. <20>䂿聦<E482BF>𤩺<EFBFBD>扯挽霈?- <20><><EFBFBD>匧‵銵仿<E98AB5><E4BBBF>𥕦遣<F0A595A6>啣<EFBFBD>
|
||||
- <20>啣<EFBFBD>蝝折<E89D9D><E68A98>笔<EFBFBD>嚗䔶噶鈭𤾸笆瘥?- <20>𣳇<EFBFBD><F0A3B387>日<EFBFBD><E697A5>蠘<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>唳旿憪讠<E686AA>靽萘<E99DBD>嚗?
|
||||
### 4. 智能推荐
|
||||
- <EFBFBD>芸𢆡璉<EFBFBD>瘚𧢲㺭<EFBFBD>桃掩<EFBFBD>?- <20>箔<EFBFBD><E7AE94><EFBFBD><EFBFBD><EFBFBD>孵<EFBFBD><E5ADB5>刻<EFBFBD><E588BB><EFBFBD>雿單䲮瘜?- 摰墧𧒄<E5A2A7>曄內蝻箏仃<E7AE8F><E4BB83><EFBFBD>蝏蠘恣靽⊥<E99DBD>
|
||||
- 自动检测数据类型
|
||||
- 基于分布特征推荐最佳方法
|
||||
- 实时显示缺失率和统计信息
|
||||
|
||||
---
|
||||
|
||||
## 🧪 测试指南
|
||||
|
||||
### 瘚贝<EFBFBD><EFBFBD>滚<EFBFBD>憭?
|
||||
### 测试前准备
|
||||
|
||||
1. **启动Python服务**:
|
||||
```bash
|
||||
cd AIclinicalresearch/extraction_service
|
||||
@@ -96,48 +124,71 @@ cd AIclinicalresearch/frontend-v2
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 瘚贝<EFBFBD><EFBFBD>其<EFBFBD>嚗?8銝迎<E98A9D><E8BF8E>𩤃<EFBFBD> **敺<><E695BA>霂?*
|
||||
### 测试用例(18个)⚠️ **待测试**
|
||||
|
||||
#### 基础测试(6个)- 优先级:⭐⭐⭐
|
||||
1. ⏳ 均值填补数值列
|
||||
2. ⏳ 中位数填补偏态分布列
|
||||
3. ⏳ 众数填补分类列
|
||||
4. ⏳ 固定值填补(0)
|
||||
5. ⏳ 前向填充(ffill)
|
||||
6. ⏳ 后向填充(bfill)
|
||||
|
||||
#### MICE测试(4个)- 优先级:⭐⭐
|
||||
7. ⏳ MICE填补单列
|
||||
8. ⏳ MICE填补多列
|
||||
9. ⏳ MICE填补 - 不同迭代次数
|
||||
10. ⏳ MICE填补 - 自定义随机种子
|
||||
|
||||
#### 边界测试(4个)- 优先级:⭐
|
||||
11. ⏳ 100%缺失的列
|
||||
12. ⏳ 0%缺失的列(无需填补)
|
||||
13. ⏳ 空列名处理
|
||||
14. ⏳ 新列名冲突处理
|
||||
|
||||
#### 数据类型测试(4个)- 优先级:⭐⭐
|
||||
15. ⏳ 数值列(int/float)
|
||||
16. ⏳ 分类列(字符串)
|
||||
17. ⏳ 混合类型列
|
||||
18. ⏳ 日期时间列
|
||||
|
||||
#### <20>箇<EFBFBD>瘚贝<E7989A>嚗?銝迎<E98A9D>- 隡睃<E99AA1>蝥改<E89DA5>潃鐥<E6BD83>潃?1. <20>?<3F><><EFBFBD>澆‵銵交㺭<E4BAA4>澆<EFBFBD>
|
||||
2. <20>?銝凋<E98A9D><E5878B>啣‵銵亙<E98AB5><E4BA99><EFBFBD><EFBFBD>撣<EFBFBD><E692A3>
|
||||
3. <20>?隡埈㺭憛怨‘<E680A8><E28098>掩<EFBFBD>?4. <20>?<3F>箏<EFBFBD><E7AE8F>澆‵銵伐<E98AB5>0嚗?5. <20>?<3F>滚<EFBFBD>憛怠<E6869B>嚗Êfill嚗?6. <20>?<3F>𤾸<EFBFBD>憛怠<E6869B>嚗Ê̄fill嚗?
|
||||
#### MICE瘚贝<E7989A>嚗?銝迎<E98A9D>- 隡睃<E99AA1>蝥改<E89DA5>潃鐥<E6BD83>
|
||||
7. <20>?MICE憛怨‘<E680A8>訫<EFBFBD>
|
||||
8. <20>?MICE憛怨‘憭𡁜<E686AD>
|
||||
9. <20>?MICE憛怨‘ - 銝滚<E98A9D>餈凋誨甈⊥㺭
|
||||
10. <20>?MICE憛怨‘ - <20>芸<EFBFBD>銋厰<E98A8B><E58EB0>箇<EFBFBD>摮?
|
||||
#### 颲寧<E9A2B2>瘚贝<E7989A>嚗?銝迎<E98A9D>- 隡睃<E99AA1>蝥改<E89DA5>潃?11. <20>?100%蝻箏仃<E7AE8F><E4BB83><EFBFBD>
|
||||
12. <20>?0%蝻箏仃<E7AE8F><E4BB83><EFBFBD>嚗<EFBFBD><E59A97><EFBFBD><EFBFBD>憛怨‘嚗?13. <20>?蝛箏<E89D9B><E7AE8F>滚<EFBFBD><E6BB9A>?14. <20>?<3F>啣<EFBFBD><E595A3>滚<EFBFBD>蝒<EFBFBD><E89D92><EFBFBD>?
|
||||
#### <20>唳旿蝐餃<E89D90>瘚贝<E7989A>嚗?銝迎<E98A9D>- 隡睃<E99AA1>蝥改<E89DA5>潃鐥<E6BD83>
|
||||
15. <20>?<3F>啣<EFBFBD>澆<EFBFBD>嚗ǎnt/float嚗?16. <20>?<3F><>掩<EFBFBD>梹<EFBFBD>摮㛖泵銝莎<E98A9D>
|
||||
17. <20>?瘛瑕<E7989B>蝐餃<E89D90><E9A483>?18. <20>?<3F>交<EFBFBD><E4BAA4>園𡢿<E59C92>?
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 撱箄悅<E7AE84><E68285><EFBFBD>霂閙<E99C82>蝔?
|
||||
### <20>嗆挾1嚗𡁏<E59A97>撠誩虾銵峕<E98AB5>霂𤏪<E99C82>5<EFBFBD><35><EFBFBD>嚗?
|
||||
**<2A>格<EFBFBD>**嚗𡁻<E59A97>霂<EFBFBD>抅<EFBFBD>砍<EFBFBD><E7A08D>賣糓<E8B3A3>行迤撣詨極雿?
|
||||
## 🚀 建议的测试流程
|
||||
|
||||
### 阶段1:最小可行测试(5分钟)
|
||||
|
||||
**目标**:验证基本功能是否正常工作
|
||||
|
||||
1. **测试用例1:中位数填补**
|
||||
- 上传含缺失值的数值列
|
||||
- <EFBFBD>㗇𥋘"銝凋<E98A9D><E5878B>啣‵銵?
|
||||
- <EFBFBD>?撉諹<E69289>嚗𡁏鰵<F0A1818F>堒枂<E5A092>啜<EFBFBD><E5959C>撩憭勗<E686AD>潸◤憛怨‘<E680A8><E28098><EFBFBD>雿滨蔭甇<E894AD>&
|
||||
- 选择"中位数填补"
|
||||
- ✅ 验证:新列出现、缺失值被填补、列位置正确
|
||||
|
||||
2. **瘚贝<EFBFBD><EFBFBD>其<EFBFBD>2嚗帋<EFBFBD><EFBFBD>啣‵銵?*
|
||||
- <EFBFBD>㗇𥋘<EFBFBD><EFBFBD>掩<EFBFBD>? - <20>㗇𥋘"隡埈㺭憛怨‘"
|
||||
- <EFBFBD>?撉諹<E69289>嚗𡁜<E59A97>蝐餃<E89D90>潭迤蝖桀‵銵?
|
||||
3. **瘚贝<E7989A><E8B49D>其<EFBFBD>3嚗𡁜<E59A97><F0A1819C>穃‵<E7A983>?*
|
||||
- <20>㗇𥋘隞餅<E99A9E><E9A485>? - <20>㗇𥋘"<22>滚<EFBFBD>憛怠<E6869B>"
|
||||
- <20>?撉諹<E69289>嚗𡁶撩憭勗<E686AD>潛鍂<E6BD9B>滢<EFBFBD>銝芸<E98A9D>澆‵銵?
|
||||
憒<EFBFBD><EFBFBD>隞乩<EFBFBD>3銝芣<EFBFBD>霂閖<EFBFBD>朞<EFBFBD> <20>?餈𥕦<E9A488><F0A595A6>嗆挾2
|
||||
2. **测试用例2:众数填补**
|
||||
- 选择分类列
|
||||
- 选择"众数填补"
|
||||
- ✅ 验证:分类值正确填补
|
||||
|
||||
3. **测试用例3:前向填充**
|
||||
- 选择任意列
|
||||
- 选择"前向填充"
|
||||
- ✅ 验证:缺失值用前一个值填补
|
||||
|
||||
如果以上3个测试通过 → 进入阶段2
|
||||
|
||||
---
|
||||
|
||||
### <EFBFBD>嗆挾2嚗𡁜<EFBFBD><EFBFBD>游<EFBFBD><EFBFBD>賣<EFBFBD>霂𤏪<EFBFBD>15<EFBFBD><EFBFBD><EFBFBD>嚗?
|
||||
瘚贝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?蝘滨<E89D98><E6BBA8>訫‵銵交䲮瘜?+ MICE憛怨‘
|
||||
### 阶段2:完整功能测试(15分钟)
|
||||
|
||||
测试所有6种简单填补方法 + MICE填补
|
||||
|
||||
---
|
||||
|
||||
### <EFBFBD>嗆挾3嚗朞器<EFBFBD><EFBFBD><EFBFBD>撘<EFBFBD>虜瘚贝<EFBFBD>嚗?0<><30><EFBFBD>嚗?
|
||||
瘚贝<EFBFBD>颲寧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>屸<EFBFBD>霂臬<EFBFBD><EFBFBD>?
|
||||
### 阶段3:边界和异常测试(10分钟)
|
||||
|
||||
测试边界情况和错误处理
|
||||
|
||||
---
|
||||
|
||||
## 📝 详细测试步骤
|
||||
@@ -146,33 +197,42 @@ npm run dev
|
||||
- 上传包含缺失值的Excel文件
|
||||
- 确认数据加载成功
|
||||
|
||||
### 2. 瘚贝<EFBFBD>蝞<EFBFBD><EFBFBD>訫‵銵?1. <20>孵稬"蝻箏仃<E7AE8F>澆<EFBFBD><E6BE86>?<3F>厰僼
|
||||
### 2. 测试简单填补
|
||||
1. 点击"缺失值处理"按钮
|
||||
2. 选择"填补"Tab
|
||||
3. <EFBFBD>㗇𥋘銝<EFBFBD>銝芸鉄蝻箏仃<EFBFBD>潛<EFBFBD><EFBFBD>梹<EFBFBD>憒?雿㯄<E99BBF>"嚗?4. 閫<><E996AB><EFBFBD>芸𢆡<E88AB8><F0A286A1><EFBFBD><EFBFBD><EFBFBD>鰵<EFBFBD>堒<EFBFBD>嚗<EFBFBD><E59A97>"雿㯄<E99BBF>_憛怨‘"嚗?5. <20>亦<EFBFBD>蝏蠘恣靽⊥<E99DBD>嚗<EFBFBD>撩憭梁<E686AD><E6A281><EFBFBD>綫<EFBFBD>鞉䲮瘜閧<E7989C>嚗?6. <20>㗇𥋘憛怨‘<E680A8>寞<EFBFBD>嚗<EFBFBD><E59A97>"銝凋<E98A9D><E5878B>啣‵銵?嚗?7. <20>孵稬"<22>扯<EFBFBD>憛怨‘"
|
||||
8. <EFBFBD>?**撉諹<E69289>**: <20>啣<EFBFBD>摨𥪜枂<F0A5AA9C>啣銁<E595A3>笔<EFBFBD><E7AC94><EFBFBD>器嚗𣬚撩憭勗<E686AD>潸◤憛怨‘
|
||||
3. 选择一个含缺失值的列(如"体重")
|
||||
4. 观察自动生成的新列名(如"体重_填补")
|
||||
5. 查看统计信息(缺失率、推荐方法等)
|
||||
6. 选择填补方法(如"中位数填补")
|
||||
7. 点击"执行填补"
|
||||
8. ✅ **验证**: 新列应出现在原列旁边,缺失值被填补
|
||||
|
||||
### 3. 测试前向/后向填充
|
||||
1. 选择时间序列数据的列
|
||||
2. <EFBFBD>㗇𥋘"<22>滚<EFBFBD>憛怠<E6869B>"<22>?<3F>𤾸<EFBFBD>憛怠<E6869B>"
|
||||
2. 选择"前向填充"或"后向填充"
|
||||
3. 执行填补
|
||||
4. <EFBFBD>?**撉諹<E69289>**: 蝻箏仃<EFBFBD>潛鍂<EFBFBD>?<3F>𡒊<EFBFBD><F0A1928A>㗇<EFBFBD><E39787>澆‵<E6BE86>?
|
||||
4. ✅ **验证**: 缺失值用前/后的有效值填充
|
||||
|
||||
### 4. 测试MICE填补
|
||||
1. <EFBFBD><EFBFBD>揢<EFBFBD>?擃条漣憛怨‘"Tab
|
||||
2. <EFBFBD>暸<EFBFBD>?-3銝芣㺭<E88AA3>澆<EFBFBD>
|
||||
3. 霈曄蔭餈凋誨甈⊥㺭嚗<EFBFBD><EFBFBD>10嚗?4. <20>孵稬"<22>扯<EFBFBD>MICE憛怨‘"
|
||||
1. 切换到"高级填补"Tab
|
||||
2. 勾选2-3个数值列
|
||||
3. 设置迭代次数(如10)
|
||||
4. 点击"执行MICE填补"
|
||||
5. 等待1-2分钟(取决于数据量)
|
||||
6. <EFBFBD>?**撉諹<E69289>**: <EFBFBD><EFBFBD><EFBFBD>厰<EFBFBD>劐葉<EFBFBD>烾<EFBFBD><EFBFBD><EFBFBD><EFBFBD>鈭?_MICE"<22>𡒊<EFBFBD><F0A1928A><EFBFBD>鰵<EFBFBD>?
|
||||
6. ✅ **验证**: 所有选中列都生成了"_MICE"后缀的新列
|
||||
|
||||
### 5. 测试删除功能
|
||||
1. <EFBFBD><EFBFBD>揢<EFBFBD>?<3F>𣳇膄"Tab
|
||||
2. <EFBFBD>㗇𥋘"<22>𣳇膄<F0A3B387>急<EFBFBD>蝻箏仃<E7AE8F>潛<EFBFBD>銵?
|
||||
1. 切换到"删除"Tab
|
||||
2. 选择"删除含有缺失值的行"
|
||||
3. 执行删除
|
||||
4. <EFBFBD>?**撉諹<E69289>**: <EFBFBD>怎撩憭勗<EFBFBD>潛<EFBFBD>銵諹◤<EFBFBD>𣳇膄
|
||||
4. ✅ **验证**: 含缺失值的行被删除
|
||||
|
||||
---
|
||||
|
||||
## 📋 API接口文档
|
||||
|
||||
### 1. <EFBFBD>瑕<EFBFBD><EFBFBD>㛖<EFBFBD>霈∩縑<EFBFBD>?```http
|
||||
### 1. 获取列统计信息
|
||||
```http
|
||||
POST /api/v1/dc/tool-c/fillna/stats
|
||||
Content-Type: application/json
|
||||
|
||||
@@ -198,7 +258,8 @@ Content-Type: application/json
|
||||
}
|
||||
```
|
||||
|
||||
### 2. <EFBFBD>扯<EFBFBD>蝞<EFBFBD><EFBFBD>訫‵銵?```http
|
||||
### 2. 执行简单填补
|
||||
```http
|
||||
POST /api/v1/dc/tool-c/fillna/simple
|
||||
Content-Type: application/json
|
||||
|
||||
@@ -218,7 +279,7 @@ Content-Type: application/json
|
||||
"data": {
|
||||
"newDataPreview": [...],
|
||||
"affectedRows": 100,
|
||||
"message": "銝凋<E98A9D><E5878B>啣‵銵交<E98AB5><E4BAA4>?,
|
||||
"message": "中位数填补成功",
|
||||
"stats": {...}
|
||||
}
|
||||
}
|
||||
@@ -256,8 +317,9 @@ Content-Type: application/json
|
||||
|
||||
1. **MICE填补时间**: 10万行数据约需1分钟,请耐心等待
|
||||
2. **新列位置**: 新列会自动插入到原列旁边
|
||||
3. **<EFBFBD>唳旿蝐餃<EFBFBD>**: MICE隞<EFBFBD><EFBFBD><EFBFBD>鍂鈭擧㺭<EFBFBD>澆<EFBFBD>嚗<EFBFBD><EFBFBD>蝐餃<EFBFBD>隡朞䌊<EFBFBD>刻歲餈?4. **蝻箏仃<E7AE8F>?*: MICE<43><45><EFBFBD>5%-30%蝻箏仃<E7AE8F><E4BB83><EFBFBD>餈<EFBFBD><E9A488><EFBFBD>𤥁<EFBFBD>雿舘窈雿輻鍂<E8BCBB>嗡<EFBFBD><E597A1>寞<EFBFBD>
|
||||
5. **Session<EFBFBD>嗆<EFBFBD>?*: 憛怨‘<E680A8>擧㺭<E693A7>桐<EFBFBD><E6A190>芸𢆡<E88AB8>湔鰵<E6B994>訕ession嚗<6E><E59A97><EFBFBD>圈△<E59C88>W虾<EFBCB7>滨蔭
|
||||
3. **数据类型**: MICE仅适用于数值列,分类列会自动跳过
|
||||
4. **缺失率**: MICE适合5%-30%缺失率,过高或过低请使用其他方法
|
||||
5. **Session状态**: 填补后数据会自动更新到Session,刷新页面可重置
|
||||
|
||||
---
|
||||
|
||||
@@ -267,17 +329,22 @@ Content-Type: application/json
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 銝衤<E98A9D>甇亙極雿?
|
||||
1. <20>?摰峕<E691B0>18銝芣<E98A9D>霂閧鍂靘?2. <20>?靽桀<E99DBD>瘚贝<E7989A>銝剖<E98A9D><E58996>啁<EFBFBD>bug
|
||||
3. <EFBFBD>?<3F>扯<EFBFBD>隡睃<E99AA1>嚗<EFBFBD>之<EFBFBD>唳旿<E594B3><E697BF><EFBFBD>
|
||||
4. <EFBFBD>?<3F>冽<EFBFBD><E586BD>见<EFBFBD><E8A781>峕<EFBFBD>雿𡏭<E99BBF>憸?
|
||||
## 📝 下一步工作
|
||||
|
||||
1. ✅ 完成18个测试用例
|
||||
2. ⏳ 修复测试中发现的bug
|
||||
3. ⏳ 性能优化(大数据集)
|
||||
4. ⏳ 用户手册和操作视频
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>𡤻 撘<><E69298>穃𣪧<E7A983>?
|
||||
- **撘<><E69298>?*: Claude Sonnet 4.5 + <20>冽<EFBFBD>
|
||||
## 👥 开发团队
|
||||
|
||||
- **开发**: Claude Sonnet 4.5 + 用户
|
||||
- **日期**: 2025-12-10
|
||||
- **<EFBFBD>埈𧒄**: 蝥?撠𤩺𧒄嚗?銝芸<E98A9D>蝡臬<E89DA1> + 1銝芸<E98A9D>蝡臬<E89DA1>嚗?
|
||||
- **耗时**: 约2小时(3个后端层 + 1个前端层)
|
||||
|
||||
---
|
||||
|
||||
**撘<EFBFBD><EFBFBD>穃<EFBFBD><EFBFBD>琜<EFBFBD><EFBFBD><EFBFBD><EFBFBD>瘚贝<EFBFBD>嚗?* <20><>
|
||||
**开发完成!准备测试!** 🎉
|
||||
|
||||
|
||||
Reference in New Issue
Block a user