Files
AIclinicalresearch/docs/03-业务模块/DC-数据清洗整理/04-开发计划/工具C_NA处理功能开发总结.md
HaHafeng 1b53ab9d52 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%)
2026-01-14 19:15:01 +08:00

10 KiB
Raw Blame History

撌亙<EFBFBD>C - NA憭<41><E686AD><EFBFBD><EFBFBD><EFBFBD><E69298><EFBFBD><EFBFBD>

<EFBFBD><EFBFBD><>

**<2A><EFBFBD>**嚗𡁜銁4銝芣瓲敹<E793B2><E695B9><EFBFBD>賭葉瘛餃<E7989B>撖遑A嚗<41><EFBFBD>?蝻箏仃<E7AE8F><EFBFBD><E6BD98><EFBFBD>遬撘誩<E69298><E8AAA9><EFBFBD><EFBFBD>霈拍鍂<E68B8D><EFBFBD><EFBFBD><E686AD>蝖桃<E89D96><E6A183>啣僎憭<E5838E><E686AD>蝻箏仃<E7AE8F><EFBFBD>? NA<EFBFBD>曄內<EFBFBD>滨妍嚗䫤蝛箏<EFBFBD>?NA`嚗<><EFBFBD><EFBFBD>蝏枏<E89D8F>嚗?

<EFBFBD>?撌脣<E6928C><E884A3><EFBFBD>Python<6F>𡒊垢嚗?00%嚗?

1. recode.py - <20><EFBFBD><EFBFBD>撠?<3F>?

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?- na_handling: 'keep' | 'map' | 'drop'

  • keep: 靽脲<E99DBD>銝摸A嚗<41><E59A97>霈歹<E99C88>
  • map: <20><EFBFBD>銝箸<E98A9D>摰𡁜<E691B0>? - drop: <20>𣳇膄<F0A3B387><E88684>鉄NA<4E><41><EFBFBD>
  • na_value: NA<4E><EFBFBD><E683A9><EFBFBD>敶忛a_handling='map'<27>嗡蝙<E597A1><EFBFBD>

**摰䂿緵<E482BF><EFBFBD>**嚗?```python if original_na_count > 0: na_mask = result[column].isna()

if na_handling == 'keep':
    # 靽脲<E99DBD>銝摸A嚗<41>歇蝏𤩺糓NA嚗峕<E59A97><E5B395><EFBFBD><EFBFBD><EFBFBD>嚗?        print(f'<27><> NA憭<41><E686AD>嚗帋<E59A97><E5B88B><EFBFBD>蛹NA嚗ùoriginal_na_count}銝迎<E98A9D>')

elif na_handling == 'map':
    # <20><EFBFBD>銝箸<E98A9D>摰𡁜<E691B0>?        result.loc[na_mask, target_column] = na_value
    print(f'<27><> NA憭<41><E686AD>嚗𡁏<E59A97><EFBFBD>蛹 {na_value}嚗ùoriginal_na_count}銝迎<E98A9D>')

elif na_handling == 'drop':
    # <20>𣳇膄<F0A3B387><E88684>鉄NA<4E><41><EFBFBD>
    result = result[~na_mask].copy()

### 2. filter.py - 擃条漣蝑偦<E89D91>?<3F>?
**撌脫𣈲<E884AB>?*嚗䫤is_null` <20>?`not_null` 餈鞟<E9A488>蝚?
<0A>𣳇<EFBFBD>靽格㺿嚗<E3BABF><E59A97><EFBFBD>劐誨<E58A90><E8AAA8>歇蝏𤩺𣈲<F0A4A9BA><F0A388B2><EFBFBD>

```python
elif operator == 'is_null':
    mask = df[column].isna()
elif operator == 'not_null':
    mask = df[column].notna()

3. binning.py - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>?

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?- na_handling: 'keep' | 'label' | 'assign'

  • keep: 靽脲<E99DBD>銝摸A嚗<41><E59A97>霈歹<E99C88>
  • label: <20><>扇銝箸<E98A9D>摰𡁏<E691B0>蝑橘<E89D91>憒?蝻箏仃"嚗? - assign: <20><><EFBFBD><EFBFBD><EFBFBD>摰𡁶<E691B0>
  • na_label: NA<4E><41>倌嚗<E5808C><E59A97>na_handling='label'<27>嗡蝙<E597A1><EFBFBD>
  • na_assign_to: NA<4E><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>揣撘𤏪<E69298>敶忛a_handling='assign'<27>嗡蝙<E597A1><EFBFBD>

**摰䂿緵<E482BF><EFBFBD>**嚗?```python if original_na_count > 0: na_mask = result[column].isna()

if na_handling == 'keep':
    # 靽脲<E99DBD>銝摸A
    print(f'<27><> NA憭<41><E686AD>嚗帋<E59A97><E5B88B><EFBFBD>蛹NA嚗ùoriginal_na_count}銝迎<E98A9D>')

elif na_handling == 'label':
    # <20><>扇銝箸<E98A9D>摰𡁏<E691B0>蝑?        label_to_use = na_label if na_label else '蝛箏<E89D9B>?NA'
    result.loc[na_mask, new_column_name] = label_to_use
    print(f'<27><> NA憭<41><E686AD>嚗𡁏<E59A97>霈唬蛹 "{label_to_use}"嚗ùoriginal_na_count}銝迎<E98A9D>')

elif na_handling == 'assign':
    # <20><><EFBFBD><EFBFBD><EFBFBD>摰𡁶<E691B0>
    if labels and na_assign_to is not None:
        result.loc[na_mask, new_column_name] = labels[na_assign_to]

### 4. conditional.py - <20>∩辣<E288A9><E8BEA3><EFBFBD><EFBFBD>?<3F>?
**<2A><EFBFBD><E595A3><EFBFBD>**嚗䫤is_null` <20>?`not_null` 餈鞟<E9A488>蝚?
```python
elif operator == 'is_null':  # <20>?<3F><EFBFBD>嚗帋蛹蝛?    mask = result[column].isna()
elif operator == 'not_null':  # <20>?<3F><EFBFBD>嚗帋<E59A97>銝箇征
    mask = result[column].notna()

5. main.py - API霂瑟<E99C82><E79285> <20>?

RecodeRequest嚗?```python na_handling: str = 'keep' na_value: Any = None


**BinningRequest**嚗?```python
na_handling: str = 'keep'
na_label: str = None
na_assign_to: int = None

FilterRequest <20>?ConditionalRequest嚗?<3F>𣳇<EFBFBD>靽格㺿嚗<E3BABF><EFBFBD><EFBFBD>


<EFBFBD><EFBFBD><><E695BA><EFBFBD><EFBFBD>Node.js<6A>𡒊垢

QuickActionService.ts

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>亙藁嚗?

  1. RecodeParams嚗?```typescript interface RecodeParams { column: string; mapping: Record<string, any>; createNewColumn?: boolean; newColumnName?: string; naHandling?: 'keep' | 'map' | 'drop'; // <20>?<3F><EFBFBD> naValue?: any; // <20>?<3F><EFBFBD> }

2. **BinningParams**嚗?```typescript
interface BinningParams {
  column: string;
  method: 'custom' | 'equal_width' | 'equal_freq';
  newColumnName: string;
  bins?: number[];
  labels?: string[];
  numBins?: number;
  naHandling?: 'keep' | 'label' | 'assign';  // <20>?<3F><EFBFBD>
  naLabel?: string;  // <20>?<3F><EFBFBD>
  naAssignTo?: number;  // <20>?<3F><EFBFBD>
}

API靚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣳇<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?

<EFBFBD>綫 敺<><E695BA><EFBFBD><EFBFBD><E7909C>滨垢UI

1. RecodeDialog.tsx - <20><EFBFBD><EFBFBD>撠?

UI霈曇恣嚗? <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>?<3F>?<3F><EFBFBD><EFBFBD>撠? [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>?<3F>?<3F>㗇𥋘<E39787><EFBFBD>[憍𡁜宏<F0A1819C><EFBFBD><E59785><20>?<3F>? <20>?<3F>?<3F><EFBFBD><E887AD><EFBFBD><EFBFBD><E692A0> <20>?<3F>?<3F>𢞖<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>? <20>?<3F>?<3F>?<3F><EFBFBD><E7AC94>? <20>?<3F><EFBFBD>? <20>? <20>?<3F>?<3F>?撌脣<E6928C> <20>?[1 ] <20>? <20>?<3F>?<3F>?<3F><EFBFBD> <20>?[0 ] <20>? <20>?<3F>?<3F>?蝛箏<E89D9B>?NA <20>?[<5B><20>?潃鐥<E6BD83> <20>?<3F>? <20><EFBFBD> 靽脲<E99DBD>銝摸A嚗<41><E59A97>霈歹<E99C88> <20>? <20>?<3F>?<3F>? <20><EFBFBD> <20><EFBFBD>銝綽<E98A9D>[____] <20>? <20>?<3F>?<3F>? <20><EFBFBD> <20>𣳇膄霂亥<E99C82> <20>? <20>?<3F>?<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>? <20>?<3F>? <20>?<3F>?<3F><EFBFBD> 敶枏<E695B6><E69E8F>?25銝芰征<E88AB0><EFBFBD>15.6%嚗? <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>?

**摰䂿緵閬<E7B7B5><E996AC>**嚗?1. 靚<>/api/v1/dc/tool-c/sessions/:id/unique-values<EFBFBD><EFBFBD><EFBFBD>瘚𧢲糓<EFBFBD><EFBFBD>NA 2. 憒<><E68692><EFBFBD>会A嚗峕遬蝷?蝛箏<E89D9B>?NA"<22><EFBFBD>銵?3. <20>𣂷<EFBFBD>3蝘漤<E89D98>㗇𥋘嚗帋<E59A97><E5B88B><EFBFBD>A / <20><EFBFBD>銝箸<E98A9D>摰𡁜<E691B0>?/ <20>𣳇膄銵?

2. FilterDialog.tsx - 擃条漣蝑偦<E89D91>?

UI霈曇恣嚗?``` <0A>∩辣嚗?[憍𡁜宏<F0A1819C><EFBFBD><E59785>奭 [餈鞟<E9A488>蝚色䲰] <0A>?蝑劐<E89D91> <0A>?銝滨<E98A9D>鈭? <20>?銝箇征 <20>?<3F>?<3F><EFBFBD> <0A>?銝滢蛹蝛? <20>?<3F>?<3F><EFBFBD> <0A>?...


**摰䂿緵閬<E7B7B5><E996AC>**嚗?1. <20><EFBFBD>蝞㛖泵銝𧢲<E98A9D><F0A7A2B2>𨅯<EFBFBD>銝剜溶<E5899C>?銝箇征"<22>?銝滢蛹蝛?<3F>厰★
2. 敶㯄<E695B6>㗇𥋘餈嗘舅銝芾<E98A9D>蝞㛖泵<E39B96><EFBFBD><E5A19A><EFBFBD>"<22>?颲枏<E9A2B2><EFBFBD><E78DA2>銝漤<E98A9D><EFBFBD><E996AC><EFBFBD><EFBFBD><EFBFBD>

### 3. BinningDialog.tsx - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

**UI霈曇恣**嚗?```
<0A>𢞖<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>?<3F>?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>                 [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>?<3F>?<3F><EFBFBD><E7AC94><EFBFBD>[撟湧<E6929F><E6B9A7><20>?<3F>?...<2E><><EFBFBD><EFBFBD><E996AB>...                       <20>?<3F>?                                     <20>?<3F>?<3F>𩤃<EFBFBD> 蝛箏<E89D9B><EFBFBD><E6BE86><EFBFBD><EFBFBD>                       <20>?潃?<3F>?<3F>?靽脲<E99DBD>銝箇征嚗<E5BE81><E59A97>霈歹<E99C88>                 <20>?<3F>?<3F>?<3F><>扇銝綽<E98A9D>[蝻箏仃___]                <20>?<3F>?<3F>?<3F><><EFBFBD><EFBFBD><EFBFBD>嚗靀蝚?蝏<>䲰]               <20>?<3F>?                                     <20>?<3F>?<3F><EFBFBD> 敶枏<E695B6><E69E8F>?5銝芰征<E88AB0><EFBFBD>3.1%嚗?         <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>?```

**摰䂿緵閬<E7B7B5><E996AC>**嚗?1. 瘛餃<E7989B>Radio Group for NA憭<41><E686AD><EFBFBD><EFBFBD>
2. <20>寞旿<E5AF9E>㗇𥋘<E39787>曄內<E69B84><EFBFBD><E8A9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
3. 隡𣳇<E99AA1>嚒naHandling`<60><>naLabel`<60><>naAssignTo`<60><>㺭

### 4. ConditionalDialog.tsx - <20>∩辣<E288A9><E8BEA3><EFBFBD><EFBFBD>?
**UI霈曇恣**嚗?```
閫<><E996AB>1嚗?憒<><E68692> [憍𡁜宏<F0A1819C><EFBFBD><E59785>奭 [餈鞟<E9A488>蝚色䲰]
  <20>?蝑劐<E89D91>
  <20>?銝滨<E98A9D>鈭?  <20>?銝箇征          <20>?<3F>?<3F><EFBFBD>
  <20>?銝滢蛹蝛?       <20>?<3F>?<3F><EFBFBD>
  <20>?...
<0A><E59D94><E280B5><EFBFBD>[雿𡡞<E99BBF><F0A1A19E>?       ]

**摰䂿緵閬<E7B7B5><E996AC>**嚗?1. 銝榢ilterDialog蝐颱撮嚗<E692AE>銁餈鞟<E9A488>蝚虫<E89D9A><E899AB><EFBFBD><E39591>蓥葉瘛餃<E7989B>"銝箇征"<22>?銝滢蛹蝛? 2. 餈嗘舅銝芾<E98A9D>蝞㛖泵銝漤<E98A9D><EFBFBD><E996AC><EFBFBD><EFBFBD>?

<EFBFBD>妒 瘚贝<E7989A><E8B49D><EFBFBD>

瘚贝<EFBFBD><EFBFBD>唳旿<EFBFBD><EFBFBD><EFBFBD>

ID,憍𡁜宏<EFBFBD><EFBFBD>,撟湧<EFBFBD>,<EFBFBD>嗥憬<EFBFBD>?1,撌脣<EFBFBD>,45,120
2,<EFBFBD><EFBFBD>,35,130
3,,50,  # <20>?NA
4,蝳餃<EFBFBD>,60,
5,,NA,140

瘚贝<EFBFBD><EFBFBD>箸艶

蝻硋噡 <EFBFBD><EFBFBD> 瘚贝<EFBFBD><EFBFBD>箸艶 <EFBFBD><EFBFBD>蝏𤘪<EFBFBD>
TC-1 <EFBFBD><EFBFBD><EFBFBD>撠?- 靽脲<E99DBD>NA 憍𡁜宏<EFBFBD><EFBFBD>嚗𡁜歇憍?1嚗峕𧊋憍?0嚗𨨲A=靽脲<E99DBD> NA銵𣬚<EFBFBD><EFBFBD><EFBFBD>銝摸A <20>?
TC-2 <EFBFBD><EFBFBD><EFBFBD>撠?- <20><EFBFBD>NA 憍𡁜宏<EFBFBD><EFBFBD>嚗𡁜歇憍?1嚗峕𧊋憍?0嚗𨨲A=<3D><EFBFBD>銝? NA銵𣬚<EFBFBD><EFBFBD><EFBFBD>銝? <20>?
TC-3 <EFBFBD><EFBFBD><EFBFBD>撠?- <20>𣳇膄NA 憍𡁜宏<EFBFBD><EFBFBD>嚗𡁜歇憍?1嚗峕𧊋憍?0嚗𨨲A=<3D>𣳇膄 NA銵諹◤<EFBFBD>𣳇膄嚗峕<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撠?<3F>?
TC-4 擃条漣蝑偦<EFBFBD>?- 銝箇征 蝑偦<EFBFBD>?憍𡁜宏<F0A1819C><EFBFBD>"銝箇征 <EFBFBD><EFBFBD><EFBFBD>䇏A銵?<3F>?
TC-5 擃条漣蝑偦<EFBFBD>?- 銝滢蛹蝛? 蝑偦<EFBFBD>?憍𡁜宏<F0A1819C><EFBFBD>"銝滢蛹蝛? <EFBFBD><EFBFBD><EFBFBD><EFBFBD>NA銵?<3F>?
TC-6 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 靽脲<E99DBD>NA 撟湧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗𨨲A靽脲<EFBFBD> NA銵𣬚<EFBFBD><EFBFBD><EFBFBD>銝摸A <20>?
TC-7 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>扇NA 撟湧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗𨨲A<EFBFBD><EFBFBD>扇銝?蝻箏仃" NA銵𣬚<EFBFBD><EFBFBD><EFBFBD>銝?蝻箏仃" <20>?
TC-8 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>NA 撟湧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗𨨲A<EFBFBD><EFBFBD><EFBFBD><EFBFBD>啁洵1蝏? NA銵𣬚<EFBFBD><EFBFBD><EFBFBD>銝箇洵1蝏<EFBFBD><EFBFBD>蝑?<3F>?
TC-9 <EFBFBD>∩辣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?- 銝箇征 <EFBFBD><EFBFBD>憍𡁜宏<EFBFBD><EFBFBD>銝箇征嚗<EFBFBD><EFBFBD>"<22>芰䰻" NA銵𣬚<EFBFBD><EFBFBD><EFBFBD>銝?<3F>芰䰻" <20>?
TC-10 <EFBFBD>∩辣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?- 銝滢蛹蝛? <EFBFBD><EFBFBD>憍𡁜宏<EFBFBD><EFBFBD>銝滢蛹蝛綽<EFBFBD><EFBFBD>?撌脩䰻" <EFBFBD>啩A銵𣬚<EFBFBD><EFBFBD><EFBFBD>銝?撌脩䰻" <20>?

<EFBFBD><EFBFBD><><E69298>𤏸<EFBFBD>摨?

<EFBFBD>嗆挾 <EFBFBD><EFBFBD>? <EFBFBD>
Python<EFBFBD>𡒊垢 - recode.py <EFBFBD>?100% 撌脣<EFBFBD><EFBFBD>?
Python<EFBFBD>𡒊垢 - filter.py <EFBFBD>?100% 撌脫𣈲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣳇<EFBFBD>靽格㺿嚗?
Python<EFBFBD>𡒊垢 - binning.py <EFBFBD>?100% 撌脣<EFBFBD><EFBFBD>?
Python<EFBFBD>𡒊垢 - conditional.py <EFBFBD>?100% 撌脣<EFBFBD><EFBFBD>?
Python<EFBFBD>𡒊垢 - main.py <EFBFBD>?100% 撌脣<EFBFBD><EFBFBD>?
Node.js<6A>𡒊垢 <EFBFBD>?100% 撌脣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㺭隡𣳇<EFBFBD>𡜐<EFBFBD>
<EFBFBD>滨垢 - RecodeDialog <EFBFBD>?100% 撌脣<EFBFBD><EFBFBD><EFBFBD>NA憭<EFBFBD><EFBFBD>銝𧢲<EFBFBD><EFBFBD>𨅯<EFBFBD>嚗?
<EFBFBD>滨垢 - FilterDialog <EFBFBD>?100% 撌脣<EFBFBD><EFBFBD><EFBFBD>撌脫𣈲<EFBFBD><EFBFBD>s_null/not_null嚗?
<EFBFBD>滨垢 - BinningDialog <EFBFBD>?100% 撌脣<EFBFBD><EFBFBD><EFBFBD>NA憭<EFBFBD><EFBFBD>Radio Group嚗?
<EFBFBD>滨垢 - ConditionalDialog <EFBFBD>?100% 撌脣<EFBFBD><EFBFBD><EFBFBD>瘛餃<EFBFBD>is_null/not_null嚗?
瘚贝<EFBFBD> <EFBFBD>?敺<><E695BA>霂? 蝑匧<EFBFBD><EFBFBD><EFBFBD>瘚贝<EFBFBD>撉諹<EFBFBD>

<EFBFBD>㴓 銝衤<E98A9D>甇亥<E79487><E4BAA5>?

  1. Node.js<6A>𡒊垢<EFBFBD><EFBFBD>霈?5<><35><EFBFBD>嚗? - <20>湔鰵RecodeParams<6D>亙藁
    • <EFBFBD>湔鰵BinningParams<EFBFBD>亙藁
    • 嚗㇅ilterParams<EFBFBD>龦onditionalParams<EFBFBD>𣳇<EFBFBD>靽格㺿嚗?
  2. <EFBFBD>滨垢UI<EFBFBD><EFBFBD>霈?撠𤩺𧒄嚗? - RecodeDialog嚗𡁏溶<F0A1818F>賫A憭<41><E686AD>銝𧢲<E98A9D><F0A7A2B2>𨅯<EFBFBD>嚗?5<><35><EFBFBD>嚗? - FilterDialog嚗𡁏溶<F0A1818F>?銝箇征"/"銝滢蛹蝛?餈鞟<E9A488>蝚佗<E89D9A>15<31><35><EFBFBD>嚗? - BinningDialog嚗𡁏溶<F0A1818F>賫A憭<41><E686AD>Radio Group嚗?0<><30><EFBFBD>嚗? - ConditionalDialog嚗𡁏溶<F0A1818F>?銝箇征"/"銝滢蛹蝛?餈鞟<E9A488>蝚佗<E89D9A>30<33><30><EFBFBD>嚗?
  3. **瘚贝<E7989A>**嚗<><E59A97>霈?0<><30><EFBFBD>嚗? - <20><EFBFBD>10銝芣<E98A9D>霂閧鍂靘? - 靽桀<E99DBD><E6A180>𤑳緵<F0A491B3><E7B7B5>䔮憸? <EFBFBD>餉恣<EFBFBD><EFBFBD><EFBFBD>園𡢿嚗𡁶漲3撠𤩺𧒄

<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E888AA>?

Python蝡?- 雿輻鍂df[column].isna()<EFBFBD>瘚𨶙A

  • 雿輻鍂df.loc[mask, col] = value憛怠<EFBFBD>NA
  • 雿輻鍂df[~mask]<EFBFBD>𣳇膄NA銵?- 蝏蠘恣撟嗆<E6929F><E59786>衹A憭<41><E686AD>靽⊥<E99DBD>

<EFBFBD>滨垢蝡?- <20>刻繮<E588BB>䮐nique values<65><EFBFBD>瘚𨶙A

  • 雿輻鍂<蝛箏<E89D9B>?NA>雿靝蛹<EFBFBD>曄內<EFBFBD>滨妍
  • <EFBFBD>寞旿<EFBFBD><EFBFBD><EFBFBD>㗇𥋘<EFBFBD><EFBFBD><EFBFBD>㰘窈瘙<EFBFBD><EFBFBD><EFBFBD>?- <20>曄內NA蝏蠘恣靽⊥<E99DBD><EFBFBD><E59A97>"敶枏<E695B6><E69E8F>?25銝芰征<E88AB0>?嚗?

撉峕𤣰<EFBFBD><EFBFBD><EFBFBD>

  • <EFBFBD>?<3F><EFBFBD><E586BD><EFBFBD>蝖桃<E89D96><E6A183>衹A<E8A1B9><41><EFBFBD><EFBFBD>?- <20>?<3F><EFBFBD><E586BD><EFBFBD>㗇𥋘憒<F0A58B98><E68692><EFBFBD><E686AD>NA
  • <EFBFBD>?憭<><E686AD><EFBFBD>𡒊<EFBFBD>蝏𤘪<E89D8F>蝚血<E89D9A><E8A180><EFBFBD><E586BD>㗇𥋘
  • <EFBFBD>?<3F><><EFBFBD><EFBFBD><E58CA7><EFBFBD>NA憭<41><E686AD><EFBFBD><EFBFBD><EFBFBD>苊蝏煺<E89D8F>

<EFBFBD><EFBFBD><EFBFBD>𥕦遣<EFBFBD>園𡢿嚗?025-12-09
**Python<6F>𡒊垢撘<E59EA2><E69298>𤑳𠶖<F0A491B3>?*嚗尠<E59A97> 撌脣<E6928C><E884A3>? **<2A><EFBFBD>撌乩<E6928C>**嚗鐭ode.js<6A>𡒊垢 + <20>滨垢UI + 瘚贝<E7989A>