更短,更清晰,更快速地实现python中时间序列的波动性

时间:2013-11-27 14:30:45

标签: python inline list-comprehension

我已经使用python一段时间了,但我仍然需要发挥其全部潜力。

我知道我可以通过一些for循环等来解决这个问题,但这太无聊了,我想学习一些新东西:)

我试图计算一个名为time_series的时间序列字典的波动率(v =返回的std,返回=今天的值 - 昨天的值)。 time_series中的每个元素都由一个元组(日期,值)组成 作为结果,我想有一个波动率的载体。

我目前在做什么:我按键(我必须)订购时间序列,然后,对于每个时间序列,如果它包含多于1个值,我计算回报及其标准差,否则我返回0。

我目前正在假设时间序列已根据日期排序。

这是我到目前为止所得到的:

time_series = {'A': [(20130101, 1.0), (20130102, 1.1), (20130103, 1.3)], 'B': [(20130101, 1.0), (20130102, 1.1), (20130103, 1.4)]}
sorted_keys = sorted(time_series.keys())
v = [ scipy.std( [ time_series[ts_id][i+1][1] - time_series[ts_id][i][1] for i in range(len(time_series[ts_id])-1) ] ) if len(time_series[ts_id]) > 1 else 0 for ts_id in sorted_keys ]
print v
[0.049999999999999933, 0.099999999999999867]

我知道这是一个丑陋的1行声明,这就是我现在在这里的原因:) .. 有没有办法让这个更短或更清洁或更好的表现,同时保持理解?

我对所有3个结果感到好奇。

我没有设法对时间序列本身进行排序(现在)。有没有办法做到这一点,同时尽可能保持一切紧凑?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为这很好,但也许你想要这样的东西?

v = time_series.values()
for value in v:
    print value
    returns = []
    returns.append(value[i+1] - value[i])

然后将sci.std应用于返回..