如何在Python中聚合时间序列?
我有两个不同的时间序列,时间戳部分重叠:
import scikits.timeseries as ts
from datetime import datetime
a = ts.time_series([1,2,3], dates=[datetime(2010,10,20), datetime(2010,10,21), datetime(2010,10,23)], freq='D')
b = ts.time_series([4,5,6], dates=[datetime(2010,10,20), datetime(2010,10,22), datetime(2010,10,23)], freq='D')
它代表以下数据:
Day: 20. 21. 22. 23.
a: 1 2 - 3
b: 4 - 5 6
我想用系数 a(0.3) 和 b(0.7) 计算每天的加权平均值,同时忽略缺失值:
Day 20.: (0.3 * 1 + 0.7 * 4) / (0.3 + 0.7) = 3.1 / 1. = 3.1
Day 21.: (0.3 * 2 ) / (0.3 ) = 0.6 / 0.3 = 2
Day 22.: ( 0.7 * 5) / ( 0.7) = 3.5 / 0.7 = 5
Day 23.: (0.3 * 3 + 0.7 * 6) / (0.3 + 0.7) = 3.1 / 1. = 5.1
当我第一次尝试对齐这些值时timeseries:
a1, b1 = ts.aligned(a, b)
我得到了正确屏蔽的 timeseries:
timeseries([1 2 -- 3],
dates = [20-Oct-2010 ... 23-Oct-2010],
freq = D)
timeseries([4 -- 5 6],
dates = [20-Oct-2010 ... 23-Oct-2010],
freq = D)
但是当我执行 a1 * 0.3 + b1 * 0.7
时,它会忽略仅出现在一个 timeseries 中的值:
timeseries([3.1 -- -- 5.1],
dates = [20-Oct-2010 ... 23-Oct-2010],
freq = D)
我应该怎么做才能收到等待的值?
timeseries([3.1 2. 5. 5.1],
dates = [20-Oct-2010 ... 23-Oct-2010],
freq = D)
编辑:答案应该也适用于两个以上具有不同权重和不同缺失值的初始时间序列。
因此,如果我们有四个权重为 T1(0.1)、T2(0.2)、T3(0.3) 和 T4(0.4) 的时间序列,则它们在给定时间戳的权重将为:
| T1 | T2 | T3 | T4 |
weight | 0.1 | 0.2 | 0.3 | 0.4 |
-------------------------------------
all present | 10% | 20% | 30% | 40% |
T1 missing | | 22% | 33% | 45% |
T1,T2 miss. | | | 43% | 57% |
T4 missing | 17% | 33% | 50% | |
etc.
I have two different timeseries with partially overlapping timestamps:
import scikits.timeseries as ts
from datetime import datetime
a = ts.time_series([1,2,3], dates=[datetime(2010,10,20), datetime(2010,10,21), datetime(2010,10,23)], freq='D')
b = ts.time_series([4,5,6], dates=[datetime(2010,10,20), datetime(2010,10,22), datetime(2010,10,23)], freq='D')
which represents following data:
Day: 20. 21. 22. 23.
a: 1 2 - 3
b: 4 - 5 6
I would like to calculate a weighted average on every day with coefficients a(0.3) and b(0.7), while ignoring missing values:
Day 20.: (0.3 * 1 + 0.7 * 4) / (0.3 + 0.7) = 3.1 / 1. = 3.1
Day 21.: (0.3 * 2 ) / (0.3 ) = 0.6 / 0.3 = 2
Day 22.: ( 0.7 * 5) / ( 0.7) = 3.5 / 0.7 = 5
Day 23.: (0.3 * 3 + 0.7 * 6) / (0.3 + 0.7) = 3.1 / 1. = 5.1
when I first try to align these timeseries:
a1, b1 = ts.aligned(a, b)
I get correctly masked timeseries:
timeseries([1 2 -- 3],
dates = [20-Oct-2010 ... 23-Oct-2010],
freq = D)
timeseries([4 -- 5 6],
dates = [20-Oct-2010 ... 23-Oct-2010],
freq = D)
but when I do a1 * 0.3 + b1 * 0.7
, it ignores values, that are present in one timeseries only:
timeseries([3.1 -- -- 5.1],
dates = [20-Oct-2010 ... 23-Oct-2010],
freq = D)
What should I do to receive the awaited?
timeseries([3.1 2. 5. 5.1],
dates = [20-Oct-2010 ... 23-Oct-2010],
freq = D)
EDIT: The answer should be applicable also to more than two initial timeseries with different weights and differently missing values.
So if we have four timeseries with weights T1(0.1), T2(0.2), T3(0.3) and T4(0.4), their weights at a given timestamp will be:
| T1 | T2 | T3 | T4 |
weight | 0.1 | 0.2 | 0.3 | 0.4 |
-------------------------------------
all present | 10% | 20% | 30% | 40% |
T1 missing | | 22% | 33% | 45% |
T1,T2 miss. | | | 43% | 57% |
T4 missing | 17% | 33% | 50% | |
etc.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我尝试过并发现这一点:
这适用于具有多个初始时间序列的编辑问题。但希望有人能找到更好的。
编辑:这是我的功能:
适用于任意数量的时间序列;-)
I have tried and found this:
This is applicable to the edited question with more than one initial timeseries. But hopefully someone will find better.
EDIT: And this is my function:
Works for any number of timeseries ;-)