0

Python 中 arff 库中的dump命令使用户能够根据给定的输入创建 arff 文件,例如命令:

arff.dump("outputDir", data, relation="relation1",
          names=['age, fatRatio, hairColor'])

产生以下 arff:

@relation relation1
@attribute age real
@attribute hairColor string
@data
10,0.2,black
22,10,yellow
30,2,black

对于给定的数据:

data = [[10,0.2,'black'],[22,10,'yellow'],[30,2,'black']]

我的问题是:如何通知相关机制我希望它hairColor是一个名义属性,即我希望我的 arff 标头如下:

@relation relation1
@attribute age real
@attribute hairColor **nominal**
@data
...
4

1 回答 1

0

这里列出了几种不同的方法来做到这一点:

https://code.google.com/p/arff/wiki/Documentation

我认为对我来说更好的方法是推荐这个的第二种方法:

arff_writer = arff.Writer(fname, relation='diabetics_data', names)
arff_writer.pytypes[arff.nominal] = '{not_parasite,parasite}'
arff_writer.write([arff.nominal('parasite')])

如果您查看 arff.nominal 的代码,它的定义如下:

class Nominal(str):
    """Use this class to wrap strings which are intended to be nominals
    and shouldn't have enclosing quote signs."""
    def __repr__(self):
        return self

所以我所做的是为我的属性中的每个标称创建一个不同的“包装器”标称类,如下所示:

class ZipCode(str):
    """Use this class to wrap strings which are intended to be nominals
    and shouldn't have enclosing quote signs."""
    def __repr__(self):
        return self

然后按照上面的代码,您可以执行以下操作:

arff_writer = arff.Writer(fname, relation='neighborhood_data', names)
arff_writer.pytypes[type(myZipCodeObject)] = '{85104,84095}'
# then write out the rest of your attributes...

arff_writer.write([arff.nominal('parasite')])
于 2013-06-11T02:42:40.987 回答