QGIS API Documentation  3.14.0-Pi (9f7028fd23)
qgsstatisticalsummary.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsstatisticalsummary.h
3  --------------------------------------
4  Date : May 2015
5  Copyright : (C) 2015 by Nyall Dawson
6  Email : nyall dot dawson at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15
16 #ifndef QGSSTATISTICALSUMMARY_H
17 #define QGSSTATISTICALSUMMARY_H
18
19 #include <QMap>
20 #include <QVariant>
21 #include <cmath>
22 #include "qgis_core.h"
23
24 /***************************************************************************
25  * This class is considered CRITICAL and any change MUST be accompanied with
26  * full unit tests in testqgsstatisticalsummary.cpp.
27  * See details in QEP #17
28  ****************************************************************************/
29
43 class CORE_EXPORT QgsStatisticalSummary
44 {
45  public:
46
48  enum Statistic
49  {
50  Count = 1 << 0,
51  CountMissing = 1 << 15,
52  Sum = 1 << 1,
53  Mean = 1 << 2,
54  Median = 1 << 3,
55  StDev = 1 << 4,
56  StDevSample = 1 << 5,
57  Min = 1 << 6,
58  Max = 1 << 7,
59  Range = 1 << 8,
60  Minority = 1 << 9,
61  Majority = 1 << 10,
62  Variety = 1 << 11,
63  FirstQuartile = 1 << 12,
64  ThirdQuartile = 1 << 13,
65  InterQuartileRange = 1 << 14,
66  First = 1 << 16,
67  Last = 1 << 17,
68  All = Count | CountMissing | Sum | Mean | Median | StDev | Max | Min | Range | Minority | Majority | Variety | FirstQuartile | ThirdQuartile | InterQuartileRange | First | Last
69  };
70  Q_DECLARE_FLAGS( Statistics, Statistic )
71
72
76  QgsStatisticalSummary( QgsStatisticalSummary::Statistics stats = QgsStatisticalSummary::All );
77
78  virtual ~QgsStatisticalSummary() = default;
79
85  Statistics statistics() const { return mStatistics; }
86
93  void setStatistics( QgsStatisticalSummary::Statistics stats );
94
98  void reset();
99
104  void calculate( const QList<double> &values );
105
121  void addValue( double value );
122
138  void addVariant( const QVariant &value );
139
147  void finalize();
148
155  double statistic( QgsStatisticalSummary::Statistic stat ) const;
156
160  int count() const { return mCount; }
161
166  int countMissing() const { return mMissing; }
167
171  double sum() const { return mSum; }
172
177  double mean() const { return mMean; }
178
184  double median() const { return mMedian; }
185
190  double min() const { return mMin; }
191
196  double max() const { return mMax; }
197
202  double range() const { return std::isnan( mMax ) || std::isnan( mMin ) ? std::numeric_limits<double>::quiet_NaN() : mMax - mMin; }
203
210  double first() const { return mFirst; }
211
218  double last() const { return mLast; }
219
226  double stDev() const { return mStdev; }
227
234  double sampleStDev() const { return mSampleStdev; }
235
241  int variety() const { return mValueCount.count(); }
242
250  double minority() const { return mMinority; }
251
259  double majority() const { return mMajority; }
260
268  double firstQuartile() const { return mFirstQuartile; }
269
277  double thirdQuartile() const { return mThirdQuartile; }
278
286  double interQuartileRange() const { return std::isnan( mThirdQuartile ) || std::isnan( mFirstQuartile ) ? std::numeric_limits<double>::quiet_NaN() : mThirdQuartile - mFirstQuartile; }
287
292  static QString displayName( QgsStatisticalSummary::Statistic statistic );
293
299  static QString shortName( QgsStatisticalSummary::Statistic statistic );
300
301  private:
302
303  Statistics mStatistics;
304
305  int mCount;
306  int mMissing;
307  double mSum;
308  double mMean;
309  double mMedian;
310  double mMin;
311  double mMax;
312  double mStdev;
313  double mSampleStdev;
314  double mMinority;
315  double mMajority;
316  double mFirstQuartile;
317  double mThirdQuartile;
318  double mFirst;
319  double mLast;
320  QMap< double, int > mValueCount;
321  QList< double > mValues;
322  bool mRequiresAllValueStorage = false;
323  bool mRequiresHisto = false;
324 };
325
326 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsStatisticalSummary::Statistics )
327
328 #endif // QGSSTATISTICALSUMMARY_H
QgsStatisticalSummary
Calculator for summary statistics for a list of doubles.
Definition: qgsstatisticalsummary.h:43
QgsStatisticalSummary::sampleStDev
double sampleStDev() const
Returns sample standard deviation.
Definition: qgsstatisticalsummary.h:234
QgsStatisticalSummary::firstQuartile
double firstQuartile() const
Returns the first quartile of the values.
Definition: qgsstatisticalsummary.h:268
QgsStatisticalSummary::min
double min() const
Returns calculated minimum from values.
Definition: qgsstatisticalsummary.h:190
QgsStatisticalSummary::countMissing
int countMissing() const
Returns the number of missing (null) values.
Definition: qgsstatisticalsummary.h:166
QgsStatisticalSummary::minority
double minority() const
Returns minority of values.
Definition: qgsstatisticalsummary.h:250
QgsStatisticalSummary::interQuartileRange
double interQuartileRange() const
Returns the inter quartile range of the values.
Definition: qgsstatisticalsummary.h:286
QgsStatisticalSummary::sum
double sum() const
Returns calculated sum of values.
Definition: qgsstatisticalsummary.h:171
QgsStatisticalSummary::max
double max() const
Returns calculated maximum from values.
Definition: qgsstatisticalsummary.h:196
QgsStatisticalSummary::last
double last() const
Returns the last value obtained.
Definition: qgsstatisticalsummary.h:218
QgsStatisticalSummary::stDev
double stDev() const
Returns population standard deviation.
Definition: qgsstatisticalsummary.h:226
QgsStatisticalSummary::count
int count() const
Returns calculated count of values.
Definition: qgsstatisticalsummary.h:160
QgsStatisticalSummary::first
double first() const
Returns the first value obtained.
Definition: qgsstatisticalsummary.h:210
QgsStatisticalSummary::majority
double majority() const
Returns majority of values.
Definition: qgsstatisticalsummary.h:259
QgsStatisticalSummary::Statistic
Statistic
Enumeration of flags that specify statistics to be calculated.
Definition: qgsstatisticalsummary.h:48
QgsStatisticalSummary::mean
double mean() const
Returns calculated mean of values.
Definition: qgsstatisticalsummary.h:177
QgsStatisticalSummary::All
@ All
Definition: qgsstatisticalsummary.h:68
QgsStatisticalSummary::median
double median() const
Returns calculated median of values.
Definition: qgsstatisticalsummary.h:184
QgsStatisticalSummary::variety
int variety() const
Returns variety of values.
Definition: qgsstatisticalsummary.h:241
QgsStatisticalSummary::range
double range() const
Returns calculated range (difference between maximum and minimum values).
Definition: qgsstatisticalsummary.h:202
QgsStatisticalSummary::thirdQuartile
double thirdQuartile() const
Returns the third quartile of the values.
Definition: qgsstatisticalsummary.h:277
QgsStatisticalSummary::statistics
Statistics statistics() const
Returns flags which specify which statistics will be calculated.
Definition: qgsstatisticalsummary.h:85