blob: b1c9d8b35211f87255103ba7cce2eae58bdd957b [file] [log] [blame]
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.apache.samoa.instances;
/*
* #%L
* SAMOA
* %%
* Copyright (C) 2014 - 2015 Apache Software Foundation
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author abifet
*/
public class Attribute implements Serializable {
public static final String ARFF_ATTRIBUTE = "@attribute";
public static final String ARFF_ATTRIBUTE_NUMERIC = "NUMERIC";
public static final String ARFF_ATTRIBUTE_NOMINAL = "NOMINAL";
public static final String ARFF_ATTRIBUTE_DATE = "DATE";
/**
*
*/
protected boolean isNominal;
/**
*
*/
protected boolean isNumeric;
/**
*
*/
protected boolean isDate;
/**
*
*/
protected String name;
/**
*
*/
protected List<String> attributeValues;
/**
*
* @return
*/
public List<String> getAttributeValues() {
return attributeValues;
}
/**
*
*/
protected int index;
/**
*
* @param string
*/
public Attribute(String string) {
this.name = string;
this.isNumeric = true;
}
/**
*
* @param attributeName
* @param attributeValues
*/
public Attribute(String attributeName, List<String> attributeValues) {
this.name = attributeName;
this.attributeValues = attributeValues;
this.isNominal = true;
}
/**
*
*/
public Attribute() {
this("");
}
/**
*
* @return
*/
public boolean isNominal() {
return this.isNominal;
}
/**
*
* @return
*/
public String name() {
return this.name;
}
/**
*
* @param value
* @return
*/
public String value(int value) {
return attributeValues.get(value);
}
/**
*
* @return
*/
public boolean isNumeric() {
return isNumeric;
}
/**
*
* @return
*/
public int numValues() {
if (isNumeric()) {
return 0;
} else {
return attributeValues.size();
}
}
/**
*
* @return
*/
public int index() { // RuleClassifier
return this.index;
}
String formatDate(double value) {
SimpleDateFormat sdf = new SimpleDateFormat();
return sdf.format(new Date((long) value));
}
boolean isDate() {
return isDate;
}
private Map<String, Integer> valuesStringAttribute;
/**
*
* @param value
* @return
*/
public final int indexOfValue(String value) {
if (isNominal() == false) {
return -1;
}
if (this.valuesStringAttribute == null) {
this.valuesStringAttribute = new HashMap<String, Integer>();
int count = 0;
for (String stringValue : attributeValues) {
this.valuesStringAttribute.put(stringValue, count);
count++;
}
}
Integer val = (Integer) this.valuesStringAttribute.get(value);
if (val == null) {
return -1;
} else {
return val.intValue();
}
}
@Override
public String toString() {
StringBuffer text = new StringBuffer();
text.append(ARFF_ATTRIBUTE).append(" ").append(Utils.quote(this.name)).append(" ");
if (isNominal) {
text.append(ARFF_ATTRIBUTE_NOMINAL);
} else if (isNumeric) {
text.append(ARFF_ATTRIBUTE_NUMERIC);
} else if (isDate) {
text.append(ARFF_ATTRIBUTE_DATE);
}
return text.toString();
}
}