Revert "Transformation: Added variance and standard deviation (#48844)" (#48997)

This reverts commit 906484b809a1e4df219fc7dd3b7fe8c34e31fda9.
This commit is contained in:
Torkel Ödegaard
2022-05-16 17:21:23 +02:00
committed by GitHub
parent 3d922a4e67
commit a2ebdf2bc2
3 changed files with 21 additions and 88 deletions

View File

@ -6,27 +6,23 @@ weight = 1100
# Reference: Calculation types # Reference: Calculation types
You can perform the following calculations in Grafana. Navigate to the **Transform** tab and in the bar gauge, gauge, and stat visualizations. Refer to the following list of calculations you can perform in Grafana. You can find these calculations in the **Transform** tab and in the bar gauge, gauge, and stat visualizations.
| Calculation | Description | | Calculation | Description |
| :------------------------------ | :---------------------------------------------------------------- | | :----------------- | :-------------------------------------------------------- |
| All nulls | True when all values are null | | All nulls | True when all values are null |
| All zeros | True when all values are 0 | | All zeros | True when all values are 0 |
| Change count | Number of times the field's value changes | | Change count | Number of times the field's value changes |
| Count | Number of values in a field | | Count | Number of values in a field |
| Delta | Cumulative change in value, only counts increments | | Delta | Cumulative change in value, only counts increments |
| Difference | Difference between first and last value of a field | | Difference | Difference between first and last value of a field |
| Difference percent | Percentage change between first and last value of a field | | Difference percent | Percentage change between first and last value of a field |
| Distinct count | Number of unique values in a field | | Distinct count | Number of unique values in a field |
| First (not null) | First, not null value in a field | | First (not null) | First, not null value in a field |
| Max | Maximum value of a field | | Max | Maximum value of a field |
| Mean | Mean value of all values in a field | | Mean | Mean value of all values in a field |
| Variance (Population) | Variance (based on population) of all values in a field | | Min | Minimum value of a field |
| Standard deviation (Population) | Standard deviation (based on population) of all values in a field | | Min (above zero) | Minimum, positive value of a field |
| Variance (Sample) | Variance (based on sample) of all values in a field | | Range | Difference between maximum and minimum values of a field |
| Standard deviation (Sample) | Standard deviation (based on sample) of all values in a field | | Step | Minimal interval between values of a field |
| Min | Minimum value of a field | | Total | Sum of all values in a field |
| Min (above zero) | Minimum, positive value of a field |
| Range | Difference between maximum and minimum values of a field |
| Step | Minimal interval between values of a field |
| Total | Sum of all values in a field |

View File

@ -56,26 +56,13 @@ describe('Stats Calculators', () => {
it('should calculate basic stats', () => { it('should calculate basic stats', () => {
const stats = reduceField({ const stats = reduceField({
field: basicTable.fields[0], field: basicTable.fields[0],
reducers: [ reducers: ['first', 'last', 'mean', 'count'],
'first',
'last',
'mean',
'count',
'Variance (Population)',
'Variance (Sample)',
'Standard deviation (Population)',
'Standard deviation (Sample)',
],
}); });
expect(stats.first).toEqual(10); expect(stats.first).toEqual(10);
expect(stats.last).toEqual(20); expect(stats.last).toEqual(20);
expect(stats.mean).toEqual(15); expect(stats.mean).toEqual(15);
expect(stats.count).toEqual(2); expect(stats.count).toEqual(2);
expect(stats.variancePopulation).toEqual(25);
expect(stats.varianceSample).toEqual(50);
expect(stats.stddevPopulation).toEqual(5);
expect(stats.stddevSample).toBeCloseTo(7.0710678, 5);
}); });
it('should support a single stat also', () => { it('should support a single stat also', () => {

View File

@ -10,10 +10,6 @@ export enum ReducerID {
min = 'min', min = 'min',
logmin = 'logmin', logmin = 'logmin',
mean = 'mean', mean = 'mean',
variancePopulation = 'variancePopulation',
stddevPopulation = 'stddevPopulation',
varianceSample = 'varianceSample',
stddevSample = 'stddevSample',
last = 'last', last = 'last',
first = 'first', first = 'first',
count = 'count', count = 'count',
@ -156,30 +152,6 @@ export const fieldReducers = new Registry<FieldReducerInfo>(() => [
{ id: ReducerID.min, name: 'Min', description: 'Minimum Value', standard: true }, { id: ReducerID.min, name: 'Min', description: 'Minimum Value', standard: true },
{ id: ReducerID.max, name: 'Max', description: 'Maximum Value', standard: true }, { id: ReducerID.max, name: 'Max', description: 'Maximum Value', standard: true },
{ id: ReducerID.mean, name: 'Mean', description: 'Average Value', standard: true, aliasIds: ['avg'] }, { id: ReducerID.mean, name: 'Mean', description: 'Average Value', standard: true, aliasIds: ['avg'] },
{
id: ReducerID.variancePopulation,
name: 'Variance (Population)',
description: 'Variance (based on population) of all values in a field',
standard: true,
},
{
id: ReducerID.stddevPopulation,
name: 'Standard deviation (Population)',
description: 'Standard deviation (based on population) of all values in a field',
standard: true,
},
{
id: ReducerID.varianceSample,
name: 'Variance (Sample)',
description: 'Variance (based on sample) of all values in a field',
standard: true,
},
{
id: ReducerID.stddevSample,
name: 'Standard deviation (Sample)',
description: 'Standard deviation (based on sample) of all values in a field',
standard: true,
},
{ {
id: ReducerID.sum, id: ReducerID.sum,
name: 'Total', name: 'Total',
@ -284,10 +256,6 @@ export function doStandardCalcs(field: Field, ignoreNulls: boolean, nullAsZero:
min: Number.MAX_VALUE, min: Number.MAX_VALUE,
logmin: Number.MAX_VALUE, logmin: Number.MAX_VALUE,
mean: null, mean: null,
variancePopulation: null,
stddevPopulation: null,
varianceSample: null,
stddevSample: null,
last: null, last: null,
first: null, first: null,
lastNotNull: null, lastNotNull: null,
@ -306,8 +274,6 @@ export function doStandardCalcs(field: Field, ignoreNulls: boolean, nullAsZero:
previousDeltaUp: true, previousDeltaUp: true,
} as FieldCalcs; } as FieldCalcs;
let squareSum = 0;
const data = field.values; const data = field.values;
calcs.count = data.length; calcs.count = data.length;
@ -377,10 +343,6 @@ export function doStandardCalcs(field: Field, ignoreNulls: boolean, nullAsZero:
if (currentValue < calcs.logmin && currentValue > 0) { if (currentValue < calcs.logmin && currentValue > 0) {
calcs.logmin = currentValue; calcs.logmin = currentValue;
} }
let _oldMean = calcs.mean;
calcs.mean += (currentValue - _oldMean) / calcs.nonNullCount;
squareSum += (currentValue - _oldMean) * (currentValue - calcs.mean);
} }
if (currentValue !== 0) { if (currentValue !== 0) {
@ -404,19 +366,7 @@ export function doStandardCalcs(field: Field, ignoreNulls: boolean, nullAsZero:
} }
if (calcs.nonNullCount > 0) { if (calcs.nonNullCount > 0) {
calcs.variancePopulation = squareSum / calcs.nonNullCount; calcs.mean = calcs.sum! / calcs.nonNullCount;
}
if (calcs.nonNullCount > 0) {
calcs.stddevPopulation = Math.sqrt(calcs.variancePopulation);
}
if (calcs.nonNullCount > 0) {
calcs.varianceSample = squareSum / (calcs.nonNullCount - 1);
}
if (calcs.nonNullCount > 0) {
calcs.stddevSample = Math.sqrt(calcs.varianceSample);
} }
if (calcs.allIsNull) { if (calcs.allIsNull) {