使用 Weka Java 代码 - 如何将 CSV(无标题行)转换为 ARFF 格式?
Posted
技术标签:
【中文标题】使用 Weka Java 代码 - 如何将 CSV(无标题行)转换为 ARFF 格式?【英文标题】:Using Weka Java Code - How Convert CSV (without header row) to ARFF Format? 【发布时间】: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 源代码来弄清楚这一点,但我无法弄清楚它的正面或反面 :-(
【问题讨论】:
【参考方案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
【讨论】:
现在好像有一个速记,loader.setNoHeaderRowPresent(true)
。见:weka.sourceforge.net/doc.dev/weka/core/converters/…【参考方案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 文件的第一行。
【讨论】:
这个解决方案似乎有点不合适,但还可以。以上是关于使用 Weka Java 代码 - 如何将 CSV(无标题行)转换为 ARFF 格式?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有 Java 代码的 WEKA 评估类来显示标准差值