/usr/include/qgis/qgsstatisticalsummary.h is in libqgis-dev 2.14.11+dfsg-3+deb9u1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 | /***************************************************************************
qgsstatisticalsummary.h
--------------------------------------
Date : May 2015
Copyright : (C) 2015 by Nyall Dawson
Email : nyall dot dawson at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSSTATISTICALSUMMARY_H
#define QGSSTATISTICALSUMMARY_H
#include <QMap>
/***************************************************************************
* This class is considered CRITICAL and any change MUST be accompanied with
* full unit tests in testqgsstatisticalsummary.cpp.
* See details in QEP #17
****************************************************************************/
/** \ingroup core
* \class QgsStatisticalSummary
* \brief Calculator for summary statistics for a list of doubles.
*
* Statistics are calculated by calling @link calculate @endlink and passing a list of doubles. The
* individual statistics can then be retrieved using the associated methods. Note that not all statistics
* are calculated by default. Statistics which require slower computations are only calculated by
* specifying the statistic in the constructor or via @link setStatistics @endlink.
*
* \note Added in version 2.9
*/
class CORE_EXPORT QgsStatisticalSummary
{
public:
//! Enumeration of flags that specify statistics to be calculated
enum Statistic
{
Count = 1, //!< Count
Sum = 2, //!< Sum of values
Mean = 4, //!< Mean of values
Median = 8, //!< Median of values
StDev = 16, //!< Standard deviation of values
StDevSample = 32, //!< Sample standard deviation of values
Min = 64, //!< Min of values
Max = 128, //!< Max of values
Range = 256, //!< Range of values (max - min)
Minority = 512, //!< Minority of values
Majority = 1024, //!< Majority of values
Variety = 2048, //!< Variety (count of distinct) values
FirstQuartile = 4096, //!< First quartile
ThirdQuartile = 8192, //!< Third quartile
InterQuartileRange = 16384, //!< Inter quartile range (IQR)
All = Count | Sum | Mean | Median | StDev | Max | Min | Range | Minority | Majority | Variety | FirstQuartile | ThirdQuartile | InterQuartileRange
};
Q_DECLARE_FLAGS( Statistics, Statistic )
/** Constructor for QgsStatisticalSummary
* @param stats flags for statistics to calculate
*/
QgsStatisticalSummary( const QgsStatisticalSummary::Statistics& stats = All );
virtual ~QgsStatisticalSummary();
/** Returns flags which specify which statistics will be calculated. Some statistics
* are always calculated (eg sum, min and max).
* @see setStatistics
*/
Statistics statistics() const { return mStatistics; }
/** Sets flags which specify which statistics will be calculated. Some statistics
* are always calculated (eg sum, min and max).
* @param stats flags for statistics to calculate
* @see statistics
*/
void setStatistics( const Statistics& stats ) { mStatistics = stats; }
/** Resets the calculated values
*/
void reset();
/** Calculates summary statistics for a list of values
* @param values list of doubles
*/
void calculate( const QList<double>& values );
/** Returns the value of a specified statistic
* @param stat statistic to return
* @returns calculated value of statistic
*/
double statistic( Statistic stat ) const;
/** Returns calculated count of values
*/
int count() const { return mCount; }
/** Returns calculated sum of values
*/
double sum() const { return mSum; }
/** Returns calculated mean of values
*/
double mean() const { return mMean; }
/** Returns calculated median of values. This is only calculated if Statistic::Median has
* been specified in the constructor or via setStatistics.
*/
double median() const { return mMedian; }
/** Returns calculated minimum from values.
*/
double min() const { return mMin; }
/** Returns calculated maximum from values.
*/
double max() const { return mMax; }
/** Returns calculated range (difference between maximum and minimum values).
*/
double range() const { return mMax - mMin; }
/** Returns population standard deviation. This is only calculated if Statistic::StDev has
* been specified in the constructor or via setStatistics.
* @see sampleStDev
*/
double stDev() const { return mStdev; }
/** Returns sample standard deviation. This is only calculated if Statistic::StDev has
* been specified in the constructor or via setStatistics.
* @see stDev
*/
double sampleStDev() const { return mSampleStdev; }
/** Returns variety of values. The variety is the count of unique values from the list.
* This is only calculated if Statistic::Variety has been specified in the constructor
* or via setStatistics.
*/
int variety() const { return mValueCount.count(); }
/** Returns minority of values. The minority is the value with least occurances in the list
* This is only calculated if Statistic::Minority has been specified in the constructor
* or via setStatistics.
* @see majority
*/
double minority() const { return mMinority; }
/** Returns majority of values. The majority is the value with most occurances in the list
* This is only calculated if Statistic::Majority has been specified in the constructor
* or via setStatistics.
* @see minority
*/
double majority() const { return mMajority; }
/** Returns the first quartile of the values. The quartile is calculated using the
* "Tukey's hinges" method.
* @see thirdQuartile
* @see interQuartileRange
*/
double firstQuartile() const { return mFirstQuartile; }
/** Returns the third quartile of the values. The quartile is calculated using the
* "Tukey's hinges" method.
* @see firstQuartile
* @see interQuartileRange
*/
double thirdQuartile() const { return mThirdQuartile; }
/** Returns the inter quartile range of the values. The quartiles are calculated using the
* "Tukey's hinges" method.
* @see firstQuartile
* @see thirdQuartile
*/
double interQuartileRange() const { return mThirdQuartile - mFirstQuartile; }
/** Returns the friendly display name for a statistic
* @param statistic statistic to return name for
*/
static QString displayName( Statistic statistic );
private:
Statistics mStatistics;
int mCount;
double mSum;
double mMean;
double mMedian;
double mMin;
double mMax;
double mStdev;
double mSampleStdev;
double mMinority;
double mMajority;
double mFirstQuartile;
double mThirdQuartile;
QMap< double, int > mValueCount;
};
Q_DECLARE_OPERATORS_FOR_FLAGS( QgsStatisticalSummary::Statistics )
#endif // QGSSTATISTICALSUMMARY_H
|