Functions for Statistics : Statistics « Development Class « Java






Functions for Statistics

    

/*
 * Copyright WizTools.org
 * Licensed under the Apache License, Version 2.0:
 * http://www.apache.org/licenses/LICENSE-2.0
 */
//package org.wiztools.commons;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 *
 * @author subWiz
 */
public final class Statistics {
    private Statistics() {}

    private static final String LOG_ARRAY_LENGTH_0 = "Length of array cannot be 0!";

    /* MEAN */

    public static int mean(final int[] list) throws IllegalArgumentException {
        if(list.length == 0) {
            throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);
        }
        int sum = 0;
        for(int n: list) {
            sum += n;
        }
        return sum / list.length;
    }

    public static long mean(final long[] list) throws IllegalArgumentException {
        if(list.length == 0) {
            throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);
        }
        long sum = 0;
        for(long n: list) {
            sum += n;
        }
        return sum / list.length;
    }

    public static float mean(final float[] list) throws IllegalArgumentException {
        if(list.length == 0) {
            throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);
        }
        float sum = 0;
        for(float n: list) {
            sum += n;
        }
        return sum / list.length;
    }

    public static double mean(final double[] list) throws IllegalArgumentException {
        if(list.length == 0) {
            throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);
        }
        float sum = 0;
        for(double n: list) {
            sum += n;
        }
        return sum / list.length;
    }

    /* MEDIAN */

    public static int median(final int[] list) throws IllegalArgumentException {
        if(list.length < 1) {
            throw new IllegalArgumentException();
        }
        Arrays.sort(list);
        if((list.length % 2) == 0) { // is even
            final int idx = list.length / 2;
            return (list[idx] + list[idx-1]) / 2;
        }
        else { // is odd
            final int idx = list.length / 2;
            return list[idx];
        }
    }

    /* MODE */

    private static class ModeCompute <T extends Number> {
        private Map<T, Integer> map = new HashMap<T, Integer>();
        private int maxFrequency = 0;

        void add(T t) {
            final int count = (map.get(t) == null)? 1: (map.get(t) + 1);

            // Update map:
            map.put(t, count);

            // Update maxFrequency:
            if(count > maxFrequency)
                maxFrequency = count;
        }

        List<T> getMode() {
            List<T> out = new ArrayList<T>();

            for(Map.Entry<T, Integer> entry: map.entrySet()) {
                if(entry.getValue() == maxFrequency) {
                    out.add(entry.getKey());
                }
            }

            return out;
        }
    }

    public static int[] mode(final int[] list) throws IllegalArgumentException {
        if(list.length == 0) {
            throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);
        }

        final ModeCompute<Integer> modeComp = new ModeCompute<Integer>();
        for(int i=0; i<list.length; i++) {
            modeComp.add(list[i]);
        }

        final List<Integer> l = modeComp.getMode();

        // Prepare the output array:
        final int[] out = new int[l.size()];
        Iterator<Integer> itr = l.iterator();
        for(int i=0; i<out.length; i++) {
            out[i] = itr.next();
        }

        return out;
    }
}

   
    
    
    
  








Related examples in the same category

1.Statistics Functions
2.Functions for StatisticsFunctions for Statistics
3.Standard deviation is a statistical measure of spread or variability.