我想在weka java中显示每个属性值的实例数

时间:2016-10-07 17:25:21

标签: java weka

package test;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ArffLoader.ArffReader;

public class main {

    public static void main(String[] args) {
        String s = null;
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(
                new FileReader(
                    "C:\\Program Files\\Weka-3-8\\data\\weather.numeric.arff"
                )
            );
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        ArffReader arff = null;
        try {
            arff = new ArffReader(reader);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Instances data = arff.getData();
        data.setClassIndex(data.numAttributes() - 1);
        System.out.println("The number of attributes is  : " +data.numAttributes());
        for(int i= 0; i< data.numAttributes(); i++){
            if(data.attribute(i).isNominal()){
                s = data.attribute(i).name().toString();
                System.out.println(
                    "the " + s + " attribute is nominal and takes "
                    + data.attribute(i).numValues() + " values"
                );
            }
        }
    }
}

在上面的代码中,我为每个属性显示了它所采用的值的数量,但是我希望显示它所需的值(字符串) 我正在处理 weather.numeric.arff 文件。 这是文件描述:

@relation weather

@attribute outlook {sunny, overcast, rainy}
@attribute temperature numeric
@attribute humidity numeric
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}

@data
sunny,85,85,FALSE,no
sunny,80,90,TRUE,no
overcast,83,86,FALSE,yes
rainy,70,96,FALSE,yes
rainy,68,80,FALSE,yes
rainy,65,70,TRUE,no
overcast,64,65,TRUE,yes
sunny,72,95,FALSE,no
sunny,69,70,FALSE,yes
rainy,75,80,FALSE,yes
sunny,75,70,TRUE,yes
overcast,72,90,TRUE,yes
overcast,81,75,FALSE,yes
rainy,71,91,TRUE,no

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码打印名义属性的字符串值:data.attribute(attributeNo).value(position)

其中attributeNo是属性的编号,position是一个整数,表示.arff文件中定义的标称值的位置。

e.g data.attribute(0).value(0)是属性的展望,晴天的名义价值