package de.tud.inf.operator.fingerprints; import java.util.Iterator; import java.util.List; import com.rapidminer.example.Example; import com.rapidminer.operator.IOObject; import com.rapidminer.operator.Operator; import com.rapidminer.operator.OperatorDescription; import com.rapidminer.operator.OperatorException; import com.rapidminer.parameter.ParameterType; import com.rapidminer.parameter.ParameterTypeString; import com.rapidminer.tools.Ontology; import de.tud.inf.example.set.ComplexExampleSet; import de.tud.inf.example.set.attributevalues.MapValue; import de.tud.inf.example.table.MapAttribute; import de.tud.inf.operator.capabilites.Capability; import de.tud.inf.operator.capabilites.CapabilityBuilder; /** * * @author Antje Gruner * */ public class ZTransformation extends Operator{ public static final String PARAMETER_MAP_NAME = "map_attribute_name"; public ZTransformation(OperatorDescription description) { super(description); // TODO Auto-generated constructor stub } @Override public IOObject[] apply() throws OperatorException { ComplexExampleSet exampleSet = null; MapValue mv = null; double mean; double stdDerv; try { // get input exampleSet = getInput(ComplexExampleSet.class); // get map attribute according to parameters try{ MapAttribute mapAttr = (MapAttribute)exampleSet.getAttributes().get(getParameterAsString(PARAMETER_MAP_NAME)); Iterator<Example> it = exampleSet.iterator(); Example e; while(it.hasNext()){ e = it.next(); mv = e.getMapValue(mapAttr); //get former mean and variance mean = mv.getAverage(); stdDerv = Math.sqrt(mv.getVariance()); //modify values according to zTransform = (value - mean) / sqrt(variance) double[] zValues = mv.getZValues(); for(int j=0;j<zValues.length;j++){ zValues[j] = (zValues[j] - mean)/stdDerv; } //write complex values back to dataRow e.setComplexValue(mapAttr, mv); } } catch(ClassCastException e){ throw new OperatorException("map attribute name parameter is no map attribute"); } } catch (Exception e) { System.out.println("Exception in ZTransformation " + e.toString()); } return new IOObject[] {exampleSet}; } /** Returns a list of ParameterTypes describing the parameters of this operator. */ public List<ParameterType> getParameterTypes() { List<ParameterType> types = super.getParameterTypes(); types.add(new ParameterTypeString(PARAMETER_MAP_NAME, "", "map")); return types; } @Override public Class<?>[] getInputClasses() { return new Class[] {ComplexExampleSet.class}; } @Override public Class<?>[] getOutputClasses() { return new Class[] {ComplexExampleSet.class}; } @Override public Capability[] getOutputCapabilities() { Capability[] list = new Capability[]{ CapabilityBuilder.buildCapability(new int[]{Ontology.MAP}, true)}; return list; } @Override public Capability[] getInputCapabilities() { Capability[] list = new Capability[]{ CapabilityBuilder.buildCapability(new int[]{Ontology.MAP}, true)}; return list; } }