Example usage for org.apache.commons.math3.random EmpiricalDistribution getBinStats

List of usage examples for org.apache.commons.math3.random EmpiricalDistribution getBinStats

Introduction

In this page you can find the example usage for org.apache.commons.math3.random EmpiricalDistribution getBinStats.

Prototype

public List<SummaryStatistics> getBinStats() 

Source Link

Document

Returns a List of SummaryStatistics instances containing statistics describing the values in each of the bins.

Usage

From source file:edu.wisc.ssec.mcidasv.data.hydra.Statistics.java

public static Long[] histogram(FlatField field, int bins) throws VisADException {
    Long[] histogram = new Long[bins];
    EmpiricalDistribution distribution = new EmpiricalDistribution(bins);
    distribution.load(field.getValues(false)[0]);
    int k = 0;/*  w w w  . j a  v  a 2s.co m*/
    for (SummaryStatistics stats : distribution.getBinStats()) {
        histogram[k++] = stats.getN();
    }
    return histogram;
}

From source file:ijfx.ui.plugin.panel.OverlayPanel.java

protected XYChart.Series<Double, Double> getOverlayHistogram(Overlay overlay) {

    Timer timer = timerService.getTimer(this.getClass());
    timer.start();/*from w w  w  .  ja va 2 s  . c om*/
    Double[] valueList = statsService.getValueList(currentDisplay(), overlay);
    timer.elapsed("Getting the stats");
    SummaryStatistics sumup = new SummaryStatistics();
    for (Double v : valueList) {
        sumup.addValue(v);
    }
    timer.elapsed("Building the sumup");

    double min = sumup.getMin();
    double max = sumup.getMax();
    double range = max - min;
    int bins = 100;//new Double(max - min).intValue();

    EmpiricalDistribution distribution = new EmpiricalDistribution(bins);

    double[] values = ArrayUtils.toPrimitive(valueList);
    Arrays.parallelSort(values);
    distribution.load(values);

    timer.elapsed("Sort and distrubution repartition up");

    XYChart.Series<Double, Double> serie = new XYChart.Series<>();
    ArrayList<Data<Double, Double>> data = new ArrayList<>(bins);
    double k = min;
    for (SummaryStatistics st : distribution.getBinStats()) {
        data.add(new Data<Double, Double>(k, new Double(st.getN())));
        k += range / bins;
    }

    serie.getData().clear();
    serie.getData().addAll(data);
    timer.elapsed("Creating charts");
    return serie;
}

From source file:ijfx.ui.utils.ChartUpdater.java

public void updateChart() {

    final double min; // minimum value
    final double max; // maximum value
    double range; // max - min
    final double binSize;
    // int maximumBinNumber = 30;
    int finalBinNumber;

    int differentValuesCount = possibleValues.stream().filter(n -> Double.isFinite(n.doubleValue()))
            .collect(Collectors.toSet()).size();
    if (differentValuesCount < maximumBinNumber) {
        finalBinNumber = differentValuesCount;
    } else {/* ww  w .j  a  v  a 2 s .c o m*/
        finalBinNumber = maximumBinNumber;
    }

    EmpiricalDistribution distribution = new EmpiricalDistribution(finalBinNumber);

    Double[] values = possibleValues.parallelStream().filter(n -> Double.isFinite(n.doubleValue()))
            .map(v -> v.doubleValue()).sorted()
            //.toArray();
            .toArray(size -> new Double[size]);
    distribution.load(ArrayUtils.toPrimitive(values));

    min = values[0];
    max = values[values.length - 1];
    range = max - min;
    binSize = range / (finalBinNumber - 1);

    //System.out.println(String.format("min = %.0f, max = %.0f, range = %.0f, bin size = %.0f, bin number = %d", min, max, range, binSize, finalBinNumber));

    XYChart.Series<Double, Double> serie = new XYChart.Series<>();
    ArrayList<XYChart.Data<Double, Double>> data = new ArrayList<>();
    double k = min;
    for (SummaryStatistics st : distribution.getBinStats()) {
        data.add(new XYChart.Data<>(k, new Double(st.getN())));
        k += binSize;
    }

    Platform.runLater(() -> {
        serie.getData().addAll(data);
        areaChart.getData().clear();
        areaChart.getData().add(serie);
    });

}

From source file:ijfx.ui.filter.DefaultNumberFilter.java

public void updateChart() {

    final double min; // minimum value
    final double max; // maximum value
    double range; // max - min
    final double binSize;
    int maximumBinNumber = 30;
    int finalBinNumber;

    int differentValuesCount = possibleValues.stream().filter(n -> Double.isFinite(n.doubleValue()))
            .collect(Collectors.toSet()).size();
    if (differentValuesCount < maximumBinNumber) {
        finalBinNumber = differentValuesCount;
    } else {//  w ww .ja  va2 s  .c  om
        finalBinNumber = maximumBinNumber;
    }

    EmpiricalDistribution distribution = new EmpiricalDistribution(finalBinNumber);

    double[] values = possibleValues.parallelStream().filter(n -> Double.isFinite(n.doubleValue()))
            .mapToDouble(v -> v.doubleValue()).sorted().toArray();
    distribution.load(values);

    min = values[0];
    max = values[values.length - 1];
    range = max - min;
    binSize = range / (finalBinNumber - 1);

    XYChart.Series<Double, Double> serie = new XYChart.Series<>();
    ArrayList<Data<Double, Double>> data = new ArrayList<>();
    double k = min;
    for (SummaryStatistics st : distribution.getBinStats()) {
        data.add(new Data<>(k, new Double(st.getN())));
        k += binSize;
    }

    Platform.runLater(() -> {

        serie.getData().addAll(data);
        areaChart.getData().clear();

        areaChart.getData().add(serie);

        updateSlider(min, max, finalBinNumber);
    });
}

From source file:ijfx.ui.plugin.overlay.OverlayPanel.java

protected XYChart.Series<Double, Double> getOverlayHistogram(Overlay overlay) {

    Timer timer = timerService.getTimer(this.getClass());
    timer.start();//from www .j  ava  2  s . c om
    Double[] valueList = statsService.getValueListFromImageDisplay(currentDisplay(), overlay);
    timer.elapsed("Getting the stats");
    SummaryStatistics sumup = new SummaryStatistics();
    for (Double v : valueList) {
        sumup.addValue(v);
    }
    timer.elapsed("Building the sumup");

    double min = sumup.getMin();
    double max = sumup.getMax();
    double range = max - min;
    int bins = 100;//new Double(max - min).intValue();

    EmpiricalDistribution distribution = new EmpiricalDistribution(bins);

    double[] values = ArrayUtils.toPrimitive(valueList);
    Arrays.parallelSort(values);
    distribution.load(values);

    timer.elapsed("Sort and distrubution repartition up");

    XYChart.Series<Double, Double> serie = new XYChart.Series<>();
    ArrayList<Data<Double, Double>> data = new ArrayList<>(bins);
    double k = min;
    for (SummaryStatistics st : distribution.getBinStats()) {
        data.add(new Data<Double, Double>(k, new Double(st.getN())));
        k += range / bins;
    }

    serie.getData().clear();
    serie.getData().addAll(data);
    timer.elapsed("Creating charts");
    return serie;
}

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

@Override
public Object doWork(Object... values) throws IOException {
    if (Arrays.stream(values).anyMatch(item -> null == item)) {
        return null;
    }/*from  w  ww.j  ava 2 s  .  c o m*/

    List<?> sourceValues;
    Integer bins = 10;

    if (values.length >= 1) {
        sourceValues = values[0] instanceof List<?> ? (List<?>) values[0] : Arrays.asList(values[0]);

        if (values.length >= 2) {
            if (values[1] instanceof Number) {
                bins = ((Number) values[1]).intValue();
            } else {
                throw new IOException(String.format(Locale.ROOT,
                        "Invalid expression %s - if second parameter is provided then it must be a valid number but found %s instead",
                        toExpression(constructingFactory), values[1].getClass().getSimpleName()));
            }
        }
    } else {
        throw new IOException(
                String.format(Locale.ROOT, "Invalid expression %s - expecting at least one value but found %d",
                        toExpression(constructingFactory), containedEvaluators.size()));
    }

    EmpiricalDistribution distribution = new EmpiricalDistribution(bins);
    distribution.load(
            ((List<?>) sourceValues).stream().mapToDouble(value -> ((Number) value).doubleValue()).toArray());
    ;

    List<Tuple> histogramBins = new ArrayList<>();
    for (SummaryStatistics binSummary : distribution.getBinStats()) {
        Map<String, Number> map = new HashMap<>();
        map.put("max", binSummary.getMax());
        map.put("mean", binSummary.getMean());
        map.put("min", binSummary.getMin());
        map.put("stdev", binSummary.getStandardDeviation());
        map.put("sum", binSummary.getSum());
        map.put("N", binSummary.getN());
        map.put("var", binSummary.getVariance());
        map.put("cumProb", distribution.cumulativeProbability(binSummary.getMean()));
        map.put("prob", distribution.probability(binSummary.getMin(), binSummary.getMax()));
        histogramBins.add(new Tuple(map));
    }

    return histogramBins;
}

From source file:tech.tablesaw.columns.numbers.NumberMapFunctions.java

default DoubleColumn bin(int binCount) {
    double[] histogram = new double[binCount];
    EmpiricalDistribution distribution = new EmpiricalDistribution(binCount);
    distribution.load(asDoubleArray());//  w w w. j a  v  a  2s  . com
    int k = 0;
    for (SummaryStatistics stats : distribution.getBinStats()) {
        histogram[k++] = stats.getN();
    }
    return DoubleColumn.create(name() + "[binned]", histogram);
}

From source file:util.Statistics.java

public Statistics(List<Integer> list) {
    scores = intsToDoubles(list);//from   ww w  . j  ava 2 s  .co m
    DescriptiveStatistics dStats = new DescriptiveStatistics(scores);

    summaryStatistics.put("min", dStats.getMin()); // Minimum
    summaryStatistics.put("q1", dStats.getPercentile(25)); // Lower Quartile (Q1)
    summaryStatistics.put("q2", dStats.getPercentile(50)); // Middle Quartile (Median - Q2)
    summaryStatistics.put("q3", dStats.getPercentile(75)); // High Quartile (Q3)
    summaryStatistics.put("max", dStats.getMax()); // Maxiumum

    summaryStatistics.put("mean", dStats.getMean()); // Mean
    summaryStatistics.put("sd", dStats.getStandardDeviation()); // Standard Deviation

    EmpiricalDistribution distribution = new EmpiricalDistribution(NUM_BINS);
    distribution.load(scores);
    List<SummaryStatistics> binStats = distribution.getBinStats();
    double[] upperBounds = distribution.getUpperBounds();

    Double lastUpperBound = upperBounds[0];
    bins.add(new Pair<Pair<Double, Double>, Long>(
            new Pair<Double, Double>(summaryStatistics.get("min"), lastUpperBound), binStats.get(0).getN()));
    for (int i = 1; i < binStats.size(); i++) {
        bins.add(new Pair<Pair<Double, Double>, Long>(new Pair<Double, Double>(lastUpperBound, upperBounds[i]),
                binStats.get(i).getN()));
        lastUpperBound = upperBounds[i];
    }

    if (list.size() > 5 && dStats.getStandardDeviation() > 0) // Only remove outliers if relatively normal
    {
        double mean = dStats.getMean();
        double stDev = dStats.getStandardDeviation();
        NormalDistribution normalDistribution = new NormalDistribution(mean, stDev);

        Iterator<Integer> listIterator = list.iterator();
        double significanceLevel = .50 / list.size(); // Chauvenet's Criterion for Outliers
        while (listIterator.hasNext()) {
            int num = listIterator.next();
            double pValue = normalDistribution.cumulativeProbability(num);
            if (pValue < significanceLevel) {
                outliers.add(num);
                listIterator.remove();
            }
        }

        if (list.size() != dStats.getN()) // If and only if outliers have been removed
        {
            double[] significantData = intsToDoubles(list);
            dStats = new DescriptiveStatistics(significantData);

            summaryStatistics.put("min", dStats.getMin());
            summaryStatistics.put("max", dStats.getMax());
            summaryStatistics.put("mean", dStats.getMean());
            summaryStatistics.put("sd", dStats.getStandardDeviation());
        }
    }
}