title |
description |
menu |
weight |
flux/v0/tags |
introduced |
exponentialMovingAverage() function |
`exponentialMovingAverage()` calculates the exponential moving average of `n` number of values in the `_value` column giving more weight to more recent data.
|
flux_v0_ref |
name |
parent |
identifier |
exponentialMovingAverage |
universe |
universe/exponentialMovingAverage |
|
|
101 |
|
0.37.0 |
exponentialMovingAverage()
calculates the exponential moving average of n
number of values in the _value
column giving more weight to more recent data.
Exponential moving average rules
- The first value of an exponential moving average over
n
values is the algebraic mean of n
values.
- Subsequent values are calculated as
y(t) = x(t) * k + y(t-1) * (1 - k)
, where:
y(t)
is the exponential moving average at time t
.
x(t)
is the value at time t
.
k = 2 / (1 + n)
.
- The average over a period populated by only
null
values is null
.
- Exponential moving averages skip
null
values.
Function type signature
(<-tables: stream[{A with _value: B}], n: int) => stream[{A with _value: B}] where B: Numeric
{{% caption %}}
For more information, see Function type signatures.
{{% /caption %}}
Parameters
n
({{< req >}})
Number of values to average.
tables
Input data. Default is piped-forward data (<-
).
Examples
Calculate a three point exponential moving average
import "sampledata"
sampledata.int()
|> exponentialMovingAverage(n: 3)
{{< expand-wrapper >}}
{{% expand "View example input and output" %}}
Input data
_time |
_value |
*tag |
2021-01-01T00:00:00Z |
-2 |
t1 |
2021-01-01T00:00:10Z |
10 |
t1 |
2021-01-01T00:00:20Z |
7 |
t1 |
2021-01-01T00:00:30Z |
17 |
t1 |
2021-01-01T00:00:40Z |
15 |
t1 |
2021-01-01T00:00:50Z |
4 |
t1 |
_time |
_value |
*tag |
2021-01-01T00:00:00Z |
19 |
t2 |
2021-01-01T00:00:10Z |
4 |
t2 |
2021-01-01T00:00:20Z |
-3 |
t2 |
2021-01-01T00:00:30Z |
19 |
t2 |
2021-01-01T00:00:40Z |
13 |
t2 |
2021-01-01T00:00:50Z |
1 |
t2 |
Output data
_time |
_value |
*tag |
2021-01-01T00:00:20Z |
5 |
t1 |
2021-01-01T00:00:30Z |
11 |
t1 |
2021-01-01T00:00:40Z |
13 |
t1 |
2021-01-01T00:00:50Z |
8.5 |
t1 |
_time |
_value |
*tag |
2021-01-01T00:00:20Z |
6.666666666666667 |
t2 |
2021-01-01T00:00:30Z |
12.833333333333334 |
t2 |
2021-01-01T00:00:40Z |
12.916666666666668 |
t2 |
2021-01-01T00:00:50Z |
6.958333333333334 |
t2 |
{{% /expand %}}
{{< /expand-wrapper >}}
Calculate a three point exponential moving average with null values
import "sampledata"
sampledata.int(includeNull: true)
|> exponentialMovingAverage(n: 3)
{{< expand-wrapper >}}
{{% expand "View example input and output" %}}
Input data
_time |
_value |
*tag |
2021-01-01T00:00:00Z |
-2 |
t1 |
2021-01-01T00:00:10Z |
|
t1 |
2021-01-01T00:00:20Z |
7 |
t1 |
2021-01-01T00:00:30Z |
|
t1 |
2021-01-01T00:00:40Z |
|
t1 |
2021-01-01T00:00:50Z |
4 |
t1 |
_time |
_value |
*tag |
2021-01-01T00:00:00Z |
|
t2 |
2021-01-01T00:00:10Z |
4 |
t2 |
2021-01-01T00:00:20Z |
-3 |
t2 |
2021-01-01T00:00:30Z |
19 |
t2 |
2021-01-01T00:00:40Z |
|
t2 |
2021-01-01T00:00:50Z |
1 |
t2 |
Output data
_time |
_value |
*tag |
2021-01-01T00:00:20Z |
2.5 |
t1 |
2021-01-01T00:00:30Z |
2.5 |
t1 |
2021-01-01T00:00:40Z |
2.5 |
t1 |
2021-01-01T00:00:50Z |
3.25 |
t1 |
_time |
_value |
*tag |
2021-01-01T00:00:20Z |
0.5 |
t2 |
2021-01-01T00:00:30Z |
9.75 |
t2 |
2021-01-01T00:00:40Z |
9.75 |
t2 |
2021-01-01T00:00:50Z |
5.375 |
t2 |
{{% /expand %}}
{{< /expand-wrapper >}}