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個結果。
我沒有設法排序時間序列本身(現在)。有沒有辦法做到這一點,同時保持一切儘可能緊湊?
謝謝!
縱觀這篇文章你認爲短期⇒乾淨,即使最肯定沒有。 //另外,一個可運行的示例會讓它更容易幫助。 – Veedrac
你好,我其實不是那個意思,我會重寫那段。 我很好奇所有3種可能的結果 –
嗯,你可以將代碼縮短爲'[scipy.std([t1 [1] -t0 [1])爲t1,t0爲zip(ts [1:],ts )]或[0])爲id,ts在排序(time_series.items(),key = itemgetter(0))]''但我看不到任何明顯的改進,不蒸餾「使用更好的數據類型「和」循環不是邪惡的「。 – Veedrac