使用Weka Java代码 - 如何将CSV(无标题行)转换为ARFF格式?

时间:2010-08-18 22:17:46

标签: java csv weka arff

我正在使用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源代码来解决这个问题,但我无法做出正面或反面: - (

3 个答案:

答案 0 :(得分:5)

简短的回答是,在中读取文件之后,您无法指定的属性名称。

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

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

请参阅my answer to your question on the weka mailing list

答案 1 :(得分:2)

如果数据中没有标题行,则可以使用-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

答案 2 :(得分: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文件第一行的列标题。