@Override public FeatureCalc create(Expression expr) { return new StandardDeviationVisitor(expr); }
StandardDeviationVisitor sdVisit = new StandardDeviationVisitor(getParameters().get(0));
} else if (function == AggregationFunction.StdDev) { calc = new StandardDeviationVisitor( CommonFactoryFinder.getFilterFactory(null).property(aggAttribute)); } else if (function == AggregationFunction.Sum) {
public void testStandardDeviation() throws Exception { FilterFactory factory = CommonFactoryFinder.getFilterFactory(null); Expression expr = factory.property(ft3.getDescriptor(0).getLocalName()); // first do it the old fashioned way to ensure backwards compatibility AverageVisitor visit1 = new AverageVisitor(expr); fc3.accepts(visit1, null); CalcResult result = visit1.getResult(); double average = result.toDouble(); StandardDeviationVisitor visit2 = new StandardDeviationVisitor(expr, average); fc3.accepts(visit2, null); assertEquals(28.86, visit2.getResult().toDouble(), 0.01); // then do it single pass StandardDeviationVisitor visit3 = new StandardDeviationVisitor(expr); fc3.accepts(visit3, null); assertEquals(28.86, visit3.getResult().toDouble(), 0.01); // test empty collection StandardDeviationVisitor emptyVisitor = new StandardDeviationVisitor(expr, average); empty.accepts(emptyVisitor, null); assertEquals(CalcResult.NULL_RESULT, emptyVisitor.getResult()); // test merge assertSame(result, emptyVisitor.getResult().merge(result)); assertSame(result, result.merge(emptyVisitor.getResult())); }
calc = new MinVisitor(attIndex, features.getSchema()); } else if (function == AggregationFunction.StdDev) { calc = new StandardDeviationVisitor(CommonFactoryFinder.getFilterFactory(null).property(aggAttribute)); } else if (function == AggregationFunction.Sum) { calc = new SumVisitor(attIndex, features.getSchema());
private Object calculate(SimpleFeatureCollection featureCollection) { try { int classNum = getClasses(); // find the standard deviation StandardDeviationVisitor sdVisit = new StandardDeviationVisitor(getExpression()); featureCollection.accepts(sdVisit, progress); if (progress != null && progress.isCanceled()) { return null; } CalcResult calcResult = sdVisit.getResult(); if (calcResult == null) { return null; } double standardDeviation = calcResult.toDouble(); //figure out the min and max values Double min[] = new Double[classNum]; Double max[] = new Double[classNum]; for (int i = 0; i < classNum; i++) { min[i] = getMin(i, classNum, sdVisit.getMean(), standardDeviation); max[i] = getMax(i, classNum, sdVisit.getMean(), standardDeviation); } return new RangedClassifier(min, max); } catch (IOException e) { LOGGER.log(Level.SEVERE, "StandardDeviationFunction calculate failed", e); return null; } }
double average = calcResult.toDouble(); StandardDeviationVisitor sdVisit = new StandardDeviationVisitor(getExpression(), average); featureCollection.accepts(sdVisit, progress); if (progress.isCanceled()) return null;