package shared.filt;
import shared.AttributeType;
import shared.DataSet;
import shared.DataSetDescription;
import shared.Instance;
/**
* A continuous to discrete filter
* @author Andrew Guillory gtg008g@mail.gatech.edu
* @version 1.0
*/
public class ContinuousToDiscreteFilter implements DataSetFilter {
/**
* The number of bins
*/
private int numberOfBins;
/**
* Make a new continuous to discrete filter
* @param numberOfBins the number of bins
*/
public ContinuousToDiscreteFilter(int numberOfBins) {
this.numberOfBins = numberOfBins;
}
/**
* @see shared.filt.DataSetFilter#filter(shared.DataSet)
*/
public void filter(DataSet dataSet) {
if (dataSet.getDescription() == null) {
dataSet.setDescription(new DataSetDescription(dataSet));
}
DataSetDescription oldDescription = dataSet.getDescription();
// for each instance
for (int i = 0; i < dataSet.size(); i++) {
Instance instance = dataSet.get(i);
for (int j = 0; j < oldDescription.getAttributeCount(); j++) {
if (oldDescription.getAttributeTypes()[j] == AttributeType.CONTINUOUS) {
double cv = instance.getContinuous(j);
int dv = (int) ((cv - oldDescription.getMin(j))
* numberOfBins / oldDescription.getRange(j));
instance.getData().set(j, dv);
}
}
}
// the description is no longer valid so generate a new one
dataSet.setDescription(new DataSetDescription(dataSet));
dataSet.getDescription().setLabelDescription(new DataSetDescription(dataSet.getLabelDataSet()));
}
}