6

我正在使用 Weka Java 库读取 CSV 文件并将其转换为 ARFF 文件

问题是CSV 文件没有标题行,只有数据。导入 CSV 文件后如何分配属性名称?(所有列都是字符串数据类型)

这是我到目前为止的代码:

    CSVLoader loader = new CSVLoader();
    loader.setSource(new File(CSVFilePath));
    Instances data = loader.getDataSet();

    ArffSaver saver = new ArffSaver();
    saver.setInstances(data);
    saver.setFile(new File(outputFilePath));
    saver.writeBatch();

我试图通过 Weka 源代码来解决这个问题,但我无法确定它的正面或反面:-(

4

3 回答 3

6

简短的回答是,您在读入文件无法分配属性名称。

CSVLoader 假定 CSV 的第一行是标题。如果这是一个实例,它将使用该实例数据作为标题行而不是实例数据,这绝对不是您想要的。

在上面的代码之前,您需要将文件读入,写一个标题行,然后再次保存文件。

在 weka 邮件列表上查看我对您问题的回答

于 2010-08-19T04:22:19.723 回答
4

如果数据中没有标题行,则可以使用选项 -H。

CSVLoader loader = new CSVLoader();
loader.setSource(new File(CSVFilePath));

String[] options = new String[1]; 
options[0] = "-H";
loader.setOptions(options);

Instances data = loader.getDataSet();

见: http ://weka.sourceforge.net/doc.dev/weka/core/converters/CSVLoader.html

于 2014-04-10T11:26:20.053 回答
1

我的解决方案:

SELECT 'nameColumn1','nameColumn2'
UNION
SELECT idColumn1,idColumn2
FROM path
 INTO OUTFILE '/tmp/w.csv'
 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
 LINES TERMINATED BY '\n';

nameColumn1 和 nameColumn2 是将显示为 csv 文件第一行的列标题。

于 2013-11-20T17:20:37.677 回答