Metadata-Version: 2.4
Name: myffe
Version: 1.0.4
Summary: Feature Engineering Framework - A comprehensive tool for data preprocessing and feature engineering
Home-page: https://github.com/nan-luoyan-nan/myffe
Author: wbk
Author-email: 1757175380@qq.com
Keywords: feature engineering,machine learning,data preprocessing,data cleaning,data science,python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pandas>=1.3.0
Requires-Dist: numpy>=1.20.0
Requires-Dist: scikit-learn>=0.24.0
Requires-Dist: scipy>=1.6.0
Requires-Dist: imbalanced-learn>=0.8.0
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# myffe - 我的第一个特征工程

myffe 是 "My First Feature Engine" 的缩写，一个工业级的特征工程框架，提供完整的特征工程工具链，支持数据清洗、特征提取、样本处理等功能。

## 特性

- **模块化设计**：易于扩展和定制
- **多种预处理方法**：支持缺失值处理、异常值处理、标准化、归一化等
- **预定义路线**：提供 20+ 种预定义的特征工程路线
- **自动参数推荐**：智能推荐最佳预处理参数
- **工业级封装**：外部接口简洁易用
- **纯 Python 实现**：无需编译，跨平台兼容
- **完整的日志系统**：详细记录处理过程
- **数据评估功能**：评估数据质量和处理效果
- **可视化支持**：路线可视化和数据描述

## 安装

```bash
pip install myffe
```

## 快速开始

### 简单使用

```python
import pandas as pd
from myffe import process_data

# 读取数据
data = pd.read_csv('your_data.csv')

# 使用预定义路线 1（基础路线）处理数据
processed_data = process_data(data, data_label='label', route_number=1)
```

### 高级使用

```python
from myffe import FFE

# 创建 FFE 实例
ffe = FFE()

# 创建流水线
console, tools = ffe.create_pipeline('label', route_number=3)

# 处理数据
console(tools, data, save_path='processed_data.csv')
```

### 自动推荐路线

```python
from myffe import FFE

ffe = FFE()

# 自动检测数据并推荐路线
recommended_route = ffe.auto_detect_route(data)

# 使用推荐的路线处理数据
console, tools = ffe.create_pipeline('label', route=recommended_route)
console(tools, data, save_path='processed_data.csv')
```

## 预定义路线

myffe 提供 20+ 种预定义路线，适用于不同场景：

1. **基础路线** - 适合大多数数据集
2. **股票数据路线** - 专为股票数据优化
3. **文本数据路线** - 包含文本处理
4. **时间序列路线** - 强化时间特征提取
5. **完整路线** - 包含所有预处理步骤
6. **轻量级路线** - 快速处理小数据集
7. **异常检测路线** - 专注于异常值处理
8. **特征增强路线** - 强化特征工程
9. **分类数据路线** - 适合分类任务
10. **回归数据路线** - 适合回归任务
11. **中文文本路线** - 专为中文文本数据优化
12. **不平衡数据路线** - 处理类别不平衡的数据集
13. **高维数据路线** - 处理特征维度较高的数据集
14. **金融数据路线** - 专为金融数据优化
15. **医疗数据路线** - 适合医疗数据集的处理
16. **电商数据路线** - 专为电商数据优化
17. **社交媒体数据路线** - 处理社交媒体数据
18. **传感器数据路线** - 处理传感器数据
19. **多模态数据路线** - 处理包含多种类型数据的数据集
20. **实时数据路线** - 适合实时数据流处理

查看可用路线：

```python
from myffe import show_available_routes
show_available_routes()
```

## 核心模块

### 1. 数据预处理 (preprocessing)

#### 参数文档

详细的参数配置说明请参考 [参数文档](myffe/learning/all_parameters.md)，包含所有预处理模块的完整参数配置，包括占位参数。

- **nan\_preprocessing** - 缺失值处理
  - 支持多种填充策略：均值、中位数、众数、固定值、前向填充、后向填充、KNN填充、智能填充、集成填充(EI)等
  - 支持按列自定义填充方法
  - 支持缺失值比例统计和可视化
  - 智能推荐填充方法，根据数据类型和单调性自动选择最佳填充策略
  - 集成填充(EI)：通过集成多种填充策略（均值、中位数、众数）和多项式回归模型，对预测结果进行加权平均，提供更准确的填充结果。采用验证集评估各填充方法的性能，并根据性能分配不同权重，优化预测准确性。实现了智能迭代次数调整，从20-100之间随机选择初始迭代次数，并根据验证分数自动调整，确保在合理范围内（5-1000次）找到最佳结果。支持多项式阶数设置，可根据数据维度智能推荐：特征数量较少时使用较低阶数（2-3），特征数量较多时使用较高阶数（3-4），数据量特别大时（5000行以上）可适当增加阶数。特别适用于数据量充足（1000行以上）、特征数量适中（编码后不超过30个特征，原始列数量达到3个以上）、缺失比例合理（整体缺失行比例小于30%，目标列缺失比例在5%-40%之间）的数据集。支持自动推荐和手动选择，是处理复杂缺失值场景的强大工具
- **outlier\_preprocessing** - 异常值处理
  - 支持多种异常值检测方法：IQR、Z-score、Isolation Forest、Multivariate等
  - 支持异常值替换或删除
  - 支持异常值统计和可视化
- **str\_preprocessing** - 字符串处理
  - 支持文本清洗、分词、编码
  - 支持类别特征的one-hot编码、标签编码、频率编码
  - 支持文本特征提取（TF-IDF、LDA）
  - 支持中文文本处理和分词
- **time\_preprocessing** - 时间特征提取
  - 支持日期时间解析
  - 支持时间特征衍生：年、月、日、时、分、秒、星期、季度等
  - 支持时间差计算
  - 支持周期性特征编码（正弦/余弦）
- **standard\_preprocessing** - 数据标准化
  - 支持Z-score标准化
  - 支持Min-Max标准化
  - 支持MaxAbs标准化
  - 支持Robust标准化
  - 支持QuantileTransformer标准化
  - 支持均值归一化
  - 支持单位长度归一化
  - 支持自定义缩放
- **normalized\_preprocessing** - 数据归一化
  - 支持L1、L2归一化
  - 支持MaxAbs归一化
  - 支持Robust归一化
  - 支持幂次归一化
  - 支持对数归一化
  - 支持平方根归一化
- **sample\_preprocessing** - 样本处理
  - 支持数据采样
  - 支持类别平衡处理（SMOTE、ADASYN等）
  - 支持数据分割
- **relative\_preprocessing** - 相对特征处理
  - 支持特征间的线性组合
  - 支持特征重要性分析
  - 支持PCA/LDA降维
  - 支持核方法
- **specify\_preprocessing** - 指定特征处理
  - 支持自定义特征处理逻辑
  - 支持特征选择和变换
  - 支持列和行的删除

### 2. 路线配置 (route)

- **predefined\_routes** - 预定义路线
  - 提供 20+ 种预定义的特征工程路线
  - 支持路线参数获取和可视化
- **auto\_route** - 自动路线推荐
  - 基于数据特征自动推荐最佳处理路线
  - 支持自定义推荐策略
  - 提供详细的路线可视化
- **route\_config** - 路线配置
  - 支持路线参数的配置和管理
  - 支持路线的自定义和扩展

### 3. 工具 (tools)

- **datadescription** - 数据描述
  - 提供详细的数据统计信息
  - 支持数据质量评估
  - 支持数据分布可视化
- **datainspector** - 数据检查
  - 支持数据类型检查
  - 支持缺失值检测
  - 支持异常值检测
- **visualizeroute** - 路线可视化
  - 支持处理路线的可视化展示
  - 支持处理流程的图形化表示
- **logger** - 日志系统
  - 支持多级别日志
  - 支持控制台和文件日志
  - 支持处理过程的详细记录
  - 支持自定义日志路径
- **color\_printer** - 彩色打印
  - 支持彩色输出
  - 支持不同级别的信息展示
  - **限制**：在 Windows 终端中默认禁用颜色输出，以避免编码问题
- **interactive** - 交互式工具
  - 提供交互式数据处理界面
- **evaluation\_decorator** - 评估装饰器
  - 用于评估数据处理前后的质量变化
- **input\_utils** - 输入工具
  - 提供类型安全的交互式输入功能
  - 支持整数和浮点数输入
  - 自动进行范围验证和错误处理
- **system\_validator** - 系统验证
  - 验证系统状态和模块可用性
- **unified\_config\_manager** - 统一配置管理器
  - 管理所有预处理模块的配置参数

## 核心接口

### FFE 类

```python
class FFE:
    def __init__(self, log_level='info'):
        """初始化FFE框架
        
        Args:
            log_level (str): 日志级别，可选值: 'debug', 'info', 'warning', 'error'，默认为'info'
        """
    
    def create_pipeline(self, data_label, route_number=None, route=None, **kwargs):
        """创建特征工程流水线
        
        Args:
            data_label (str): 标签列名称，指定数据中的目标变量列
            route_number (int, optional): 预定义路线编号，1-20之间的整数，默认为None
            route (dict, optional): 自定义路线参数字典，由auto_detect_route生成，默认为None
            **kwargs: 其他参数，如batch_size等
        
        Returns:
            tuple: (console, tools) - 控制台实例和预处理工具字典
        """
    
    def auto_detect_route(self, data, label_columns=None, drop_threshold=0.5):
        """自动检测数据并推荐特征工程路线
        
        Args:
            data (DataFrame): 输入数据，pandas DataFrame格式
            label_columns (list, optional): 标签列名称列表，默认为None
            drop_threshold (float, optional): 缺失值阈值，超过此阈值的列会被丢弃，默认为0.5
        
        Returns:
            dict: 推荐的特征工程参数字典
        """
    
    def validate_system(self):
        """验证系统状态
        
        Returns:
            dict: 系统状态验证结果，包含各模块的状态信息
        """
```

### 便捷函数

- \*\*process\_data(data, data\_label, route\_number=None, route=None, save\_path='./processed\_data.csv', **kwargs)**
  - 便捷的数据处理函数，一站式完成数据预处理
  - 参数：
    - data (DataFrame): 输入数据，pandas DataFrame格式
    - data\_label (str): 标签列名称，指定数据中的目标变量列
    - route\_number (int, optional): 预定义路线编号，1-20之间的整数，默认为None
    - route (dict, optional): 自定义路线参数字典，由auto\_detect\_route生成，默认为None
    - save\_path (str): 处理后数据的保存路径，默认为'./processed\_data.csv'
    - \*\*kwargs: 其他参数，如batch\_size等
  - 返回：处理后的数据，pandas DataFrame格式
- **get\_recommended\_route(data, label\_columns=None)**
  - 获取推荐的特征工程路线
  - 参数：
    - data (DataFrame): 输入数据，pandas DataFrame格式
    - label\_columns (list, optional): 标签列名称列表，默认为None
  - 返回：推荐的路线参数字典
- **show\_available\_routes()**
  - 显示所有可用的预定义路线
  - 返回：路线列表，包含所有可用的预定义路线编号和名称
- **get\_route\_params(route\_number)**
  - 获取指定路线的参数
  - 参数：
    - route\_number (int): 路线编号，1-20之间的整数
  - 返回：路线参数字典，包含该路线的所有预处理步骤和参数
- **describe\_data(data)**
  - 描述数据，生成详细的数据统计信息
  - 参数：
    - data (DataFrame): 输入数据，pandas DataFrame格式
  - 返回：数据描述信息，包含数据基本信息、质量评估、分布情况等
- **evaluate\_dataset(data, label\_column=None)**
  - 评估数据集质量
  - 参数：
    - data (DataFrame): 输入数据，pandas DataFrame格式
    - label\_column (str, optional): 标签列名称，默认为None
  - 返回：评估指标字典，包含数据完整性、质量、特征质量等多个维度的评估结果
- **visualize\_route(route)**
  - 可视化路线，展示处理流程
  - 参数：
    - route (dict): 路线参数字典，由get\_route\_params或auto\_detect\_route生成
  - 返回：可视化结果，展示路线的处理流程和参数
- **set\_logging\_mode(mode)**
  - 设置全局日志模式
  - 参数：
    - mode (str): 日志模式，可选值: 'None', 'use', 'test'
  - 返回：无
- **set\_logging\_enabled(enabled)**
  - 控制控制台日志输出
  - 参数：
    - enabled (bool): 是否启用控制台输出，True为启用，False为禁用
  - 返回：无
- **set\_logging\_path(log\_path)**
  - 设置自定义日志文件路径
  - 参数：
    - log\_path (str): 自定义日志文件路径
  - 返回：无
- **get\_logging\_status()**
  - 获取当前日志状态
  - 参数：无
  - 返回：包含日志模式、控制台输出状态和日志文件路径的字典

### auto\_route 模块

```python
class auto_routes:
    def __init__(self, ways='pandas', tools=None, label_columns=None):
        """初始化自动路线生成器
        
        Args:
            ways (str): 数据读取方式，默认'pandas'
            tools (list, optional): 要配置的工具列表，默认None（执行所有工具）
            label_columns (list, optional): 标签列，默认None
        """
    
    def __call__(self, path, label_columns=None):
        """主调用函数
        
        Args:
            path (str): 数据集路径
            label_columns (list, optional): 标签列，默认None
        
        Returns:
            dict: 推荐的特征工程路线
        """
    
    def read(self, path):
        """读取数据集
        
        Args:
            path (str): 数据集路径
        
        Returns:
            DataFrame: 读取的数据集
        """
    
    def judge(self, label_columns=None):
        """评判数据集应该使用哪些清理方法
        
        Args:
            label_columns (list, optional): 标签列，默认None
        
        Returns:
            dict: 推荐的特征工程路线
        """
    
    def get_cleaning_info(self):
        """获取清理信息（只返回路线信息，不执行清理）
        
        Returns:
            str: 格式化的路线信息JSON字符串
        """
```

## 使用示例

### 示例 1：基础数据处理

```python
import pandas as pd
from myffe import process_data

# 创建示例数据
data = pd.DataFrame({
    'feature1': [1.0, 2.0, None, 4.0, 5.0],
    'feature2': ['A', 'B', 'A', None, 'C'],
    'label': [0, 1, 0, 1, 0]
})

# 处理数据
processed = process_data(data, data_label='label', route_number=1)
print(processed.head())
```

### 示例 2：自定义路线

```python
from myffe import FFE, get_route_params

# 获取路线 3 的参数
params = get_route_params(3)

# 创建 FFE 实例
ffe = FFE()

# 创建流水线
console, tools = ffe.create_pipeline('label', route=params)

# 处理数据
console(tools, data, save_path='output.csv')
```

### 示例 3：数据评估

```python
from myffe import FFE, evaluate_dataset, print_evaluation_result

ffe = FFE()

# 评估数据集
metrics = evaluate_dataset(data, label_column='label')
print_evaluation_result(metrics)
```

### 示例 4：自动推荐路线

```python
from myffe import FFE, process_data

# 创建示例数据
import pandas as pd
import numpy as np
data = pd.DataFrame({
    'feature1': np.random.randn(100),
    'feature2': np.random.randint(0, 10, 100),
    'feature3': np.random.choice(['A', 'B', 'C'], 100),
    'feature4': np.random.rand(100),
    'feature5': np.random.randn(100),
    'label': np.random.randint(0, 2, 100)
})
# 添加一些缺失值
data['feature1'][::10] = np.nan
data['feature4'][::15] = np.nan

# 获取推荐路线
ffe = FFE()
recommended_route = ffe.auto_detect_route(data, label_columns=['label'])
print(f"推荐路线: {recommended_route}")

# 使用推荐路线处理数据
processed = process_data(data, data_label='label', route=recommended_route)
print(f"处理后数据形状: {processed.shape}")
```

### 示例 5：系统验证

```python
from myffe import FFE

ffe = FFE()

# 验证系统状态
status = ffe.validate_system()
print(f"系统状态: {status}")
```

### 示例 6：使用 auto\_route 模块

```python
from myffe.route.src.auto_route import auto_routes

# 创建 auto_route 实例
auto_route = auto_routes()

# 生成推荐路线
route = auto_route('your_data.csv')
print(f"生成的路线: {route}")

# 获取清理信息
cleaning_info = auto_route.get_cleaning_info()
print(f"清理信息: {cleaning_info}")
```

## 日志系统

myffe 内置日志系统，支持多种日志模式和控制选项：

### 日志模式

- **None模式** - 不记录任何日志
- **use模式** - 生产环境模式，简洁的控制台输出
- **test模式** - 测试模式，详细的日志记录

### 日志控制函数

```python
from myffe import logger, set_logging_enabled, set_logging_mode, get_logging_status, set_logging_path

# 设置日志模式
set_logging_mode('use')  # 设置为生产环境模式
set_logging_mode('test') # 设置为测试模式
set_logging_mode('None') # 禁用日志

# 控制控制台输出
set_logging_enabled(True)  # 启用控制台输出
set_logging_enabled(False) # 禁用控制台输出

# 自定义日志路径
set_logging_path('D:/custom/logs/preprocessing.log')

# 获取当前日志状态
status = get_logging_status()
print(f"当前日志模式: {status['mode']}")
print(f"控制台输出: {status['console_enabled']}")
print(f"日志文件路径: {status['log_path']}")
```

### 日志文件

- **默认路径**：日志文件默认保存在用户主目录下的 `.myffe/logs` 文件夹中，例如：
  - Windows: `C:\Users\用户名\.myffe\logs\preprocessing.log`
  - Linux/macOS: `/home/用户名/.myffe/logs/preprocessing.log`
- **自定义路径**：可以使用 `set_logging_path` 函数自定义日志路径

### 示例：使用不同日志模式

```python
from myffe import FFE, process_data, set_logging_mode, set_logging_enabled
import pandas as pd
import numpy as np

# 创建示例数据
data = pd.DataFrame({
    'feature1': np.random.randn(100),
    'feature2': np.random.randint(0, 10, 100),
    'label': np.random.randint(0, 2, 100)
})

# 测试 None 模式
print("\n=== 测试 None 模式 ===")
set_logging_mode('None')
result = process_data(data, 'label', route_number=1, save_path=None)
print("处理完成，无日志输出")

# 测试 use 模式
print("\n=== 测试 use 模式 ===")
set_logging_mode('use')
set_logging_enabled(True)  # 启用控制台输出
result = process_data(data, 'label', route_number=1, save_path=None)

# 测试 test 模式
print("\n=== 测试 test 模式 ===")
set_logging_mode('test')
set_logging_enabled(True)  # 启用控制台输出
result = process_data(data, 'label', route_number=1, save_path=None)
```

## 系统要求

- Python >= 3.7
- pandas >= 1.3.0
- numpy >= 1.20.0
- scikit-learn >= 0.24.0
- scipy >= 1.6.0
- imbalanced-learn >= 0.8.0 (用于高级采样方法)

## 许可证

GNU General Public License v3.0

## 贡献

欢迎贡献代码！请提交 Issue 或 Pull Request。

## 版本历史

- **1.0.4** - 重构了多个处理模块，优化了配置结构，采用嵌套字典列表形式，确保每个列的参数独立设置。增加了标签列分离处理，确保标签列在处理过程中不被修改，提高了代码的可读性和可维护性。修复了多个bug，确保新配置格式被正确识别。测试了所有9个清理工具，确保功能正常运行。简化了标签列处理逻辑，所有preprocessing函数现在统一返回完整数据集（包含标签列）。统一了配置格式，与其他工具保持一致。

### 1.0.4 版本主要更新内容

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

- **配置结构优化**：将配置结构从并行列表改为嵌套字典列表形式，解决了参数公用问题，确保每个列的参数独立设置
- **标签列处理优化**：增加了 `label_col` 参数，用于标签列分离，确保标签列在处理过程中不被修改
- **函数参数优化**：为KNN、智能填充、EI填充等方法添加了 `label_col` 参数，函数内部实现标签列分离
- **调用逻辑优化**：移除了在调用前手动分离标签列的逻辑，直接将 `label_col` 参数传递给处理函数
- **配置文件更新**：更新了默认参数结构以支持新的nan配置
- **控制台调整**：将 `nan_preprocessing` 添加到需要标签列的工具列表中

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

- **配置结构优化**：将配置结构从并行列表改为嵌套字典列表形式，与nan处理格式保持一致
- **归一化处理器更新**：添加了对新的 normalized\_ways 格式的支持，保持了对旧格式的兼容性
- **配置文件更新**：更新了默认归一化参数，使用新的 normalized\_ways 格式
- **控制台调整**：更新了默认归一化参数，使用新的 normalized\_ways 格式

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

- **配置结构优化**：将配置结构从并行列表改为嵌套字典列表形式，与nan处理和归一化处理格式保持一致
- **标准化处理器更新**：添加了对新的 standard\_ways 格式的支持，保持了对旧格式的兼容性，新增了 'skip' 方法的支持
- **配置文件更新**：更新了默认标准化参数，使用新的 standard\_ways 格式
- **跳过功能优化**：移除了对 'skip' 列的过滤，保留它们在配置中

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

- **配置结构优化**：更新了返回的配置结构，使用 `specify_ways` 嵌套字典列表形式，与其他预处理模块的配置结构保持一致
- **指定列删除处理器更新**：添加了对新的 specify\_ways 格式的支持，保持了对旧格式的兼容性
- **配置文件更新**：更新了默认指定列删除参数，使用新的 specify\_ways 格式
- **控制台调整**：更新了默认指定列删除参数，使用新的 specify\_ways 格式

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

- **函数分离与模块化**：将异常值处理函数分离到独立的模块中，提高了代码的可维护性和可读性
- **异常值处理器更新**：修改为使用分离出的函数，移除了冗余代码，简化了方法实现
- **边界条件处理优化**：增强了边界条件处理，提高了代码的鲁棒性和可靠性
- **字符串列处理**：优化了对字符串列的处理，只对数值列进行异常值检测，保留所有字符串列

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

- **设计理念变更**：所有 preprocessing 函数现在统一返回完整数据集（包含标签列），简化了数据处理流程
- **修改的文件**：outlier\_preprocessing.py、relative\_preprocessing.py、sample\_preprocessing.py、str\_preprocessing.py
- **FFE\_console.py 简化**：移除了标签列备份和恢复逻辑，简化了数据描述时的参数传递

#### 7. str\_preprocessing 配置格式统一

- **配置结构优化**：将 `clean_ways` 改为 `str_ways`，将 `str_choice` 改为 `method` 列表格式，与其他预处理模块的配置结构保持一致
- **str\_preprocessing.py 更新**：新增支持 `str_ways` 新格式的解析逻辑，保持对旧格式的兼容，修复了目标编码中 `label_data` 未定义的 bug
- **FFE\_config.py 更新**：更新默认参数，使用 `str_ways` 替代 `clean_ways`，添加对新格式 skip 判断的支持

#### 8. Bug 修复

- **nan\_py.py 修复**：修复了调用 `get_interactive_choice()` 时传入了不支持的参数 `handle_skip` 的问题
- **FFE\_config.py 字符串格式兼容**：修复了 auto\_route 返回的配置中有些值为字符串格式的问题
- **报告保存路径修复**：修复了当报告目录为空字符串时尝试创建目录导致错误的问题

#### 9. 测试验证

- **测试场景**：简单流程测试、高级流程测试、自动推荐测试、命令行测试
- **测试结果**：所有9个预处理工具正常执行，输出数据包含完整的列（包括标签列），数据质量评估正常，处理时间正常

### 详细更新日志

更多详细的更新信息，请查看 [1.0.4 更新日志](./update_log/1.0.4.md) 文件。

- **1.0.3** - 优化标签列处理逻辑，确保预处理过程中标签列的安全性，同时修复了多个参数传递和兼容性问题。增强时间处理模块，支持多时间列独立处理，每列可配置不同的处理类型（basic/advance），采用嵌套字典结构管理配置，保留原始时间列，同时生成丰富的时间特征，包括年、月、日、时、分、秒、星期、季度等，以及正弦/余弦编码的周期性特征，确保时间特征的有效提取和保留。全面测试验证所有功能，包括时间处理模块的深度测试、智能推荐功能测试、多时间列独立处理测试等，确保所有预处理方法能在不同配置下正确工作。优化性能，提高处理速度和效率，为特征工程提供更稳定、更可靠的支持
- **1.0.2** - 优化缺失值处理模块，简化代码结构，删除冗余函数（包括drop\_high\_missing），改进KNN填充和智能填充实现，支持只处理指定列，提高处理效率；优化归一化处理模块和标准化处理模块，增强交互式选择的安全性，确保用户必须选择有效的选项
- **1.0.1** - 优化日志系统，使用用户主目录作为默认日志路径，添加自定义日志路径功能，更新tools模块接口，确保外部接口简洁易用，将`交互式.py`重命名为`interactive.py`，修复编码问题，全面测试验证所有功能
- **1.0.0** - 正式发布版本，包含完整的特征工程工具链
- **3.3.4** - 修复日志系统，添加日志模式控制功能
- **3.3.2** - 修复导入路径和bug
- **3.3.1** - 优化自动路线推荐
- **3.3.0** - 初始版本

## 测试结果

myffe 库经过全面的测试验证，确保所有功能正常运行。测试覆盖以下方面：

- **基础功能测试**：数据预处理、特征提取、样本处理等核心功能
- **高级功能测试**：流水线创建、自动路线推荐、数据评估等
- **工具模块测试**：日志系统、数据描述、路线可视化等
- **异常处理测试**：处理缺失值、异常值、边界情况等
- **性能测试**：处理不同规模数据集的性能
- **接口测试**：所有核心接口和便捷函数

所有测试均已通过，确保库在各种场景下的可靠性和稳定性。

## 联系方式

- Email: <1757175380@qq.com>
- GitHub: <https://github.com/nan-luoyan-nan/myffe>



# 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个预处理工具正常执行
- 输出数据包含完整的列（包括标签列）
- 数据质量评估正常
- 处理时间正常

## 兼容性

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