diff gnv-artifacts/src/main/java/de/intevation/gnv/statistics/TimeseriesStatistics.java @ 127:f6f0e4ce4a35

merged gnv-artifacts/0.1
author Thomas Arendsen Hein <thomas@intevation.de>
date Fri, 28 Sep 2012 12:13:41 +0200
parents 158e89c2263b
children 7fb9441dd8af
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/TimeseriesStatistics.java	Fri Sep 28 12:13:41 2012 +0200
@@ -0,0 +1,145 @@
+/**
+ * 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.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
+import org.apache.commons.math.stat.regression.SimpleRegression;
+import org.apache.log4j.Logger;
+
+import de.intevation.gnv.geobackend.base.Result;
+import de.intevation.gnv.statistics.exception.StatisticsException;
+
+
+
+/**
+ * The class <code>TimeseriesStatistics</code> fulfills the following purposes:
+ * <ol>
+ * <li></li>
+ * </ol>
+ *
+ * @author blume
+ * @author Tim Englich <tim.englich@intevation.de>
+ * @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 log = Logger.getLogger(TimeseriesStatistics.class);
+    private static boolean sDebug = log.isDebugEnabled();
+
+    private Collection<Statistic> statistics = null;
+
+    public TimeseriesStatistics(){
+        super();
+    }
+    
+    /**
+     * @see de.intevation.gnv.statistics.Statistics#calculateStatistics(java.util.Collection)
+     */
+    public Collection<Statistic> calculateStatistics(Collection<Result> resultSet) throws StatisticsException {
+        DescriptiveStatistics lStatistics = null;
+        SimpleRegression lRegression = null;
+        statistics = new ArrayList<Statistic>();
+        String break1, break2;
+        int lSeries = 1;
+        try{
+            
+            Iterator<Result> resultIterator = resultSet.iterator();
+            if (resultIterator.hasNext()){
+                Result row = resultIterator.next();
+                break1 = row.getString("GROUP1");
+                break2 = row.getString("GROUP2");
+            lRegression = new SimpleRegression();
+            lStatistics = DescriptiveStatistics.newInstance();
+            while (resultIterator.hasNext()) {
+                
+                if (!break1.equals(row.getString("GROUP1"))
+                        || !break2.equals(row.getString("GROUP2"))) {
+                    addStatisticsValues(lStatistics, lRegression, lSeries);
+                    
+                    lStatistics.clear();
+                    lRegression.clear();
+                    
+                    lStatistics.addValue(row.getDouble("YORDINATE"));
+                    Double x = this.calculateXOrdinateValue(row);
+                    lRegression.addData(x ,row.getDouble("YORDINATE"));
+                    
+                    break1 = row.getString("GROUP1");
+                    break2 = row.getString("GROUP2");
+                    row = resultIterator.next();
+                    lSeries ++;     
+                }
+                else{
+                    
+                    lStatistics.addValue(row.getDouble("YORDINATE"));
+                    Double x = this.calculateXOrdinateValue(row);
+                    lRegression.addData(x,row.getDouble("YORDINATE"));
+                    row = resultIterator.next();
+                }
+                
+            }
+            addStatisticsValues(lStatistics, lRegression,lSeries);
+            lStatistics.clear();
+            lRegression.clear();
+            }
+        }
+        catch (Exception e){
+            log.error(e.getMessage(), e);
+        }
+        
+        return statistics;
+    }
+    
+    
+    protected double calculateXOrdinateValue(Result row) throws SQLException{
+        return new Double( (row.getDate("XORDINATE")).getTime()/1000/3600) ;
+    }
+    
+    
+    /**
+     * @param lStatistics
+     * @param lRegression
+     * @param lStats
+     * @param lSeries
+     */
+    private void addStatisticsValues(DescriptiveStatistics lStatistics,
+            SimpleRegression lRegression, int lSeries) {
+        statistics.add(new Statistic("gnviewer.statistics.series",(double)lSeries));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.arithmeticMean", lStatistics.getMean()));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.kurtosis", lStatistics.getKurtosis()));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.max", lStatistics.getMax()));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.min", lStatistics.getMin()));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.n", lStatistics.getN()));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.percentile.90", lStatistics.getPercentile(90)));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.percentile.75", lStatistics.getPercentile(75)));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.percentile.50", lStatistics.getPercentile(50)));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.percentile.10", lStatistics.getPercentile(10)));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.deviation", lStatistics.getStandardDeviation()));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.variance", lStatistics.getVariance()));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.intercept", lRegression.getIntercept()));
+        statistics.add(new Statistic("gnviewer.statistics.descriptive.slope", lRegression.getSlope()));
+    } 
+}

http://dive4elements.wald.intevation.org