tim@93: /**
tim@93: * 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 $
tim@93: * Source: $Source: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/TimeseriesStatistics.java,v $
tim@93: * created by: Stefan Blume (blume)
tim@93: * erstellt am: 06.12.2007
tim@93: * Copyright: con terra GmbH, 2005
tim@93: *
tim@93: * modified by: $Author: drewnak $
tim@93: * modified on: $Date: 2008/08/18 14:50:33 $
tim@93: * Version: $Revision: 1.3 $
tim@93: * TAG: $Name: $
tim@93: * locked from: $Locker: $
tim@93: * CVS State: $State: Exp $
tim@93: * Project: $ProjectName$
tim@93: */
tim@93: package de.intevation.gnv.statistics;
tim@93:
tim@93: import java.io.FileReader;
tim@93: import java.util.ArrayList;
tim@93: import java.util.Calendar;
tim@93: import java.util.Collections;
tim@93: import java.util.List;
tim@93:
tim@93: import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
tim@93: import org.apache.commons.math.stat.regression.SimpleRegression;
tim@93: import org.apache.log4j.Logger;
tim@93:
tim@93: import au.com.bytecode.opencsv.CSVReader;
tim@93:
tim@93: import de.conterra.bsh.gdi.gnviewer.datasources.ResultSet;
tim@93: import de.conterra.bsh.gdi.gnviewer.datasources.Row;
tim@93: import de.conterra.bsh.gdi.gnviewer.exception.TechnicalException;
tim@93: import de.conterra.bsh.gdi.gnviewer.util.TempFile;
tim@93:
tim@93: /**
tim@93: * The class TimeseriesStatistics
fulfills the following purposes:
tim@93: *
tim@93: *
tim@93: *
tim@93: *
tim@93: * @author blume
tim@93: * @version 1.0
tim@93: * @serial 1.0
tim@93: * @see
tim@93: * @since 06.12.2007 18:02:27
tim@93: */
tim@93: public class TimeseriesStatistics implements Statistics {
tim@93:
tim@93: /**
tim@93: * Default Logging instance
tim@93: */
tim@93: private static Logger sLogger = Logger.getLogger(TimeseriesStatistics.class);
tim@93: private static boolean sDebug = sLogger.isDebugEnabled();
tim@93:
tim@93: private Statistic[] mStatistics = null;
tim@93:
tim@93: /*
tim@93: public TimeseriesStatistics(ResultSet pResults) throws TechnicalException {
tim@93: DescriptiveStatistics lStatistics = null;
tim@93: SimpleRegression lRegression = null;
tim@93: ArrayList lStats = new ArrayList();
tim@93: int break1, break2;
tim@93: int mStart = 0;
tim@93: int mEnd = 0;
tim@93: int lSeries = 1;
tim@93: Row[] mRow = pResults.getResults();
tim@93:
tim@93: break1 = mRow[mStart].getIntValue(2);
tim@93: break2 = mRow[mStart].getIntValue(3);
tim@93:
tim@93: for (int i = 1; i < mRow.length; i++) {
tim@93: if (break1 != mRow[i].getIntValue(2)
tim@93: || break2 != mRow[i].getIntValue(3)) {
tim@93: lStatistics = createDescriptiveStatisticsObject(pResults,mStart,mEnd);
tim@93: lRegression = createSimpleRegressionObject(pResults,mStart,mEnd);
tim@93: addStatisticsValues(lStatistics, lRegression, lStats, lSeries);
tim@93: mStart = i;
tim@93: break1 = mRow[i].getIntValue(2);
tim@93: break2 = mRow[i].getIntValue(3);
tim@93: lSeries ++;
tim@93: }
tim@93: mEnd = i;
tim@93: }
tim@93: lStatistics = createDescriptiveStatisticsObject(pResults,mStart,mEnd);
tim@93: lRegression = createSimpleRegressionObject(pResults,mStart,mEnd);
tim@93: addStatisticsValues(lStatistics, lRegression, lStats, lSeries);
tim@93:
tim@93: mStatistics = new Statistic[lStats.size()];
tim@93: mStatistics = lStats.toArray(mStatistics);
tim@93:
tim@93: }
tim@93: */
tim@93: public TimeseriesStatistics(TempFile lImageFile) throws TechnicalException {
tim@93: DescriptiveStatistics lStatistics = null;
tim@93: SimpleRegression lRegression = null;
tim@93: ArrayList lStats = new ArrayList();
tim@93: int break1, break2;
tim@93: int mStart = 0;
tim@93: int mEnd = 0;
tim@93: int lSeries = 1;
tim@93: CSVReader reader=null;
tim@93: if (sDebug) sLogger.debug("TimeseriesStatistics() lImageFile != null");
tim@93: try{
tim@93: reader = new CSVReader (new FileReader(lImageFile.getFile()), ';');
tim@93: String [] sArrayStrLine = reader.readNext();
tim@93: Row row = new Row(sArrayStrLine);
tim@93:
tim@93: break1 = new Integer (sArrayStrLine[2]).intValue();
tim@93: break2 = new Integer (sArrayStrLine[3]).intValue();
tim@93: //int i = 1;
tim@93: lRegression = new SimpleRegression();
tim@93: lStatistics = DescriptiveStatistics.newInstance();
tim@93: while ((sArrayStrLine = reader.readNext()) != null) {
tim@93:
tim@93: if (break1 != new Integer (sArrayStrLine[2]).intValue()
tim@93: || break2 != new Integer (sArrayStrLine[3]).intValue()) {
tim@93: //lStatistics = createDescriptiveStatisticsObject(pResults,mStart,mEnd);
tim@93: //lRegression = createSimpleRegressionObject(pResults,mStart,mEnd);
tim@93:
tim@93: addStatisticsValues(lStatistics, lRegression, lStats, lSeries);
tim@93:
tim@93: lStatistics.clear();
tim@93: lRegression.clear();
tim@93:
tim@93: Row lRow = new Row (sArrayStrLine);
tim@93: lStatistics.addValue(lRow.getDoubleValue(1));
tim@93: Double x = new Double( (lRow.getDateValue(0)).getTime()/1000/3600) ;
tim@93: lRegression.addData(x,lRow.getDoubleValue(1));
tim@93:
tim@93: break1 = new Integer (sArrayStrLine[2]).intValue();
tim@93: break2 = new Integer (sArrayStrLine[3]).intValue();
tim@93: lSeries ++;
tim@93: }
tim@93: else{
tim@93: Row lRow = new Row (sArrayStrLine);
tim@93: lStatistics.addValue(lRow.getDoubleValue(1));
tim@93: Double x = new Double( (lRow.getDateValue(0)).getTime()/1000/3600) ;
tim@93: lRegression.addData(x,lRow.getDoubleValue(1));
tim@93: }
tim@93:
tim@93: }
tim@93: //lStatistics = createDescriptiveStatisticsObject(pResults,mStart,mEnd);
tim@93: //lRegression = createSimpleRegressionObject(pResults,mStart,mEnd);
tim@93: addStatisticsValues(lStatistics, lRegression, lStats, lSeries);
tim@93: lStatistics.clear();
tim@93: lRegression.clear();
tim@93: mStatistics = new Statistic[lStats.size()];
tim@93: mStatistics = lStats.toArray(mStatistics);
tim@93: }
tim@93: catch (Exception e){
tim@93: sLogger.error(e.getMessage(), e);
tim@93: }
tim@93: finally {
tim@93: try{
tim@93: reader.close();
tim@93: }
tim@93: catch (Exception e){
tim@93: sLogger.error(e.getMessage(), e);
tim@93: }
tim@93: }
tim@93:
tim@93: }
tim@93: /**
tim@93: * @param lStatistics
tim@93: * @param lRegression
tim@93: * @param lStats
tim@93: * @param lSeries
tim@93: */
tim@93: private void addStatisticsValues(DescriptiveStatistics lStatistics,
tim@93: SimpleRegression lRegression, ArrayList lStats,
tim@93: int lSeries) {
tim@93: lStats.add(new Statistic("gnviewer.statistics.series",(double)lSeries));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.arithmeticMean", lStatistics.getMean()));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.kurtosis", lStatistics.getKurtosis()));
tim@93: /* lStats.add(new Statistic("gnviewer.statistics.descriptive.kurtosisClass", lStatistics.getKurtosisClass()));*/
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.max", lStatistics.getMax()));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.min", lStatistics.getMin()));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.n", lStatistics.getN()));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.percentile.90", lStatistics.getPercentile(90)));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.percentile.75", lStatistics.getPercentile(75)));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.percentile.50", lStatistics.getPercentile(50)));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.percentile.10", lStatistics.getPercentile(10)));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.deviation", lStatistics.getStandardDeviation()));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.variance", lStatistics.getVariance()));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.intercept", lRegression.getIntercept()));
tim@93: lStats.add(new Statistic("gnviewer.statistics.descriptive.slope", lRegression.getSlope()));
tim@93: }
tim@93:
tim@93:
tim@93: /**
tim@93: * @param pResults
tim@93: * @param pStart
tim@93: * @param pEnd
tim@93: */
tim@93: /*
tim@93: private SimpleRegression createSimpleRegressionObject ( ResultSet pResults, int pStart, int pEnd)throws TechnicalException{
tim@93: SimpleRegression lRegression = new SimpleRegression();
tim@93: Row[] lRows = pResults.getResults();
tim@93: for (int i = pStart; i < pEnd; i++) {
tim@93: Row lRow = lRows[i];
tim@93: Double x = new Double( ((Calendar)lRow.getValue(0)).getTimeInMillis()/1000/3600) ;
tim@93: lRegression.addData(x,lRow.getDoubleValue(1));
tim@93:
tim@93: }
tim@93: return lRegression;
tim@93: }
tim@93: */
tim@93: /**
tim@93: * @param pResults
tim@93: * @param pStart
tim@93: * @param pEnd
tim@93: */
tim@93: /*
tim@93: private DescriptiveStatistics createDescriptiveStatisticsObject(ResultSet pResults, int pStart, int pEnd) throws TechnicalException {
tim@93: DescriptiveStatistics lStatistics = DescriptiveStatistics.newInstance();
tim@93: Row[] lRows = pResults.getResults();
tim@93: for (int i = pStart; i < pEnd; i++) {
tim@93: Row lRow = lRows[i];
tim@93: lStatistics.addValue(lRow.getDoubleValue(1));
tim@93: }
tim@93: return lStatistics;
tim@93: }
tim@93:
tim@93: */
tim@93: public Statistic[] getStatistics() {
tim@93: return mStatistics;
tim@93: }
tim@93: }