2013-11-27 29 views
1

我一直在使用python一段時間,但是我仍然需要充分發揮其潛力。Python中時間序列的更短,更乾淨和更快實現時間序列的實現

我知道我可以解決一些for循環等方面的問題,但是這太無聊了,我想學習新的東西:)

我試圖來計算收益率的波動(V = STD,退貨=今天的價值 - 昨天的價值)時間序列名爲:time_series的字典。 time_series中的每個元素ts都由一個元組(日期,值) 作爲結果,我想要有一個揮發性向量。

我現在在做什麼:我按鍵(我必須)排序時間序列,然後,對於每個時間序列,如果它包含多於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個statment,這就是爲什麼我現在在這裏:) .. 有沒有辦法讓這個無論是短或更清潔或更好的表現,同時保持理解?

我很好奇所有3個結果。

我沒有設法排序時間序列本身(現在)。有沒有辦法做到這一點,同時保持一切儘可能緊湊?

謝謝!

+0

縱觀這篇文章你認爲短期⇒乾淨,即使最肯定沒有。 //另外,一個可運行的示例會讓它更容易幫助。 – Veedrac

+0

你好,我其實不是那個意思,我會重寫那段。 我很好奇所有3種可能的結果 –

+0

嗯,你可以將代碼縮短爲'[scipy.std([t1 [1] -t0 [1])爲t1,t0爲zip(ts [1:],ts )]或[0])爲id,ts在排序(time_series.items(),key = itemgetter(0))]''但我看不到任何明顯的改進,不蒸餾「使用更好的數據類型「和」循環不是邪惡的「。 – Veedrac

回答

0

我認爲這很好,但也許你想要這樣的東西?

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

然後應用到sci.std回報..

相關問題