view gnv-artifacts/src/main/java/de/intevation/gnv/statistics/TimeseriesStatistics.java @ 93:c476fbbaa4ca

Imported Statistics-Classes from old Project. Revision: 3101 Does not compile gnv-artifacts/trunk@138 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Mon, 28 Sep 2009 07:27:06 +0000
parents
children 6a825a184883
line wrap: on
line source
/**
 * Title:           TimeseriesStatistics, $Header: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/TimeseriesStatistics.java,v 1.3 2008/08/18 14:50:33 drewnak Exp $
 * Source:          $Source: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/TimeseriesStatistics.java,v $
 * created by:      Stefan Blume (blume)
 * erstellt am:     06.12.2007
 * Copyright:       con terra GmbH, 2005
 *
 * modified by:     $Author: drewnak $
 * modified on:     $Date: 2008/08/18 14:50:33 $
 * Version:         $Revision: 1.3 $
 * TAG:             $Name:  $
 * locked from:     $Locker:  $
 * CVS State:       $State: Exp $
 * Project:         $ProjectName$
 */
package de.intevation.gnv.statistics;

import java.io.FileReader;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;

import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
import org.apache.commons.math.stat.regression.SimpleRegression;
import org.apache.log4j.Logger;

import au.com.bytecode.opencsv.CSVReader;

import de.conterra.bsh.gdi.gnviewer.datasources.ResultSet;
import de.conterra.bsh.gdi.gnviewer.datasources.Row;
import de.conterra.bsh.gdi.gnviewer.exception.TechnicalException;
import de.conterra.bsh.gdi.gnviewer.util.TempFile;

/**
 * The class <code>TimeseriesStatistics</code> fulfills the following purposes:
 * <ol>
 * <li></li>
 * </ol>
 *
 * @author blume
 * @version 1.0
 * @serial 1.0
 * @see
 * @since 06.12.2007 18:02:27
 */
public class TimeseriesStatistics implements Statistics {

    /**
     * Default Logging instance
     */
    private static Logger sLogger = Logger.getLogger(TimeseriesStatistics.class);
    private static boolean sDebug = sLogger.isDebugEnabled();

    private Statistic[] mStatistics = null;

    /*
    public TimeseriesStatistics(ResultSet pResults) throws TechnicalException {
        DescriptiveStatistics lStatistics = null;
        SimpleRegression lRegression = null;
        ArrayList<Statistic> lStats = new ArrayList<Statistic>();
		int break1, break2;
		int mStart = 0;
		int mEnd = 0;
		int lSeries = 1;
		Row[] mRow = pResults.getResults();

		break1 = mRow[mStart].getIntValue(2);
		break2 = mRow[mStart].getIntValue(3);

		for (int i = 1; i < mRow.length; i++) {
			if (break1 != mRow[i].getIntValue(2)
					|| break2 != mRow[i].getIntValue(3)) {
    	lStatistics = createDescriptiveStatisticsObject(pResults,mStart,mEnd);
        lRegression = createSimpleRegressionObject(pResults,mStart,mEnd);
        addStatisticsValues(lStatistics, lRegression, lStats, lSeries);
				mStart = i;
				break1 = mRow[i].getIntValue(2);
				break2 = mRow[i].getIntValue(3);
              lSeries ++;		
			}
			mEnd = i;
		}
    	lStatistics = createDescriptiveStatisticsObject(pResults,mStart,mEnd);
        lRegression = createSimpleRegressionObject(pResults,mStart,mEnd);
        addStatisticsValues(lStatistics, lRegression, lStats, lSeries);

        mStatistics = new Statistic[lStats.size()];
        mStatistics = lStats.toArray(mStatistics);

    }
    */
    public TimeseriesStatistics(TempFile lImageFile) throws TechnicalException {
        DescriptiveStatistics lStatistics = null;
        SimpleRegression lRegression = null;
        ArrayList<Statistic> lStats = new ArrayList<Statistic>();
		int break1, break2;
		int mStart = 0;
		int mEnd = 0;
		int lSeries = 1;
		CSVReader reader=null;
		if (sDebug) sLogger.debug("TimeseriesStatistics() lImageFile != null");
		try{
			reader = new CSVReader (new FileReader(lImageFile.getFile()), ';');	
			String [] sArrayStrLine = reader.readNext();
			Row row = new Row(sArrayStrLine);
			
			break1 = new Integer (sArrayStrLine[2]).intValue();
			break2 = new Integer (sArrayStrLine[3]).intValue();
			//int i = 1;
			lRegression = new SimpleRegression();
			lStatistics = DescriptiveStatistics.newInstance();
			while ((sArrayStrLine = reader.readNext()) != null) {
				
				if (break1 != new Integer (sArrayStrLine[2]).intValue()
						|| break2 != new Integer (sArrayStrLine[3]).intValue()) {
			    	//lStatistics = createDescriptiveStatisticsObject(pResults,mStart,mEnd);
			        //lRegression = createSimpleRegressionObject(pResults,mStart,mEnd);
					
			        addStatisticsValues(lStatistics, lRegression, lStats, lSeries);
			        
			        lStatistics.clear();
			        lRegression.clear();
			        
			        Row lRow = new Row (sArrayStrLine);
		            lStatistics.addValue(lRow.getDoubleValue(1));
		            Double x = new Double( (lRow.getDateValue(0)).getTime()/1000/3600) ;
		            lRegression.addData(x,lRow.getDoubleValue(1));
					
					break1 = new Integer (sArrayStrLine[2]).intValue();
					break2 = new Integer (sArrayStrLine[3]).intValue();
			        lSeries ++;		
				}
				else{
					Row lRow = new Row (sArrayStrLine);
		            lStatistics.addValue(lRow.getDoubleValue(1));
		            Double x = new Double( (lRow.getDateValue(0)).getTime()/1000/3600) ;
		            lRegression.addData(x,lRow.getDoubleValue(1));
				}
				
			}
	    	//lStatistics = createDescriptiveStatisticsObject(pResults,mStart,mEnd);
	        //lRegression = createSimpleRegressionObject(pResults,mStart,mEnd);
	        addStatisticsValues(lStatistics, lRegression, lStats, lSeries);
	        lStatistics.clear();
	        lRegression.clear();
	        mStatistics = new Statistic[lStats.size()];
	        mStatistics = lStats.toArray(mStatistics);
		}
		catch (Exception e){
			sLogger.error(e.getMessage(), e);
		}
		finally {
			try{
				reader.close();
			}
			catch (Exception e){
				sLogger.error(e.getMessage(), e);
			}
		}

    }
	/**
	 * @param lStatistics
	 * @param lRegression
	 * @param lStats
	 * @param lSeries
	 */
	private void addStatisticsValues(DescriptiveStatistics lStatistics,
			SimpleRegression lRegression, ArrayList<Statistic> lStats,
			int lSeries) {
		lStats.add(new Statistic("gnviewer.statistics.series",(double)lSeries));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.arithmeticMean", lStatistics.getMean()));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.kurtosis", lStatistics.getKurtosis()));
     /*   lStats.add(new Statistic("gnviewer.statistics.descriptive.kurtosisClass", lStatistics.getKurtosisClass()));*/
        lStats.add(new Statistic("gnviewer.statistics.descriptive.max", lStatistics.getMax()));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.min", lStatistics.getMin()));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.n", lStatistics.getN()));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.percentile.90", lStatistics.getPercentile(90)));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.percentile.75", lStatistics.getPercentile(75)));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.percentile.50", lStatistics.getPercentile(50)));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.percentile.10", lStatistics.getPercentile(10)));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.deviation", lStatistics.getStandardDeviation()));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.variance", lStatistics.getVariance()));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.intercept", lRegression.getIntercept()));
        lStats.add(new Statistic("gnviewer.statistics.descriptive.slope", lRegression.getSlope()));
	} 
	
	
	/**
	 * @param pResults
	 * @param pStart
	 * @param pEnd
	 */
	/*
	private SimpleRegression createSimpleRegressionObject ( ResultSet pResults, int pStart, int pEnd)throws TechnicalException{
        SimpleRegression lRegression = new SimpleRegression();
        Row[] lRows = pResults.getResults();
        for (int i = pStart; i < pEnd; i++) {
            Row lRow = lRows[i];
            Double x = new Double( ((Calendar)lRow.getValue(0)).getTimeInMillis()/1000/3600) ;
            lRegression.addData(x,lRow.getDoubleValue(1));
            
        }
    	return lRegression;
    }
	*/
	/**
	 * @param pResults
	 * @param pStart
	 * @param pEnd
	 */
	/*
	private DescriptiveStatistics createDescriptiveStatisticsObject(ResultSet pResults, int pStart, int pEnd) throws TechnicalException {
        DescriptiveStatistics lStatistics = DescriptiveStatistics.newInstance();
        Row[] lRows = pResults.getResults();
        for (int i = pStart; i < pEnd; i++) {
            Row lRow = lRows[i];
            lStatistics.addValue(lRow.getDoubleValue(1));
        }
        return lStatistics;
    }
	
	*/
    public Statistic[] getStatistics() {
        return mStatistics;
    }
}

http://dive4elements.wald.intevation.org