You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:12:57