Feature Engineering Framework - A comprehensive tool for data preprocessing and feature engineering
Project description
myffe - 我的第一个特征工程
myffe 是 "My First Feature Engine" 的缩写,一个工业级的特征工程框架,提供完整的特征工程工具链,支持数据清洗、特征提取、样本处理等功能。
特性
- 模块化设计:易于扩展和定制
- 多种预处理方法:支持缺失值处理、异常值处理、标准化、归一化等
- 预定义路线:提供 20+ 种预定义的特征工程路线
- 自动参数推荐:智能推荐最佳预处理参数
- 工业级封装:外部接口简洁易用
- 纯 Python 实现:无需编译,跨平台兼容
- 完整的日志系统:详细记录处理过程
- 数据评估功能:评估数据质量和处理效果
- 可视化支持:路线可视化和数据描述
安装
pip install myffe
快速开始
简单使用
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)
高级使用
from myffe import FFE
# 创建 FFE 实例
ffe = FFE()
# 创建流水线
console, tools = ffe.create_pipeline('label', route_number=3)
# 处理数据
console(tools, data, save_path='processed_data.csv')
自动推荐路线
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+ 种预定义路线,适用于不同场景:
- 基础路线 - 适合大多数数据集
- 股票数据路线 - 专为股票数据优化
- 文本数据路线 - 包含文本处理
- 时间序列路线 - 强化时间特征提取
- 完整路线 - 包含所有预处理步骤
- 轻量级路线 - 快速处理小数据集
- 异常检测路线 - 专注于异常值处理
- 特征增强路线 - 强化特征工程
- 分类数据路线 - 适合分类任务
- 回归数据路线 - 适合回归任务
- 中文文本路线 - 专为中文文本数据优化
- 不平衡数据路线 - 处理类别不平衡的数据集
- 高维数据路线 - 处理特征维度较高的数据集
- 金融数据路线 - 专为金融数据优化
- 医疗数据路线 - 适合医疗数据集的处理
- 电商数据路线 - 专为电商数据优化
- 社交媒体数据路线 - 处理社交媒体数据
- 传感器数据路线 - 处理传感器数据
- 多模态数据路线 - 处理包含多种类型数据的数据集
- 实时数据路线 - 适合实时数据流处理
查看可用路线:
from myffe import show_available_routes
show_available_routes()
核心模块
1. 数据预处理 (preprocessing)
参数文档
详细的参数配置说明请参考 参数文档,包含所有预处理模块的完整参数配置,包括占位参数。
- 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 类
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 模块
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:基础数据处理
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:自定义路线
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:数据评估
from myffe import FFE, evaluate_dataset, print_evaluation_result
ffe = FFE()
# 评估数据集
metrics = evaluate_dataset(data, label_column='label')
print_evaluation_result(metrics)
示例 4:自动推荐路线
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:系统验证
from myffe import FFE
ffe = FFE()
# 验证系统状态
status = ffe.validate_system()
print(f"系统状态: {status}")
示例 6:使用 auto_route 模块
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模式 - 测试模式,详细的日志记录
日志控制函数
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
- Windows:
- 自定义路径:可以使用
set_logging_path函数自定义日志路径
示例:使用不同日志模式
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 更新日志 文件。
- 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 - 变更: 将配置结构从并行列表改为嵌套字典列表形式
- 优势: 解决了参数公用问题,确保每个列的参数独立设置
- 参数占位: 为所有可能的参数添加了占位机制,未被选中的参数使用默认值填充
- 格式示例:
{ '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处理格式保持一致
- 优势: 提高了代码的一致性和可维护性
- 格式示例:
{ '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处理和归一化处理格式保持一致
- 优势: 提高了代码的一致性和可维护性
- 格式示例:
{ '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嵌套字典列表形式 - 优势: 与其他预处理模块的配置结构保持一致,提高了代码的一致性和可维护性
- 格式示例:
{ '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列表格式 - 优势: 与其他预处理模块的配置结构保持一致
- 格式示例:
{ '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 是字符串时直接跳过 - 代码:
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个预处理工具正常执行
- 输出数据包含完整的列(包括标签列)
- 数据质量评估正常
- 处理时间正常
兼容性
- 保持了与现有代码的兼容性
- 支持新的配置格式,同时保持对旧格式的支持
- 所有测试通过
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file myffe-1.0.4.tar.gz.
File metadata
- Download URL: myffe-1.0.4.tar.gz
- Upload date:
- Size: 162.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e90c967a0b8ca9dbadd472b2608bb02ea17c1cdefb20da5eaec49ffa09c80bf6
|
|
| MD5 |
1da0c6c7be409ca0a5bd4e687a2adbf9
|
|
| BLAKE2b-256 |
ab21c36a78976176fc5e3357a7860fcdb7bae18077be9205c3ace815b7ac2152
|
File details
Details for the file myffe-1.0.4-py3-none-any.whl.
File metadata
- Download URL: myffe-1.0.4-py3-none-any.whl
- Upload date:
- Size: 171.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a9c6faa66a32f8b6f70b77478ea9291f28a99fd5e0e0c4ab926c18f006f5e55
|
|
| MD5 |
868b8b987551687a0aa7186bf66cbcb7
|
|
| BLAKE2b-256 |
76976268b05b2a30b21c13fc71699440d929d2e92d8e510e5ad830e3567c924a
|