求助:基于Simpful利用规则对Excel文件进行模糊化处理
用Simpful实现Excel数值变量模糊化处理
步骤1:安装依赖库
首先确保安装所需的Python库:
pip install simpful pandas
步骤2:完整实现代码
以下是可直接复用的代码,包含Excel读取、数值列识别、模糊规则定义与映射:
import pandas as pd from simpful import FuzzySet, LinguisticVariable # 1. 读取目标Excel文件 df = pd.read_excel("你的目标文件路径.xlsx") # 2. 定义模糊规则对应的语言变量 def init_fuzzy_variables(): # 年龄的模糊区间规则:50-59标记为FIFTIES age_lv = LinguisticVariable( { "FIFTIES": FuzzySet(points=[(49, 0), (50, 1), (59, 1), (60, 0)]), # 可扩展其他区间,比如"FOURTIES": FuzzySet(points=[(39,0), (40,1), (49,1), (50,0)]) }, concept="Age" ) # EVOL的模糊区间规则:10-15标记为10to15 evol_lv = LinguisticVariable( { "10to15": FuzzySet(points=[(9, 0), (10, 1), (15, 1), (16, 0)]), # 可扩展其他区间,比如"5to9": FuzzySet(points=[(4,0), (5,1), (9,1), (10,0)]) }, concept="EVOL" ) # 返回列名与对应语言变量的映射 return {"Age": age_lv, "EVOL": evol_lv} # 3. 初始化模糊变量映射 fuzzy_mappings = init_fuzzy_variables() # 4. 仅对数值型变量应用模糊化处理 numeric_cols = df.select_dtypes(include=["int64", "float64"]).columns for col in numeric_cols: if col in fuzzy_mappings: # 对每个数值,匹配对应模糊标签(取匹配度最高的标签) lv = fuzzy_mappings[col] df[col] = df[col].apply( lambda x: max(lv.get_fuzzy_values(x).items(), key=lambda item: item[1])[0] ) # 未定义模糊规则的数值列,保持原数值不变 # 5. 保存处理后的Excel文件 df.to_excel("模糊化处理结果.xlsx", index=False)
关键说明
- 模糊集定义:
FuzzySet的points参数采用[区间左边界外值, 0, 区间左边界, 1, 区间右边界, 1, 区间右边界外值, 0]格式,确保区间内数值的匹配度为1,精准映射到目标标签。 - 分类变量保留:通过
select_dtypes仅筛选数值型列处理,分类列自动保持原有状态。 - 规则扩展:如需添加其他数值列的模糊规则,只需在
init_fuzzy_variables函数中新增对应的LinguisticVariable,并更新映射字典即可。
内容的提问来源于stack exchange,提问作者SVP
相关产品推荐
相关产品推荐

