# 1.0.4 版本更新日志

## 主要更新内容

### 1. nan处理模块重构

#### 1.1 配置结构优化
- **文件**: `myffe_package/myffe/route/py_tools/nan_py.py`
- **变更**: 将配置结构从并行列表改为嵌套字典列表形式
- **优势**: 解决了参数公用问题，确保每个列的参数独立设置
- **参数占位**: 为所有可能的参数添加了占位机制，未被选中的参数使用默认值填充
- **格式示例**:
  ```python
  {
      'nan_ways': [
          {
              'col': 'col1',
              'method': 'fill_nan_mean',
              'drop_threshold': 0.5,
              'knn_n_neighbors': 5,
              'ei_model_type': 'linear',
              'poly_degree': 2,
              'fill_value': ''
          },
          {
              'col': 'col2',
              'method': 'fill_nan_knn',
              'drop_threshold': 0.5,
              'knn_n_neighbors': 5,
              'ei_model_type': 'linear',
              'poly_degree': 2,
              'fill_value': ''
          }
      ]
  }
  ```

#### 1.2 标签列处理优化
- **文件**: `myffe_package/myffe/preprocessing/nan_preprocessing.py`
- **变更**: 增加了 `label_col` 参数，用于标签列分离
- **功能**: 对KNN、智能填充、EI填充等方法进行了标签列分离处理
- **优势**: 确保标签列在处理过程中不被修改

#### 1.3 函数参数优化
- **文件**: `myffe_package/myffe/preprocessing/function/nanfunction/`
- **变更**: 为以下函数添加了 `label_col` 参数
  - `knn.py`: `fill_nan_knn` 函数
  - `intelligent.py`: `fill_nan_intelligent` 函数
  - `EI.py`: `fill_nan_ei` 函数
- **功能**: 函数内部实现标签列分离，确保标签列不参与填充计算
- **优势**: 简化了调用代码，提高了代码的一致性和可维护性

#### 1.4 调用逻辑优化
- **文件**: `myffe_package/myffe/preprocessing/nan_preprocessing.py`
- **变更**: 移除了在调用前手动分离标签列的逻辑
- **功能**: 直接将 `label_col` 参数传递给处理函数，由函数内部处理标签列
- **优势**: 减少了重复代码，提高了代码的可读性和可维护性

#### 1.5 配置文件更新
- **文件**: `myffe_package/myffe/core/FFE_config.py`
- **变更**: 更新了默认参数结构以支持新的nan配置
- **功能**: 修改了 `add_tools` 方法，确保在初始化 NanPreprocessing 时传递 `label_col` 参数

#### 1.4 控制台调整
- **文件**: `myffe_package/myffe/core/FFE_console.py`
- **变更**: 将 `nan_preprocessing` 添加到需要标签列的工具列表中
- **优势**: 确保nan处理使用包含标签列的数据进行处理

### 2. 归一化模块配置结构优化

#### 2.1 配置结构优化
- **文件**: `myffe_package/myffe/route/py_tools/normalized_py.py`
- **变更**: 将配置结构从并行列表改为嵌套字典列表形式，与nan处理格式保持一致
- **优势**: 提高了代码的一致性和可维护性
- **格式示例**:
  ```python
  {
      'normalized_ways': [
          {
              'col': 'col1',
              'method': 'L1 Normalization'
          },
          {
              'col': 'col2',
              'method': 'L2 Normalization'
          }
      ]
  }
  ```

#### 2.2 归一化处理器更新
- **文件**: `myffe_package/myffe/preprocessing/normalized_preprocessing.py`
- **变更**: 添加了对新的 normalized_ways 格式的支持
- **功能**: 保持了对旧格式的兼容性，同时支持新格式
- **优势**: 确保了平滑过渡，同时提高了代码的一致性

#### 2.3 配置文件更新
- **文件**: `myffe_package/myffe/core/FFE_config.py`
- **变更**: 更新了默认归一化参数，使用新的 normalized_ways 格式
- **功能**: 修改了条件检查，以适应新的参数格式

#### 2.4 控制台调整
- **文件**: `myffe_package/myffe/core/FFE_console.py`
- **变更**: 更新了默认归一化参数，使用新的 normalized_ways 格式
- **优势**: 确保了整个系统使用统一的参数格式

### 3. 标准化模块配置结构优化

#### 3.1 配置结构优化
- **文件**: `myffe_package/myffe/route/py_tools/standard_py.py`
- **变更**: 将配置结构从并行列表改为嵌套字典列表形式，与nan处理和归一化处理格式保持一致
- **优势**: 提高了代码的一致性和可维护性
- **格式示例**:
  ```python
  {
      'standard_ways': [
          {
              'col': 'col1',
              'method': 'Z-score标准化'
          },
          {
              'col': 'col2',
              'method': 'Min-Max标准化'
          },
          {
              'col': 'col3',
              'method': 'skip'
          }
      ]
  }
  ```

#### 3.2 标准化处理器更新
- **文件**: `myffe_package/myffe/preprocessing/standard_preprocessing.py`
- **变更**: 添加了对新的 standard_ways 格式的支持
- **功能**: 保持了对旧格式的兼容性，同时支持新格式
- **新增**: 添加了 'skip' 方法的支持，允许跳过指定列的标准化处理
- **优势**: 确保了平滑过渡，同时提高了代码的一致性和灵活性

#### 3.3 配置文件更新
- **文件**: `myffe_package/myffe/core/FFE_config.py`
- **变更**: 更新了默认标准化参数，使用新的 standard_ways 格式
- **功能**: 修改了条件检查，以适应新的参数格式

#### 3.4 跳过功能优化
- **文件**: `myffe_package/myffe/route/py_tools/standard_py.py`
- **变更**: 移除了对 'skip' 列的过滤，保留它们在配置中
- **优势**: 确保了配置的完整性，便于后续查看和修改

## 测试结果

- 新的配置结构被正确解析和使用
- 标签列被成功保留
- 所有缺失值都被正确填充
- 处理后的数据集质量得分有所提升
- 标准化模块的新配置格式工作正常
- 'skip' 功能成功实现，可跳过指定列的标准化处理
- 旧格式兼容性测试通过，确保了平滑过渡
- 标签列处理优化测试通过，确保标签列在处理过程中不被修改
- 函数参数优化测试通过，新的 `label_col` 参数被正确传递和使用
- 调用逻辑优化测试通过，减少了重复代码

## 兼容性

- 保持了与现有代码的兼容性
- 支持新的配置格式，同时保持对旧格式的支持

## 4. 指定列删除模块配置结构优化

### 4.1 配置结构优化
- **文件**: `myffe_package/myffe/route/py_tools/specify_py.py`
- **变更**: 更新了返回的配置结构，使用 `specify_ways` 嵌套字典列表形式
- **优势**: 与其他预处理模块的配置结构保持一致，提高了代码的一致性和可维护性
- **格式示例**:
  ```python
  {
      'specify_ways': [
          {
              'params': {
                  'drop_col': ['col1', 'col2'],
                  'drop_row': [0, 1]
              }
          }
      ]
  }
  ```

### 4.2 指定列删除处理器更新
- **文件**: `myffe_package/myffe/preprocessing/specify_preprocessing.py`
- **变更**: 添加了对新的 specify_ways 格式的支持
- **功能**: 保持了对旧格式的兼容性，同时支持新格式
- **优势**: 确保了平滑过渡，同时提高了代码的一致性

### 4.3 配置文件更新
- **文件**: `myffe_package/myffe/core/FFE_config.py`
- **变更**: 更新了默认指定列删除参数，使用新的 specify_ways 格式
- **功能**: 修改了条件检查，以适应新的参数格式

### 4.4 控制台调整
- **文件**: `myffe_package/myffe/core/FFE_console.py`
- **变更**: 更新了默认指定列删除参数，使用新的 specify_ways 格式
- **优势**: 确保了整个系统使用统一的参数格式

## 测试结果

- 新的配置结构被正确解析和使用
- 标签列被成功保留
- 所有缺失值都被正确填充
- 处理后的数据集质量得分有所提升
- 标准化模块的新配置格式工作正常
- 'skip' 功能成功实现，可跳过指定列的标准化处理
- 旧格式兼容性测试通过，确保了平滑过渡
- 标签列处理优化测试通过，确保标签列在处理过程中不被修改
- 函数参数优化测试通过，新的 `label_col` 参数被正确传递和使用
- 调用逻辑优化测试通过，减少了重复代码
- 指定列删除模块的新配置格式工作正常

## 兼容性

- 保持了与现有代码的兼容性
- 支持新的配置格式，同时保持对旧格式的支持

## 5. 异常值处理模块重构

### 5.1 函数分离与模块化
- **文件**: `myffe_package/myffe/preprocessing/function/outlierfunction/`
- **变更**: 将异常值处理函数分离到独立的模块中
- **新增文件**:
  - `thres_sigma_auto.py`: 基于标准差的异常值检测
  - `boxplot.py`: 基于箱线图的异常值检测
  - `isolation_forest.py`: 基于孤立森林的异常值检测
  - `multivariate.py`: 基于多变量的异常值检测
  - `__init__.py`: 包初始化文件
- **优势**: 提高了代码的可维护性和可读性，便于单独测试和调试

### 5.2 异常值处理器更新
- **文件**: `myffe_package/myffe/preprocessing/outlier_preprocessing.py`
- **变更**: 修改为使用分离出的函数
- **功能**: 移除了冗余代码，简化了方法实现
- **优势**: 减少了代码冗余，提高了代码的一致性

### 5.3 边界条件处理优化
- **文件**: `myffe_package/myffe/preprocessing/function/outlierfunction/`
- **变更**: 增强了边界条件处理
- **功能**:
  - 处理空参数情况
  - 处理不存在的列
  - 处理异常值比例边界值
  - 处理标准差倍数边界值
  - 处理只有一个数值列的情况
  - 处理没有数值列的情况
  - 处理多变量检测列数不足的情况
  - 处理空数据的情况
- **优势**: 提高了代码的鲁棒性和可靠性

### 5.4 字符串列处理
- **文件**: `myffe_package/myffe/preprocessing/function/outlierfunction/`
- **变更**: 优化了对字符串列的处理
- **功能**: 只对数值列进行异常值检测，保留所有字符串列
- **优势**: 确保了处理过程中字符串列的完整性

## 测试结果

- 新的异常值处理函数被正确调用和使用
- 标签列被成功保留
- 异常值被正确检测和处理
- 处理后的数据集质量得分有所提升
- 边界条件处理测试通过
- 字符串列处理测试通过
- 所有异常值处理方法工作正常

## 兼容性

- 保持了与现有代码的兼容性
- 支持原有的参数格式和调用方式

## 修复的问题

- 解决了nan处理模块的参数公用问题
- 确保了标签列在处理过程中的完整性
- 提高了代码的可读性和可维护性
- 增强了异常值处理模块的鲁棒性和可靠性

## 6. 标签列处理全面简化

### 6.1 设计理念变更
- **变更**: 所有 preprocessing 函数现在统一返回完整数据集（包含标签列）
- **原因**: 简化了数据处理流程，不再需要在中途分离和恢复标签列
- **优势**: 代码更简洁，逻辑更清晰

### 6.2 修改的文件
- **outlier_preprocessing.py**: 移除了删除标签列的逻辑，直接返回完整数据
- **relative_preprocessing.py**: 移除了删除标签列的逻辑，直接返回完整数据
- **sample_preprocessing.py**: 移除了分离和删除标签列的逻辑，直接处理完整数据
- **str_preprocessing.py**: 移除了分离标签列的逻辑，直接处理完整数据

### 6.3 FFE_console.py 简化
- **文件**: `myffe_package/myffe/core/FFE_console.py`
- **变更**: 移除了 `_process_single_batch` 方法中的标签列备份和恢复逻辑
- **变更**: 移除了主流程中的标签列分离和恢复代码
- **变更**: 简化了数据描述时的参数传递
- **优势**: 不再需要额外的数据分离和恢复操作，所有预处理函数统一接收和返回完整数据集

### 6.4 测试验证
- 输出数据包含完整的列（包括标签列）
- 数据形状正确
- 所有9个预处理工具正常执行

## 7. str_preprocessing 配置格式统一

### 7.1 配置结构优化
- **文件**: `myffe_package/myffe/route/py_tools/str_py.py`
- **变更**: 将 `clean_ways` 改为 `str_ways`，将 `str_choice` 改为 `method` 列表格式
- **优势**: 与其他预处理模块的配置结构保持一致
- **格式示例**:
  ```python
  {
      'str_ways': [
          {
              'method': ['label_encoder'],
              'str_cols': ['category'],
              'use_chinese_tokenizer': False,
              'feature_selection': False,
              'k_features': 100
          }
      ],
      'tfidf_min_df': 1,
      'tfidf_max_df': 1.0,
      ...
  }
  ```

### 7.2 str_preprocessing.py 更新
- **文件**: `myffe_package/myffe/preprocessing/str_preprocessing.py`
- **变更**: 新增支持 `str_ways` 新格式的解析逻辑
- **变更**: 保持对旧格式的兼容
- **修复**: 修复了目标编码中 `label_data` 未定义的 bug

### 7.3 FFE_config.py 更新
- **文件**: `myffe_package/myffe/core/FFE_config.py`
- **变更**: 更新默认参数，使用 `str_ways` 替代 `clean_ways`
- **变更**: 添加对新格式 skip 判断的支持

## 8. Bug 修复

### 8.1 nan_py.py 修复
- **文件**: `myffe_package/myffe/route/py_tools/nan_py.py`
- **问题**: 调用 `get_interactive_choice()` 时传入了不支持的参数 `handle_skip`
- **修复**: 移除了 `handle_skip` 参数
- **问题**: 函数返回值是单个 bool 值，但代码尝试解包为两个值
- **修复**: 改为接收单个返回值

### 8.2 FFE_config.py 字符串格式兼容
- **文件**: `myffe_package/myffe/core/FFE_config.py`
- **问题**: auto_route 返回的配置中有些值为字符串格式（如 `'skip'`），但 FFE_config 期望字典格式
- **修复**: 在 `_merge_params` 方法中添加字符串类型的判断，当 source 是字符串时直接跳过
- **代码**:
  ```python
  def _merge_params(self, target, source):
      if isinstance(source, str):
          return
      for key, value in source.items():
          ...
  ```

### 8.3 报告保存路径修复
- **文件**: `myffe_package/myffe/core/FFE_console.py`
- **问题**: 当报告目录为空字符串时尝试创建目录导致错误
- **修复**: 添加检查，确保报告目录非空时才创建

## 9. 测试验证

### 9.1 测试场景
- **简单流程测试**: 使用 `process_data()` 函数测试 - 通过
- **高级流程测试**: 使用 `FFE` 类和 `create_pipeline()` 测试 - 通过
- **自动推荐测试**: 使用 `auto_detect_route()` 测试 - 通过
- **命令行测试**: 使用 FFE_console 命令行工具测试 - 通过

### 9.2 测试结果
- 所有9个预处理工具正常执行
- 输出数据包含完整的列（包括标签列）
- 数据质量评估正常
- 处理时间正常

## 兼容性

- 保持了与现有代码的兼容性
- 支持新的配置格式，同时保持对旧格式的支持
- 所有测试通过