【问题标题】:Using Weka Java Code - How Convert CSV (without header row) to ARFF Format?使用 Weka Java 代码 - 如何将 CSV(无标题行)转换为 ARFF 格式?
【发布时间】:2011-03-31 20:07:36
【问题描述】:

我正在使用 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 源代码来弄清楚这一点,但我无法弄清楚它的正面或反面 :-(

【问题讨论】:

    标签: java csv weka arff


    【解决方案1】:

    简短的回答是,您不能在文件中读取之后分配属性名称。

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

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

    my answer to your question on the weka mailing list

    【讨论】:

    • 谢谢。我会试试的。我假设我对邮件列表的问题在洗牌中丢失了:-(
    • 别担心,通过不同的途径询问是个好主意 :)
    【解决方案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

    【讨论】:

    【解决方案3】:

    我的解决方案:

    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 文件的第一行。

    【讨论】:

    • 这个解决方案似乎有点不合适,但还可以。
    猜你喜欢
    • 2012-05-07
    • 1970-01-01
    • 2015-05-21
    • 2020-09-14
    • 2015-11-20
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多