29  : mStatistics( stats )
 
   42  mFirst = std::numeric_limits<double>::quiet_NaN();
 
   43  mLast = std::numeric_limits<double>::quiet_NaN();
 
   49  mMin = std::numeric_limits<double>::max();
 
   50  mMax = -std::numeric_limits<double>::max();
 
   77  for ( 
const double value : values )
 
   91  mMin = std::min( mMin, value );
 
   92  mMax = std::max( mMax, value );
 
   96    mValueCount.insert( value, mValueCount.value( value, 0 ) + 1 );
 
   98  if ( mRequiresAllValueStorage )
 
  104  bool convertOk = 
false;
 
  109    const double val = value.toDouble( &convertOk );
 
  121    mFirst = std::numeric_limits<double>::quiet_NaN();
 
  122    mLast = std::numeric_limits<double>::quiet_NaN();
 
  123    mMin = std::numeric_limits<double>::quiet_NaN();
 
  124    mMax = std::numeric_limits<double>::quiet_NaN();
 
  125    mMean = std::numeric_limits<double>::quiet_NaN();
 
  126    mMedian = std::numeric_limits<double>::quiet_NaN();
 
  127    mStdev = std::numeric_limits<double>::quiet_NaN();
 
  128    mSampleStdev = std::numeric_limits<double>::quiet_NaN();
 
  129    mMinority = std::numeric_limits<double>::quiet_NaN();
 
  130    mMajority = std::numeric_limits<double>::quiet_NaN();
 
  131    mFirstQuartile = std::numeric_limits<double>::quiet_NaN();
 
  132    mThirdQuartile = std::numeric_limits<double>::quiet_NaN();
 
  136  mMean = mSum / mCount;
 
  140    double sumSquared = 0;
 
  141    const auto constMValues = mValues;
 
  142    for ( 
const double value : constMValues )
 
  144      const double diff = value - mMean;
 
  145      sumSquared += diff * diff;
 
  147    mStdev = std::pow( sumSquared / mValues.count(), 0.5 );
 
  148    mSampleStdev = std::pow( sumSquared / ( mValues.count() - 1 ), 0.5 );
 
  156    std::sort( mValues.begin(), mValues.end() );
 
  157    const bool even = ( mCount % 2 ) < 1;
 
  160      mMedian = ( mValues[mCount / 2 - 1] + mValues[mCount / 2] ) / 2.0;
 
  164      mMedian = mValues[( mCount + 1 ) / 2 - 1];
 
  171    if ( ( mCount % 2 ) < 1 )
 
  173      const int halfCount = mCount / 2;
 
  174      const bool even = ( halfCount % 2 ) < 1;
 
  177        mFirstQuartile = ( mValues[halfCount / 2 - 1] + mValues[halfCount / 2] ) / 2.0;
 
  181        mFirstQuartile = mValues[( halfCount  + 1 ) / 2 - 1];
 
  186      const int halfCount = mCount / 2 + 1;
 
  187      const bool even = ( halfCount % 2 ) < 1;
 
  190        mFirstQuartile = ( mValues[halfCount / 2 - 1] + mValues[halfCount / 2] ) / 2.0;
 
  194        mFirstQuartile = mValues[( halfCount  + 1 ) / 2 - 1];
 
  202    if ( ( mCount % 2 ) < 1 )
 
  204      const int halfCount = mCount / 2;
 
  205      const bool even = ( halfCount % 2 ) < 1;
 
  208        mThirdQuartile = ( mValues[ halfCount + halfCount / 2 - 1] + mValues[ halfCount + halfCount / 2] ) / 2.0;
 
  212        mThirdQuartile = mValues[( halfCount + 1 ) / 2 - 1 + halfCount ];
 
  217      const int halfCount = mCount / 2 + 1;
 
  218      const bool even = ( halfCount % 2 ) < 1;
 
  221        mThirdQuartile = ( mValues[ halfCount + halfCount / 2 - 2 ] + mValues[ halfCount + halfCount / 2 - 1 ] ) / 2.0;
 
  225        mThirdQuartile = mValues[( halfCount + 1 ) / 2 - 2 + halfCount ];
 
  232    QList<int> valueCounts = mValueCount.values();
 
  236      mMinority = mValueCount.key( *std::min_element( valueCounts.begin(), valueCounts.end() ) );
 
  240      mMajority = mValueCount.key( *std::max_element( valueCounts.begin(), valueCounts.end() ) );
 
  281      return mValueCount.count();
 
  283      return mFirstQuartile;
 
  285      return mThirdQuartile;
 
  287      return mThirdQuartile - mFirstQuartile;
 
  303      return QObject::tr( 
"Count" );
 
  305      return QObject::tr( 
"Count (missing)" );
 
  307      return QObject::tr( 
"Sum" );
 
  309      return QObject::tr( 
"Mean" );
 
  311      return QObject::tr( 
"Median" );
 
  313      return QObject::tr( 
"St dev (pop)" );
 
  315      return QObject::tr( 
"St dev (sample)" );
 
  317      return QObject::tr( 
"Minimum" );
 
  319      return QObject::tr( 
"Maximum" );
 
  321      return QObject::tr( 
"Range" );
 
  323      return QObject::tr( 
"Minority" );
 
  325      return QObject::tr( 
"Majority" );
 
  327      return QObject::tr( 
"Variety" );
 
  329      return QObject::tr( 
"Q1" );
 
  331      return QObject::tr( 
"Q3" );
 
  333      return QObject::tr( 
"IQR" );
 
  335      return QObject::tr( 
"First" );
 
  337      return QObject::tr( 
"Last" );
 
  349      return QStringLiteral( 
"count" );
 
  351      return QStringLiteral( 
"countmissing" );
 
  353      return QStringLiteral( 
"sum" );
 
  355      return QStringLiteral( 
"mean" );
 
  357      return QStringLiteral( 
"median" );
 
  359      return QStringLiteral( 
"stdev" );
 
  361      return QStringLiteral( 
"stdevsample" );
 
  363      return QStringLiteral( 
"min" );
 
  365      return QStringLiteral( 
"max" );
 
  367      return QStringLiteral( 
"range" );
 
  369      return QStringLiteral( 
"minority" );
 
  371      return QStringLiteral( 
"majority" );
 
  373      return QStringLiteral( 
"variety" );
 
  375      return QStringLiteral( 
"q1" );
 
  377      return QStringLiteral( 
"q3" );
 
  379      return QStringLiteral( 
"iqr" );
 
  381      return QStringLiteral( 
"first" );
 
  383      return QStringLiteral( 
"last" );
 
void addVariant(const QVariant &value)
Adds a single value to the statistics calculation.
 
void calculate(const QList< double > &values)
Calculates summary statistics for a list of values.
 
Statistic
Enumeration of flags that specify statistics to be calculated.
 
@ InterQuartileRange
Inter quartile range (IQR)
 
@ Median
Median of values.
 
@ Variety
Variety (count of distinct) values.
 
@ First
First value (since QGIS 3.6)
 
@ Last
Last value (since QGIS 3.6)
 
@ Minority
Minority of values.
 
@ ThirdQuartile
Third quartile.
 
@ Majority
Majority of values.
 
@ CountMissing
Number of missing (null) values.
 
@ Range
Range of values (max - min)
 
@ StDevSample
Sample standard deviation of values.
 
@ FirstQuartile
First quartile.
 
@ StDev
Standard deviation of values.
 
void addValue(double value)
Adds a single value to the statistics calculation.
 
static QString shortName(QgsStatisticalSummary::Statistic statistic)
Returns a short, friendly display name for a statistic, suitable for use in a field name.
 
double statistic(QgsStatisticalSummary::Statistic stat) const
Returns the value of a specified statistic.
 
QgsStatisticalSummary(QgsStatisticalSummary::Statistics stats=QgsStatisticalSummary::All)
Constructor for QgsStatisticalSummary.
 
void reset()
Resets the calculated values.
 
void setStatistics(QgsStatisticalSummary::Statistics stats)
Sets flags which specify which statistics will be calculated.
 
void finalize()
Must be called after adding all values with addValues() and before retrieving any calculated statisti...
 
static QString displayName(QgsStatisticalSummary::Statistic statistic)
Returns the friendly display name for a statistic.
 
static bool isNull(const QVariant &variant)
Returns true if the specified variant should be considered a NULL value.