【发布时间】:2020-11-13 07:15:52
【问题描述】:
我有不规则缺失值的数据,我想使用 BigQuery 标准 SQL 使用线性插值将其转换为一定间隔。
具体来说,我有这样的数据:
# data is missing irregulary
+------+-------+
| time | value |
+------+-------+
| 1 | 3.0 |
| 5 | 5.0 |
| 7 | 1.0 |
| 9 | 8.0 |
| 10 | 4.0 |
+------+-------+
我想将此表转换如下:
# interpolated with interval of 1
+------+--------------------+
| time | value_interpolated |
+------+--------------------+
| 1 | 3.0 |
| 2 | 3.5 |
| 3 | 4.0 |
| 4 | 4.5 |
| 5 | 5.0 |
| 6 | 3.0 |
| 7 | 1.0 |
| 8 | 4.5 |
| 9 | 8.0 |
| 10 | 4.0 |
+------+--------------------+
有什么聪明的解决方案吗?
补充:本题与this question in stackoverflow类似,不同之处在于数据不规则丢失。
谢谢。
【问题讨论】:
-
把3.0放到time=6的逻辑是什么。
-
感谢您的评论。计算为time=5(值为5.0)和time=7(值为1.0)的平均值
-
你能解释一下你是如何在时间(2,3,4)达到 3.5,4,4.5 的吗
-
谢谢。它在 time=1(value is 3) 和 time=5(value is 5.0) 之间线性插值数据。因此,第一个 3.5、4.0、4.5 中 0.5 的间隔计算为(值 5.0 - 值 3.0)/(时间 5 - 时间 1)= 2/4 = 0.5。
-
谢谢,按照这个逻辑,time=8 的值应该是 (value 8.0- value 1.0)/(time 9 - Time 7) = 7/2 = 3.5
标签: sql google-bigquery interpolation linear-interpolation