Example usage for org.apache.commons.math3.stat.descriptive DescriptiveStatistics getN

List of usage examples for org.apache.commons.math3.stat.descriptive DescriptiveStatistics getN

Introduction

In this page you can find the example usage for org.apache.commons.math3.stat.descriptive DescriptiveStatistics getN.

Prototype

public long getN() 

Source Link

Document

Returns the number of available values

Usage

From source file:org.alfresco.bm.api.v1.ResultsRestAPI.java

/**
 * Retrieve an approximate number of results, allowing for a smoothing factor
 * (<a href=http://en.wikipedia.org/wiki/Moving_average#Simple_moving_average>Simple Moving Average</a>) -
 * the number of data results to including in the moving average.
 * /*from  w  w  w . ja  v  a2 s .  c  o  m*/
 * @param fromTime              the approximate time to start from
 * @param timeUnit              the units of the 'reportPeriod' (default SECONDS).  See {@link TimeUnit}.
 * @param reportPeriod          how often a result should be output.  This is expressed as a multiple of the 'timeUnit'.
 * @param smoothing             the number of results to include in the Simple Moving Average calculations
 * @param chartOnly             <tt>true</tt> to filter out results that are not of interest in performance charts
 * 
 * @return                      JSON representing the event start time (x-axis) and the smoothed average execution time
 *                              along with data such as the events per second, failures per second, etc.
 */
@GET
@Path("/ts")
@Produces(MediaType.APPLICATION_JSON)
public String getTimeSeriesResults(@DefaultValue("0") @QueryParam("fromTime") long fromTime,
        @DefaultValue("SECONDS") @QueryParam("timeUnit") String timeUnit,
        @DefaultValue("1") @QueryParam("reportPeriod") long reportPeriod,
        @DefaultValue("1") @QueryParam("smoothing") int smoothing,
        @DefaultValue("true") @QueryParam("chartOnly") boolean chartOnly) {
    if (logger.isDebugEnabled()) {
        logger.debug("Inbound: " + "[test:" + test + ",fromTime:" + fromTime + ",timeUnit:" + timeUnit
                + ",reportPeriod:" + reportPeriod + ",smoothing:" + smoothing + ",chartOnly:" + chartOnly
                + "]");
    }
    if (reportPeriod < 1) {
        throwAndLogException(Status.BAD_REQUEST, "'reportPeriod' must be 1 or more.");
    }
    if (smoothing < 1) {
        throwAndLogException(Status.BAD_REQUEST, "'smoothing' must be 1 or more.");
    }
    TimeUnit timeUnitEnum = null;
    try {
        timeUnitEnum = TimeUnit.valueOf(timeUnit.toUpperCase());
    } catch (Exception e) {
        // Invalid time unit
        throwAndLogException(Status.BAD_REQUEST, e);
    }

    final ResultService resultService = getResultService();

    // Calculate the window size
    long reportPeriodMs = timeUnitEnum.toMillis(reportPeriod);
    long windowSize = reportPeriodMs * smoothing;

    // This is just too convenient an API
    final BasicDBList events = new BasicDBList();
    ResultHandler handler = new ResultHandler() {
        @Override
        public boolean processResult(long fromTime, long toTime,
                Map<String, DescriptiveStatistics> statsByEventName, Map<String, Integer> failuresByEventName)
                throws Throwable {
            for (Map.Entry<String, DescriptiveStatistics> entry : statsByEventName.entrySet()) {
                String eventName = entry.getKey();
                DescriptiveStatistics stats = entry.getValue();
                Integer failures = failuresByEventName.get(eventName);
                if (failures == null) {
                    logger.error("Found null failure count: " + entry);
                    // Do nothing with it and stop
                    return false;
                }
                // Per second
                double numPerSec = (double) stats.getN() / ((double) (toTime - fromTime) / 1000.0);
                double failuresPerSec = (double) failures / ((double) (toTime - fromTime) / 1000.0);
                // Push into an object
                DBObject eventObj = BasicDBObjectBuilder.start().add("time", toTime).add("name", eventName)
                        .add("mean", stats.getMean()).add("min", stats.getMin()).add("max", stats.getMax())
                        .add("stdDev", stats.getStandardDeviation()).add("num", stats.getN())
                        .add("numPerSec", numPerSec).add("fail", failures).add("failPerSec", failuresPerSec)
                        .get();
                // Add the object to the list of events
                events.add(eventObj);
            }
            // Go for the next result
            return true;
        }
    };
    try {
        // Get all the results
        resultService.getResults(handler, fromTime, windowSize, reportPeriodMs, chartOnly);
        // Muster into JSON
        String json = events.toString();

        // Done
        if (logger.isDebugEnabled()) {
            int jsonLen = json.length();
            if (jsonLen < 500) {
                logger.debug("Outbound: " + json);
            } else {
                logger.debug("Outbound: " + json.substring(0, 250) + " ... "
                        + json.substring(jsonLen - 250, jsonLen));
            }
        }
        return json;

    } catch (WebApplicationException e) {
        throw e;
    } catch (Exception e) {
        throwAndLogException(Status.INTERNAL_SERVER_ERROR, e);
        return null;
    }
}

From source file:org.alfresco.bm.report.XLSXReporter.java

private void createEventSheets(final XSSFWorkbook workbook) {
    // Create the fonts we need
    Font fontBold = workbook.createFont();
    fontBold.setBoldweight(Font.BOLDWEIGHT_BOLD);

    // Create the styles we need
    CreationHelper helper = workbook.getCreationHelper();
    final XSSFCellStyle dataStyle = workbook.createCellStyle();
    dataStyle.setAlignment(HorizontalAlignment.RIGHT);
    final XSSFCellStyle headerStyle = workbook.createCellStyle();
    headerStyle.setAlignment(HorizontalAlignment.RIGHT);
    headerStyle.setFont(fontBold);/*from w  w  w .j a v  a  2s .c  o  m*/
    final XSSFCellStyle dateStyle = workbook.createCellStyle();
    dateStyle.setDataFormat(helper.createDataFormat().getFormat("HH:mm:ss"));

    // Calculate a good window size
    ResultService resultService = getResultService();
    EventRecord firstResult = resultService.getFirstResult();
    EventRecord lastResult = resultService.getLastResult();
    if (firstResult == null || lastResult == null) {
        return;
    }
    long start = firstResult.getStartTime();
    long end = lastResult.getStartTime();
    long windowSize = AbstractEventReporter.getWindowSize(start, end, 100); // Well-known window sizes

    // Keep track of sheets by event name. Note that XLSX truncates sheets to 31 chars, so use 28 chars and ~01, ~02
    final Map<String, String> sheetNames = new HashMap<String, String>(31);
    final Map<String, XSSFSheet> sheets = new HashMap<String, XSSFSheet>(31);
    final Map<String, AtomicInteger> rowNums = new HashMap<String, AtomicInteger>(31);

    ResultHandler handler = new ResultHandler() {
        @Override
        public boolean processResult(long fromTime, long toTime,
                Map<String, DescriptiveStatistics> statsByEventName, Map<String, Integer> failuresByEventName)
                throws Throwable {
            // Get or create a sheet for each event
            for (String eventName : statsByEventName.keySet()) {
                // What sheet name to we use?
                String sheetName = sheetNames.get(eventName);
                if (sheetName == null) {
                    sheetName = eventName;
                    if (eventName.length() > 28) {
                        int counter = 1;
                        // Find a sheet name not in use
                        while (true) {
                            sheetName = eventName.substring(0, 28);
                            sheetName = String.format("%s~%02d", sheetName, counter);
                            // Have we used this, yet?
                            if (sheets.containsKey(sheetName)) {
                                // Yes, we have used it.
                                counter++;
                                continue;
                            }
                            // This is unique
                            break;
                        }
                    }
                    sheetNames.put(eventName, sheetName);
                }
                // Get and create the sheet, if necessary
                XSSFSheet sheet = sheets.get(sheetName);
                if (sheet == null) {
                    // Create
                    try {
                        sheet = workbook.createSheet(sheetName);
                        sheets.put(sheetName, sheet);
                        sheet.getHeader().setCenter(title + " - " + eventName);
                        sheet.getPrintSetup().setFitWidth((short) 1);
                        sheet.getPrintSetup().setLandscape(true);
                    } catch (Exception e) {
                        logger.error("Unable to create workbook sheet for event: " + eventName, e);
                        continue;
                    }
                    // Intro
                    XSSFCell cell = sheet.createRow(0).createCell(0);
                    cell.setCellValue(title + " - " + eventName + ":");
                    cell.setCellStyle(headerStyle);
                    // Headings
                    XSSFRow row = sheet.createRow(1);
                    cell = row.createCell(0);
                    cell.setCellStyle(headerStyle);
                    cell.setCellValue("time");
                    cell = row.createCell(1);
                    cell.setCellStyle(headerStyle);
                    cell.setCellValue("mean");
                    cell = row.createCell(2);
                    cell.setCellStyle(headerStyle);
                    cell.setCellValue("min");
                    cell = row.createCell(3);
                    cell.setCellStyle(headerStyle);
                    cell.setCellValue("max");
                    cell = row.createCell(4);
                    cell.setCellStyle(headerStyle);
                    cell.setCellValue("stdDev");
                    cell = row.createCell(5);
                    cell.setCellStyle(headerStyle);
                    cell.setCellValue("num");
                    cell = row.createCell(6);
                    cell.setCellStyle(headerStyle);
                    cell.setCellValue("numPerSec");
                    cell = row.createCell(7);
                    cell.setCellStyle(headerStyle);
                    cell.setCellValue("fail");
                    cell = row.createCell(8);
                    cell.setCellStyle(headerStyle);
                    cell.setCellValue("failPerSec");
                    // Size the columns
                    sheet.autoSizeColumn(0);
                    sheet.autoSizeColumn(1);
                    sheet.autoSizeColumn(2);
                    sheet.autoSizeColumn(3);
                    sheet.autoSizeColumn(4);
                    sheet.autoSizeColumn(5);
                    sheet.autoSizeColumn(6);
                    sheet.autoSizeColumn(7);
                    sheet.autoSizeColumn(8);
                }
                AtomicInteger rowNum = rowNums.get(eventName);
                if (rowNum == null) {
                    rowNum = new AtomicInteger(2);
                    rowNums.put(eventName, rowNum);
                }

                DescriptiveStatistics stats = statsByEventName.get(eventName);
                Integer failures = failuresByEventName.get(eventName);

                double numPerSec = (double) stats.getN() / ((double) (toTime - fromTime) / 1000.0);
                double failuresPerSec = (double) failures / ((double) (toTime - fromTime) / 1000.0);

                XSSFRow row = sheet.createRow(rowNum.getAndIncrement());
                XSSFCell cell;
                cell = row.createCell(0, Cell.CELL_TYPE_NUMERIC);
                cell.setCellStyle(dateStyle);
                cell.setCellValue(new Date(toTime));
                cell = row.createCell(5, Cell.CELL_TYPE_NUMERIC);
                cell.setCellValue(stats.getN());
                cell = row.createCell(6, Cell.CELL_TYPE_NUMERIC);
                cell.setCellValue(numPerSec);
                cell = row.createCell(7, Cell.CELL_TYPE_NUMERIC);
                cell.setCellValue(failures);
                cell = row.createCell(8, Cell.CELL_TYPE_NUMERIC);
                cell.setCellValue(failuresPerSec);
                // Leave out values if there is no mean
                if (Double.isNaN(stats.getMean())) {
                    continue;
                }
                cell = row.createCell(1, Cell.CELL_TYPE_NUMERIC);
                cell.setCellValue(stats.getMean());
                cell = row.createCell(2, Cell.CELL_TYPE_NUMERIC);
                cell.setCellValue(stats.getMin());
                cell = row.createCell(3, Cell.CELL_TYPE_NUMERIC);
                cell.setCellValue(stats.getMax());
                cell = row.createCell(4, Cell.CELL_TYPE_NUMERIC);
                cell.setCellValue(stats.getStandardDeviation());
            }
            return true;
        }
    };
    resultService.getResults(handler, start, windowSize, windowSize, false);

    // Create charts in the sheets
    for (String eventName : sheetNames.keySet()) {
        // Get the sheet name
        String sheetName = sheetNames.get(eventName);
        if (sheetName == null) {
            logger.error("Did not find sheet for event: " + eventName);
            continue;
        }
        // Get the sheet
        XSSFSheet sheet = sheets.get(sheetName);
        if (sheet == null) {
            logger.error("Did not find sheet for name: " + sheetName);
            continue;
        }
        // What row did we get up to
        AtomicInteger rowNum = rowNums.get(eventName);
        if (rowNum == null) {
            logger.error("Did not find row number for event: " + sheetName);
            continue;
        }

        // This axis is common to both charts
        ChartDataSource<Number> xTime = DataSources.fromNumericCellRange(sheet,
                new CellRangeAddress(1, rowNum.intValue() - 1, 0, 0));

        // Graph of event times
        XSSFDrawing drawingTimes = sheet.createDrawingPatriarch();
        ClientAnchor anchorTimes = drawingTimes.createAnchor(0, 0, 0, 0, 0, 5, 15, 25);
        Chart chartTimes = drawingTimes.createChart(anchorTimes);
        ChartLegend legendTimes = chartTimes.getOrCreateLegend();
        legendTimes.setPosition(LegendPosition.BOTTOM);

        LineChartData chartDataTimes = chartTimes.getChartDataFactory().createLineChartData();

        ChartAxis bottomAxisTimes = chartTimes.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM);
        bottomAxisTimes.setNumberFormat("#,##0;-#,##0");
        ValueAxis leftAxisTimes = chartTimes.getChartAxisFactory().createValueAxis(AxisPosition.LEFT);

        // Mean
        ChartDataSource<Number> yMean = DataSources.fromNumericCellRange(sheet,
                new CellRangeAddress(1, rowNum.intValue() - 1, 1, 1));
        LineChartSeries yMeanSerie = chartDataTimes.addSeries(xTime, yMean);
        yMeanSerie.setTitle(title + " - " + eventName + ": Mean (ms)");

        // Std Dev
        ChartDataSource<Number> yStdDev = DataSources.fromNumericCellRange(sheet,
                new CellRangeAddress(1, rowNum.intValue() - 1, 4, 4));
        LineChartSeries yStdDevSerie = chartDataTimes.addSeries(xTime, yStdDev);
        yStdDevSerie.setTitle(title + " - " + eventName + ": Standard Deviation (ms)");

        // Plot event times
        chartTimes.plot(chartDataTimes, bottomAxisTimes, leftAxisTimes);

        // Graph of event volumes

        // Graph of event times
        XSSFDrawing drawingVolumes = sheet.createDrawingPatriarch();
        ClientAnchor anchorVolumes = drawingVolumes.createAnchor(0, 0, 0, 0, 0, 25, 15, 35);
        Chart chartVolumes = drawingVolumes.createChart(anchorVolumes);
        ChartLegend legendVolumes = chartVolumes.getOrCreateLegend();
        legendVolumes.setPosition(LegendPosition.BOTTOM);

        LineChartData chartDataVolumes = chartVolumes.getChartDataFactory().createLineChartData();

        ChartAxis bottomAxisVolumes = chartVolumes.getChartAxisFactory()
                .createCategoryAxis(AxisPosition.BOTTOM);
        bottomAxisVolumes.setNumberFormat("#,##0;-#,##0");
        ValueAxis leftAxisVolumes = chartVolumes.getChartAxisFactory().createValueAxis(AxisPosition.LEFT);

        // Number per second
        ChartDataSource<Number> yNumPerSec = DataSources.fromNumericCellRange(sheet,
                new CellRangeAddress(1, rowNum.intValue() - 1, 6, 6));
        LineChartSeries yNumPerSecSerie = chartDataVolumes.addSeries(xTime, yNumPerSec);
        yNumPerSecSerie.setTitle(title + " - " + eventName + ": Events per Second");

        // Failures per second
        ChartDataSource<Number> yFailPerSec = DataSources.fromNumericCellRange(sheet,
                new CellRangeAddress(1, rowNum.intValue() - 1, 8, 8));
        LineChartSeries yFailPerSecSerie = chartDataVolumes.addSeries(xTime, yFailPerSec);
        yFailPerSecSerie.setTitle(title + " - " + eventName + ": Failures per Second");

        // Plot volumes
        chartVolumes.plot(chartDataVolumes, bottomAxisVolumes, leftAxisVolumes);
    }
}

From source file:org.apache.metron.common.math.stats.OnlineStatisticsProviderTest.java

public static void validateStatisticsProvider(StatisticsProvider statsProvider, SummaryStatistics summaryStats,
        DescriptiveStatistics stats) {
    //N/*  w w  w.ja va 2 s. c o m*/
    Assert.assertEquals(statsProvider.getCount(), stats.getN());
    //sum
    Assert.assertEquals(statsProvider.getSum(), stats.getSum(), 1e-3);
    //sum of squares
    Assert.assertEquals(statsProvider.getSumSquares(), stats.getSumsq(), 1e-3);
    //sum of squares
    Assert.assertEquals(statsProvider.getSumLogs(), summaryStats.getSumOfLogs(), 1e-3);
    //Mean
    Assert.assertEquals(statsProvider.getMean(), stats.getMean(), 1e-3);
    //Quadratic Mean
    Assert.assertEquals(statsProvider.getQuadraticMean(), summaryStats.getQuadraticMean(), 1e-3);
    //SD
    Assert.assertEquals(statsProvider.getStandardDeviation(), stats.getStandardDeviation(), 1e-3);
    //Variance
    Assert.assertEquals(statsProvider.getVariance(), stats.getVariance(), 1e-3);
    //Min
    Assert.assertEquals(statsProvider.getMin(), stats.getMin(), 1e-3);
    //Max
    Assert.assertEquals(statsProvider.getMax(), stats.getMax(), 1e-3);

    //Kurtosis
    Assert.assertEquals(stats.getKurtosis(), statsProvider.getKurtosis(), 1e-3);

    //Skewness
    Assert.assertEquals(stats.getSkewness(), statsProvider.getSkewness(), 1e-3);
    for (double d = 10.0; d < 100.0; d += 10) {
        //This is a sketch, so we're a bit more forgiving here in our choice of \epsilon.
        Assert.assertEquals("Percentile mismatch for " + d + "th %ile", statsProvider.getPercentile(d),
                stats.getPercentile(d), 1e-2);
    }
}

From source file:org.apache.metron.common.stellar.benchmark.Microbenchmark.java

public static String describe(DescriptiveStatistics stats, Double[] percentiles) {
    StringBuilder sb = new StringBuilder();
    sb.append(String.format("round: mean of %dms [+-%d], measured %d rounds;\n", (long) stats.getMean(),
            (long) stats.getStandardDeviation(), stats.getN()));
    sb.append("\tMin - " + (long) stats.getMin() + "\n");
    for (double pctile : percentiles) {
        sb.append("\t" + pctile + " - " + stats.getPercentile(pctile) + "\n");
    }/*from   w  w w  .jav a  2  s. c o  m*/
    sb.append("\tMax - " + (long) stats.getMax());
    return sb.toString();
}

From source file:org.apache.solr.client.solrj.io.eval.DescribeEvaluator.java

@Override
public Object doWork(Object value) throws IOException {

    if (!(value instanceof List<?>)) {
        throw new IOException(
                String.format(Locale.ROOT, "Invalid expression %s - expecting a numeric list but found %s",
                        toExpression(constructingFactory), value.getClass().getSimpleName()));
    }/*from w w w.  j  a  v a2  s  . c om*/

    // we know each value is a BigDecimal or a list of BigDecimals
    DescriptiveStatistics descriptiveStatistics = new DescriptiveStatistics();
    ((List<?>) value).stream().mapToDouble(innerValue -> ((BigDecimal) innerValue).doubleValue())
            .forEach(innerValue -> descriptiveStatistics.addValue(innerValue));

    Map<String, Number> map = new HashMap<>();
    map.put("max", descriptiveStatistics.getMax());
    map.put("mean", descriptiveStatistics.getMean());
    map.put("min", descriptiveStatistics.getMin());
    map.put("stdev", descriptiveStatistics.getStandardDeviation());
    map.put("sum", descriptiveStatistics.getSum());
    map.put("N", descriptiveStatistics.getN());
    map.put("var", descriptiveStatistics.getVariance());
    map.put("kurtosis", descriptiveStatistics.getKurtosis());
    map.put("skewness", descriptiveStatistics.getSkewness());
    map.put("popVar", descriptiveStatistics.getPopulationVariance());
    map.put("geometricMean", descriptiveStatistics.getGeometricMean());
    map.put("sumsq", descriptiveStatistics.getSumsq());

    return new Tuple(map);
}

From source file:org.apache.solr.client.solrj.io.eval.ExponentialMovingAverageEvaluator.java

@Override
public Object doWork(Object... values) throws IOException {
    if (!(2 == values.length || values.length == 3)) {
        throw new IOException(
                String.format(Locale.ROOT, "%s(...) only works with 2 or 3 values but %d were provided",
                        constructingFactory.getFunctionName(getClass()), values.length));
    }//from   ww  w.  j a  v a  2 s .  co m
    List<?> observations = (List<?>) values[0];
    Number window = (Number) values[1];
    Number alpha;
    if (2 == values.length) {
        if (!(observations instanceof List<?>)) {
            throw new IOException(String.format(Locale.ROOT,
                    "Invalid expression %s - found type %s for the first value, expecting a List",
                    toExpression(constructingFactory), values[0].getClass().getSimpleName()));
        }
        if (!(observations.size() > 1)) {
            throw new IOException(String.format(Locale.ROOT,
                    "Invalid expression %s - found list size of %s for the first value, expecting a List of size > 0.",
                    toExpression(constructingFactory), observations.size()));
        }
        if (!(window instanceof Number)) {
            throw new IOException(String.format(Locale.ROOT,
                    "Invalid expression %s - found type %s for the second value, expecting a Number",
                    toExpression(constructingFactory), values[1].getClass().getSimpleName()));
        }
        if (window.doubleValue() > observations.size()) {
            throw new IOException(String.format(Locale.ROOT,
                    "Invalid expression %s - found a window size of %s for the second value, the first value has a List size of %s, expecting a window value smaller or equal to the List size",
                    toExpression(constructingFactory), window.intValue(), observations.size()));
        }
    }

    if (3 == values.length) {
        alpha = (Number) values[2];
        if (!(alpha instanceof Number)) {
            throw new IOException(String.format(Locale.ROOT,
                    "Invalid expression %s - found type %s for the third value, expecting a Number",
                    toExpression(constructingFactory), values[2].getClass().getSimpleName()));
        }
        if (!(alpha.doubleValue() >= 0 && alpha.doubleValue() <= 1.0)) {
            throw new IOException(String.format(Locale.ROOT,
                    "Invalid expression %s - out of range, found %s for the third value, expecting a range between 0 and 1.0",
                    toExpression(constructingFactory), alpha.doubleValue()));
        }
    } else {
        alpha = 2.0 / (window.doubleValue() + 1.0);
    }

    List<Number> sequence = new ArrayList<>();
    DescriptiveStatistics slider = new DescriptiveStatistics(window.intValue());
    Number lastValue = 0;
    for (Object value : observations) {
        slider.addValue(((Number) value).doubleValue());
        if (slider.getN() == window.intValue()) {
            lastValue = slider.getMean();
            break;
        }
    }

    sequence.add(lastValue);
    int i = 0;

    for (Object value : observations) {
        if (i >= window.intValue()) {
            Number val = (alpha.doubleValue() * (((Number) value).doubleValue() - lastValue.doubleValue())
                    + lastValue.doubleValue());
            sequence.add(val);
            lastValue = val;
        }
        ++i;
    }
    return sequence;
}

From source file:org.apache.solr.client.solrj.io.eval.MovingAverageEvaluator.java

@Override
public Object doWork(Object first, Object second) throws IOException {
    if (null == first) {
        throw new IOException(String.format(Locale.ROOT,
                "Invalid expression %s - null found for the first value", toExpression(constructingFactory)));
    }/*from  ww w. ja v a2 s .c o m*/
    if (null == second) {
        throw new IOException(String.format(Locale.ROOT,
                "Invalid expression %s - null found for the second value", toExpression(constructingFactory)));
    }
    if (!(first instanceof List<?>)) {
        throw new IOException(String.format(Locale.ROOT,
                "Invalid expression %s - found type %s for the first value, expecting a List",
                toExpression(constructingFactory), first.getClass().getSimpleName()));
    }
    if (!(second instanceof Number)) {
        throw new IOException(String.format(Locale.ROOT,
                "Invalid expression %s - found type %s for the second value, expecting a Number",
                toExpression(constructingFactory), first.getClass().getSimpleName()));
    }

    List<?> values = (List<?>) first;
    int window = ((Number) second).intValue();

    List<Number> moving = new ArrayList<>();
    DescriptiveStatistics slider = new DescriptiveStatistics(window);
    for (Object value : values) {
        slider.addValue(((Number) value).doubleValue());

        if (slider.getN() >= window) {
            moving.add(slider.getMean());
        }
    }

    return moving;
}

From source file:org.apache.solr.client.solrj.io.eval.MovingMedianEvaluator.java

@Override
public Object doWork(Object first, Object second) throws IOException {
    if (null == first) {
        throw new IOException(String.format(Locale.ROOT,
                "Invalid expression %s - null found for the first value", toExpression(constructingFactory)));
    }/* w ww . ja v  a2  s  . c om*/
    if (null == second) {
        throw new IOException(String.format(Locale.ROOT,
                "Invalid expression %s - null found for the second value", toExpression(constructingFactory)));
    }
    if (!(first instanceof List<?>)) {
        throw new IOException(String.format(Locale.ROOT,
                "Invalid expression %s - found type %s for the first value, expecting a List",
                toExpression(constructingFactory), first.getClass().getSimpleName()));
    }
    if (!(second instanceof Number)) {
        throw new IOException(String.format(Locale.ROOT,
                "Invalid expression %s - found type %s for the second value, expecting a Number",
                toExpression(constructingFactory), first.getClass().getSimpleName()));
    }

    List<?> values = (List<?>) first;
    int window = ((Number) second).intValue();

    List<Number> moving = new ArrayList<>();
    DescriptiveStatistics slider = new DescriptiveStatistics(window);
    Percentile percentile = new Percentile();
    for (Object value : values) {
        slider.addValue(((Number) value).doubleValue());
        if (slider.getN() >= window) {
            double median = percentile.evaluate(slider.getValues(), 50);
            moving.add(median);
        }
    }

    return moving;
}

From source file:org.asoem.greyfish.impl.environment.AgentObjectPoolAT.java

@Test
public void testSignificantPerformanceBenefit() throws Exception {
    // given//from  w w  w.  j a  v a 2  s  .  c  o  m
    final int runs = 1000;
    final DescriptiveStatistics statisticsWithoutObjectPool = new DescriptiveStatistics();
    final DescriptiveStatistics statisticsWithObjectPool = new DescriptiveStatistics();

    final Supplier<BasicAgent> agentFactory = new Supplier<BasicAgent>() {

        @Override
        public BasicAgent get() {
            return DefaultBasicAgent.builder()
                    .addAllActions(
                            GenericAction.<BasicAgent>builder().name("reproduce")
                                    .executedIf(AlwaysTrueCondition.<BasicAgent>builder().build())
                                    .executes(Callbacks.emptyCallback()).build(),
                            GenericAction.<BasicAgent>builder().name("die")
                                    .executedIf(AlwaysTrueCondition.<BasicAgent>builder().build())
                                    .executes(Callbacks.emptyCallback()).build())
                    .build();
        }
    };

    // when
    final int objects = 1000;
    for (int i = 0; i < runs; i++) {
        // randomize execution order
        if (RandomGenerators.rng().nextBoolean()) {
            statisticsWithoutObjectPool.addValue(measureAgentCreation(objects, agentFactory));
            statisticsWithObjectPool.addValue(measureAgentRecycling(objects, agentFactory));
        } else {
            statisticsWithObjectPool.addValue(measureAgentRecycling(objects, agentFactory));
            statisticsWithoutObjectPool.addValue(measureAgentCreation(objects, agentFactory));
        }
    }

    // then
    logger.info("Simulation with object pool vs. without object pool: {}, {}", statisticsWithObjectPool,
            statisticsWithoutObjectPool);

    // Is it faster?
    assertThat(
            "The mean elapsed time of the version with an object pool "
                    + "is not less than the mean elapsed time of the version with an object pool",
            statisticsWithObjectPool.getMean(), is(lessThan(statisticsWithoutObjectPool.getMean())));

    // Is it also significantly faster? Make a t-test.
    // Test assumptions for t-test: normality
    assertThat("Is not normal distributed",
            StatisticalTests.shapiroWilk(statisticsWithObjectPool.getValues()).p(),
            is(lessThan(SIGNIFICANT.getAlpha())));
    assertThat("Is not normal distributed",
            StatisticalTests.shapiroWilk(statisticsWithoutObjectPool.getValues()).p(),
            is(lessThan(SIGNIFICANT.getAlpha())));

    // Perform the t-test
    final double t = new TTest().t(statisticsWithObjectPool, statisticsWithoutObjectPool);
    final double p = new TTest().tTest(statisticsWithObjectPool, statisticsWithoutObjectPool);
    logger.info("t-test: t={}, p={}", t, p);
    double qt = new TDistribution(statisticsWithObjectPool.getN() - 1 + statisticsWithoutObjectPool.getN() - 1)
            .inverseCumulativeProbability(1 - SIGNIFICANT.getAlpha() / 2);
    assertThat("The means are not significantly different", Math.abs(t), is(greaterThan(qt)));
}

From source file:org.asoem.greyfish.impl.environment.AgentObjectPoolAT.java

@Test
public void testSignificantPerformanceBenefitInSimulationContext() throws Exception {
    // given//from w  ww.ja v a 2 s  .  c  o  m
    final int populationSize = 400;
    final int steps = 30000;
    final int runs = 20;
    final DescriptiveStatistics statisticsWithoutObjectPool = new DescriptiveStatistics();
    final DescriptiveStatistics statisticsWithObjectPool = new DescriptiveStatistics();

    final ExecutorService executorService = MoreExecutors.sameThreadExecutor();

    // when
    for (int i = 0; i < runs; i++) {
        // randomize execution order
        if (RandomGenerators.rng().nextBoolean()) {
            statisticsWithoutObjectPool.addValue(measureExecutionTime(
                    new SimulationWithoutObjectPoolFactory(populationSize, executorService).newSimulation(),
                    steps));

            statisticsWithObjectPool.addValue(measureExecutionTime(
                    new SimulationWithObjectPoolFactory(populationSize, executorService).newSimulation(),
                    steps));
        } else {
            statisticsWithObjectPool.addValue(measureExecutionTime(
                    new SimulationWithObjectPoolFactory(populationSize, executorService).newSimulation(),
                    steps));

            statisticsWithoutObjectPool.addValue(measureExecutionTime(
                    new SimulationWithoutObjectPoolFactory(populationSize, executorService).newSimulation(),
                    steps));
        }
    }

    // then
    logger.info("Simulation with object pool vs. without object pool: {}, {}", statisticsWithObjectPool,
            statisticsWithoutObjectPool);

    assertThat(
            "The mean elapsed time of the version with an object pool "
                    + "is not less than the mean elapsed time of the version with an object pool",
            statisticsWithObjectPool.getMean(), is(lessThan(statisticsWithoutObjectPool.getMean())));

    // Is it also significantly faster? Make a t-test.
    // Test assumptions for t-test: normality
    assertThat("Is not normal distributed",
            StatisticalTests.shapiroWilk(statisticsWithObjectPool.getValues()).p(), is(lessThan(0.05)));
    assertThat("Is not normal distributed",
            StatisticalTests.shapiroWilk(statisticsWithoutObjectPool.getValues()).p(), is(lessThan(0.05)));

    final double t = TestUtils.t(statisticsWithObjectPool, statisticsWithoutObjectPool);
    final double p = TestUtils.tTest(statisticsWithObjectPool, statisticsWithoutObjectPool);
    logger.info("t-test: t={}, p={}", t, p);
    double qt = new TDistribution(statisticsWithObjectPool.getN() - 1 + statisticsWithoutObjectPool.getN() - 1)
            .inverseCumulativeProbability(0.975);
    assertThat("The means are not significantly different", Math.abs(t), is(greaterThan(qt)));
}