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
答案 0 :(得分:1)
您可以使用以下代码打印名义属性的字符串值:data.attribute(attributeNo).value(position)
其中attributeNo
是属性的编号,position
是一个整数,表示.arff
文件中定义的标称值的位置。
e.g
data.attribute(0).value(0)
是属性的展望,晴天的名义价值