如何将数据文件转换为Weka软件可正常读取的.arff格式文件
正确转换.arff格式的操作方案
失败原因说明
- 直接修改文件后缀的方式不可行:.arff格式需要包含专属的元数据头部(
@relation、@attribute定义),仅修改后缀缺少必要结构会触发报错 - 通过arff viewer转换失败:你的数据集
BareNucloi列存在?格式的缺失值,且属性类型未提前适配Weka要求,工具无法自动识别处理
方案1:Python直接生成.arff(最稳妥)
- 安装依赖库
pip install liac-arff pandas numpy - 转换代码:
import pandas as pd import arff import numpy as np # 读取原始数据 data = pd.read_csv('breast-cancer-wisconsin.data', header=None) data.columns = ['code','Clump Thickness','UniformityOfCellSize','UniformityOfCellShape','MarginalAdhesion','SingleEpithelialCellSize','BareNucloi','BlandChromatin','NormalNucleoli','Mitoses','Class'] # 处理缺失值:将?替换为NaN,适配arff格式的缺失值定义 data['BareNucloi'] = pd.to_numeric(data['BareNucloi'], errors='coerce') # 定义arff结构 arff_data = { 'relation': 'breast_cancer_wisconsin', 'attributes': [ ('code', 'NUMERIC'), ('Clump_Thickness', 'NUMERIC'), ('UniformityOfCellSize', 'NUMERIC'), ('UniformityOfCellShape', 'NUMERIC'), ('MarginalAdhesion', 'NUMERIC'), ('SingleEpithelialCellSize', 'NUMERIC'), ('BareNucloi', 'NUMERIC'), ('BlandChromatin', 'NUMERIC'), ('NormalNucleoli', 'NUMERIC'), ('Mitoses', 'NUMERIC'), ('Class', ['2', '4']) # 标注为分类属性,符合Weka分类任务要求 ], 'data': data.values.tolist() } # 保存为arff文件 with open('breast-cancer-wisconsin.arff', 'w', encoding='utf-8') as f: arff.dump(arff_data, f)
方案2:Weka可视化界面转换
- 打开Weka,进入「Preprocess」标签页,点击「Open file」,文件类型选择CSV,打开你已转换的.csv文件
- 处理缺失值:在属性列表选中
BareNucloi,点击「Edit」按钮,将所有值为?的单元格清空,或选择过滤器unsupervised.attribute.ReplaceMissingValues一键填充缺失值 - 适配属性类型:右键
Class属性,选择「Convert to nominal」,将标签转为分类类型 - 点击「Save」按钮,文件类型选择ARFF,保存即可得到可正常打开的.arff文件
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

