前一阵子写过一个arff的随笔,但是写完后发现有些啰嗦。其实如果使用weka自带的api,生成arff文件将变成一件很简单的事儿。
首先,可以先把特征文件生成csv格式的。csv格式就是每列数据都用逗号分隔的一种格式。(还有不清楚的googling一下就知道了)
一、首先看下特征文件怎么保存成csv格式。
1、首行为特征名,以逗号分隔。
2、除首行外的行都为数据行,每列数据都是首行对应的值。(可以是字符串,数字)
例:
二、通过weka的api把上面的csv转化成arff格式文件
1、weka代码
1 public static void genArffFile(String input , String output){ 2 try{ 3 File file = new File(input); 4 CSVLoader csvLoader = new CSVLoader(); 5 csvLoader.setSource(file); 6 Instances data = csvLoader.getDataSet(); 7 savaInstances(data, output); 8 }catch(Exception e){ 9 e.printStackTrace(); 10 } 11 }
1 /** 2 * @function 保存Arff文件 3 * @param data arff格式的数据 4 * @param outputPath 数据保存路径 5 * @return 6 */ 7 public static boolean savaInstances(Instances data , String outputPath) 8 { 9 try{ 10 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( 11 new FileOutputStream(outputPath), Charset.forName("utf-8"))); 12 13 bw.write(data.toString()); 14 bw.close(); 15 }catch(Exception e){ 16 e.printStackTrace(); 17 return false; 18 } 19 return true; 20 }
三、总结
从上面的代码能看出,如果已经生成了csv格式的特征文件,那么生成arff文件也就是几行代码的事情。其实,如果生成了csv格式的特征文件,那么weka是直接可以读取的,之后使用 Instances data = csvLoader.getDataSet(); 这行代码其实就是把数据存到了Instances中,而Instances其实就是保存的arff格式的文件。如果没有其它必要,使用weka时,使用以csv格式的特征文件也是可以的,不必要非得转化成arff格式。