tech.tablesaw.columns.numbers.Stats.java Source code

Java tutorial

Introduction

Here is the source code for tech.tablesaw.columns.numbers.Stats.java

Source

/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package tech.tablesaw.columns.numbers;

import org.apache.commons.math3.stat.descriptive.SummaryStatistics;

import tech.tablesaw.api.DoubleColumn;
import tech.tablesaw.api.NumericColumn;
import tech.tablesaw.api.StringColumn;
import tech.tablesaw.api.Table;

public class Stats {

    private long n;
    private double sum;
    private double mean;
    private double min;
    private double max;
    private double variance;
    private double standardDeviation;
    private double geometricMean;
    private double quadraticMean;
    private double secondMoment;
    private double populationVariance;
    private double sumOfLogs;
    private double sumOfSquares;
    private final String name;

    private Stats(String name) {
        this.name = name;
    }

    public static Stats create(final NumericColumn<?> values) {
        SummaryStatistics summaryStatistics = new SummaryStatistics();
        for (int i = 0; i < values.size(); i++) {
            summaryStatistics.addValue(values.getDouble(i));
        }
        return getStats(values, summaryStatistics);
    }

    private static Stats getStats(NumericColumn<?> values, SummaryStatistics summaryStatistics) {
        Stats stats = new Stats("Column: " + values.name());
        stats.min = summaryStatistics.getMin();
        stats.max = summaryStatistics.getMax();
        stats.n = summaryStatistics.getN();
        stats.sum = summaryStatistics.getSum();
        stats.variance = summaryStatistics.getVariance();
        stats.populationVariance = summaryStatistics.getPopulationVariance();
        stats.quadraticMean = summaryStatistics.getQuadraticMean();
        stats.geometricMean = summaryStatistics.getGeometricMean();
        stats.mean = summaryStatistics.getMean();
        stats.standardDeviation = summaryStatistics.getStandardDeviation();
        stats.sumOfLogs = summaryStatistics.getSumOfLogs();
        stats.sumOfSquares = summaryStatistics.getSumsq();
        stats.secondMoment = summaryStatistics.getSecondMoment();
        return stats;
    }

    public double range() {
        return (max - min);
    }

    public double standardDeviation() {
        return standardDeviation;
    }

    public long n() {
        return n;
    }

    public double mean() {
        return mean;
    }

    public double min() {
        return min;
    }

    public double max() {
        return max;
    }

    public double sum() {
        return sum;
    }

    public double variance() {
        return variance;
    }

    public double sumOfSquares() {
        return sumOfSquares;
    }

    public double populationVariance() {
        return populationVariance;
    }

    public double sumOfLogs() {
        return sumOfLogs;
    }

    public double geometricMean() {
        return geometricMean;
    }

    public double quadraticMean() {
        return quadraticMean;
    }

    public double secondMoment() {
        return secondMoment;
    }

    public Table asTable() {
        Table t = Table.create(name);
        StringColumn measure = StringColumn.create("Measure");
        DoubleColumn value = DoubleColumn.create("Value");
        t.addColumns(measure);
        t.addColumns(value);

        measure.append("n");
        value.append(n);

        measure.append("sum");
        value.append(sum());

        measure.append("Mean");
        value.append(mean());

        measure.append("Min");
        value.append(min());

        measure.append("Max");
        value.append(max());

        measure.append("Range");
        value.append(range());

        measure.append("Variance");
        value.append(variance());

        measure.append("Std. Dev");
        value.append(standardDeviation());

        return t;
    }

    public Table asTableComplete() {
        Table t = asTable();

        StringColumn measure = t.stringColumn("Measure");
        DoubleColumn value = t.doubleColumn("Value");

        measure.append("Sum of Squares");
        value.append(sumOfSquares());

        measure.append("Sum of Logs");
        value.append(sumOfLogs());

        measure.append("Population Variance");
        value.append(populationVariance());

        measure.append("Geometric Mean");
        value.append(geometricMean());

        measure.append("Quadratic Mean");
        value.append(quadraticMean());

        measure.append("Second Moment");
        value.append(secondMoment());

        return t;
    }
}