weka数据挖掘拾遗(三)----再谈如果何生成arff

时间:2023-01-12 23:43:34

前一阵子写过一个arff的随笔,但是写完后发现有些啰嗦。其实如果使用weka自带的api,生成arff文件将变成一件很简单的事儿。

首先,可以先把特征文件生成csv格式的。csv格式就是每列数据都用逗号分隔的一种格式。(还有不清楚的googling一下就知道了)

一、首先看下特征文件怎么保存成csv格式。

1、首行为特征名,以逗号分隔。

2、除首行外的行都为数据行,每列数据都是首行对应的值。(可以是字符串,数字)

例:weka数据挖掘拾遗(三)----再谈如果何生成arff

二、通过weka的api把上面的csv转化成arff格式文件

  1、weka代码

weka数据挖掘拾遗(三)----再谈如果何生成arffweka数据挖掘拾遗(三)----再谈如果何生成arff
 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     }
View Code

 

weka数据挖掘拾遗(三)----再谈如果何生成arffweka数据挖掘拾遗(三)----再谈如果何生成arff
 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     }
View Code

 

三、总结

  从上面的代码能看出,如果已经生成了csv格式的特征文件,那么生成arff文件也就是几行代码的事情。其实,如果生成了csv格式的特征文件,那么weka是直接可以读取的,之后使用 Instances data = csvLoader.getDataSet(); 这行代码其实就是把数据存到了Instances中,而Instances其实就是保存的arff格式的文件。如果没有其它必要,使用weka时,使用以csv格式的特征文件也是可以的,不必要非得转化成arff格式。