add percentile information if available

This commit is contained in:
2021-04-02 18:29:18 +02:00
parent f56744eb6b
commit a1b4c7006d
15 changed files with 322 additions and 168 deletions

View File

@@ -2,74 +2,82 @@ package org.lucares.pdbui.domain;
import java.util.Collection;
import org.lucares.pdb.plot.api.Percentiles;
public class DataSeriesStats {
private final int values;
private final long maxValue;
private final double average;
private final String name;
private final StyleAndColor dashTypeAndColor;
private final int values;
private final long maxValue;
private final double average;
private final String name;
private final StyleAndColor dashTypeAndColor;
private Percentiles percentiles;
public DataSeriesStats(final int values, final long maxValue, final double average) {
this.name = "<noName>";
this.dashTypeAndColor = new StyleAndColor("000", 0);
this.values = values;
this.maxValue = maxValue;
this.average = average;
public DataSeriesStats(final int values, final long maxValue, final double average) {
this.name = "<noName>";
this.dashTypeAndColor = new StyleAndColor("000", 0);
this.values = values;
this.maxValue = maxValue;
this.average = average;
}
public DataSeriesStats(final String name, final StyleAndColor dashTypeAndColor, final int values, final long maxValue,
final double average, final Percentiles percentiles) {
this.name = name;
this.dashTypeAndColor = dashTypeAndColor;
this.values = values;
this.maxValue = maxValue;
this.average = average;
this.percentiles = percentiles;
}
/**
* The number of values in the date range, without applying the y-range.
*
* @return total number of values
*/
public int getValues() {
return values;
}
public StyleAndColor getDashTypeAndColor() {
return dashTypeAndColor;
}
public long getMaxValue() {
return maxValue;
}
public double getAverage() {
return average;
}
public Percentiles getPercentiles() {
return percentiles;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "[name=" + name + ", dashTypeAndColor=" + dashTypeAndColor + ", values=" + values + ", maxValue=" + maxValue
+ ", average=" + average + "]";
}
public static double average(final Collection<DataSeriesStats> stats) {
long n = 0;
double average = 0;
for (final DataSeriesStats stat : stats) {
final int newValues = stat.getValues();
final double newAverage = stat.getAverage();
if (newValues > 0) {
average = (average * n + newAverage * newValues) / (n + newValues);
n += newValues;
}
}
public DataSeriesStats(final String name, final StyleAndColor dashTypeAndColor, final int values,
final long maxValue, final double average) {
this.name = name;
this.dashTypeAndColor = dashTypeAndColor;
this.values = values;
this.maxValue = maxValue;
this.average = average;
}
/**
* The number of values in the date range, without applying the y-range.
*
* @return total number of values
*/
public int getValues() {
return values;
}
public StyleAndColor getDashTypeAndColor() {
return dashTypeAndColor;
}
public long getMaxValue() {
return maxValue;
}
public double getAverage() {
return average;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "[name=" + name + ", dashTypeAndColor=" + dashTypeAndColor + ", values=" + values + ", maxValue="
+ maxValue + ", average=" + average + "]";
}
public static double average(final Collection<DataSeriesStats> stats) {
long n = 0;
double average = 0;
for (final DataSeriesStats stat : stats) {
final int newValues = stat.getValues();
final double newAverage = stat.getAverage();
if (newValues > 0) {
average = (average * n + newAverage * newValues) / (n + newValues);
n += newValues;
}
}
return average;
}
return average;
}
}

View File

@@ -6,84 +6,84 @@ import java.util.List;
import org.lucares.recommind.logs.DataSeries;
public class PlotResponseStats {
private long maxValue;
private long maxValue;
private int values;
private int values;
private double average;
private double average;
private List<DataSeriesStats> dataSeriesStats;
private List<DataSeriesStats> dataSeriesStats;
public PlotResponseStats() {
super();
public PlotResponseStats() {
super();
}
public PlotResponseStats(final long maxValue, final int values, final double average,
final List<DataSeriesStats> dataSeriesStats) {
this.maxValue = maxValue;
this.values = values;
this.average = average;
this.dataSeriesStats = dataSeriesStats;
}
public long getMaxValue() {
return maxValue;
}
public void setMaxValue(final long maxValue) {
this.maxValue = maxValue;
}
public int getValues() {
return values;
}
public void setValues(final int values) {
this.values = values;
}
public double getAverage() {
return average;
}
public void setAverage(final double average) {
this.average = average;
}
public List<DataSeriesStats> getDataSeriesStats() {
return dataSeriesStats;
}
public void setDataSeriesStats(final List<DataSeriesStats> dataSeriesStats) {
this.dataSeriesStats = dataSeriesStats;
}
@Override
public String toString() {
return "PlotResponseStats [maxValue=" + maxValue + ", values=" + values + ", average=" + average
+ ", dataSeriesStats=" + dataSeriesStats + "]";
}
public static PlotResponseStats fromDataSeries(final List<DataSeries> dataSeries) {
int values = 0;
long maxValue = 0;
final List<DataSeriesStats> dataSeriesStats = new ArrayList<>();
for (final DataSeries dataSerie : dataSeries) {
values += dataSerie.getValues();
maxValue = Math.max(maxValue, dataSerie.getMaxValue());
final StyleAndColor lineStyle = new StyleAndColor(dataSerie.getStyle().getColor().getColor(),
dataSerie.getStyle().getPointType());
dataSeriesStats.add(new DataSeriesStats(dataSerie.getTitle(), lineStyle, dataSerie.getValues(),
dataSerie.getMaxValue(), dataSerie.getAverage(), dataSerie.getPercentiles()));
}
public PlotResponseStats(final long maxValue, final int values, final double average,
final List<DataSeriesStats> dataSeriesStats) {
final double average = Math.round(DataSeriesStats.average(dataSeriesStats));
this.maxValue = maxValue;
this.values = values;
this.average = average;
this.dataSeriesStats = dataSeriesStats;
}
public long getMaxValue() {
return maxValue;
}
public void setMaxValue(final long maxValue) {
this.maxValue = maxValue;
}
public int getValues() {
return values;
}
public void setValues(final int values) {
this.values = values;
}
public double getAverage() {
return average;
}
public void setAverage(final double average) {
this.average = average;
}
public List<DataSeriesStats> getDataSeriesStats() {
return dataSeriesStats;
}
public void setDataSeriesStats(final List<DataSeriesStats> dataSeriesStats) {
this.dataSeriesStats = dataSeriesStats;
}
@Override
public String toString() {
return "PlotResponseStats [maxValue=" + maxValue + ", values=" + values + ", average=" + average
+ ", dataSeriesStats=" + dataSeriesStats + "]";
}
public static PlotResponseStats fromDataSeries(final List<DataSeries> dataSeries) {
int values = 0;
long maxValue = 0;
final List<DataSeriesStats> dataSeriesStats = new ArrayList<>();
for (final DataSeries dataSerie : dataSeries) {
values += dataSerie.getValues();
maxValue = Math.max(maxValue, dataSerie.getMaxValue());
final StyleAndColor lineStyle = new StyleAndColor(dataSerie.getStyle().getColor().getColor(),
dataSerie.getStyle().getPointType());
dataSeriesStats.add(new DataSeriesStats(dataSerie.getTitle(), lineStyle, dataSerie.getValues(),
dataSerie.getMaxValue(), dataSerie.getAverage()));
}
final double average = Math.round(DataSeriesStats.average(dataSeriesStats));
return new PlotResponseStats(maxValue, values, average, dataSeriesStats);
}
return new PlotResponseStats(maxValue, values, average, dataSeriesStats);
}
}