在處理時間序列數據的時候有哪些大幅提高效率的方法或技術?

我自己處理過一些時間序列數據,但是總覺得自己的很多workflow和細節處理不是最優的。希望大家可以分享一下平時數據處理、清洗中的一些心得。不限制行業,不限制語言,不限制目的,主要是一些思路交流,多謝


原本作為一個數據使用方,對數據的吐槽是永不停止的。然而吐槽是有代價的,後來公司無人清洗數據,作為一個迫切想和這些數據談個戀愛的勤奮礦工(認真臉),兼職了數據清洗工作。於是這些槽點一個不拉地回報了我(哭喪臉)。這裡我就只講講數據清洗的workflow好了。

其實從使用者的角度出發,所做的處理大概可以分為以下幾步。第一點,數據的格式統一。一般來說作為一個捨得花錢的公司,各種各樣來源的data vendor肯定都要打交道。數據來源多種多樣,數據質量也會參差不齊,有買來的數據提供商的數據(國內這幾家大數據商的數據質量真是不敢恭維。。萬德的商品期貨tick數據,說的就是你!),有自己交易系統落到本地的數據。不要求完美無缺,至少先把格式弄成統一。你愛hdf5 csv txt bin mat都隨意,有列名的把列名叫一樣咯不要一個叫Volume一個叫Vol,沒列名的把排列順序搞一致了否則最後debug要去暈頭轉向地數數。第二點,通用邏輯上的處理,一些基本的一眼就看破一畫圖就出錯的數據你總得處理吧。價格超出漲跌幅的異常,成交量和買一賣一掛單量為0的異常,交易時間的異常。這些別偷懶,國內數據商80%以上這裡都會有點問題。第三點,數據更新的自動化job,這點其實不難。上面的流程都寫完代碼固定了,把每日的數據更新自動化。最簡單的寫一個crontab每天定時自動更新。稍微追求效果的用些任務管理軟體,程序出錯了自動發個郵件或者蹦個提醒,每天你回家吃香的喝辣的時候電腦就替你哼哧哼哧把活幹了。最後,要做一個耐撕的boy。對於其他使用者要友好一點,有人用有人挑錯經得起考驗的數據才是好數據。寫一點點友好的數據介面,把各個數據種類和來源的數據統一用幾個簡單的類或者函數包裹起來,讓別人一學就會一用就懂。

嗯,差不多就醬。


Vectorization computation, parallel computing (Python: list comprehension, generator function, lambda expression, CPython) 推薦 Python for Finance.


1.我用spark+pandas,可以提高效率,如果是上下文無關的,可以線性提高效率。

2.時間序列中最大的問題在於上下文是有關的,分散式很難做,比如說pandas裡面的shift,如果你的dataframe是分布在多機上的,就很麻煩。

3.當然,我也有辦法,不過code不漂亮,非常adhoc,思路是你要把這些分片按照你想要的形式做join,這樣你所需要的上下文就可以被統一到一個instance裡面去了。

4.雖然可以提升效率,但是編程跟測試難度比較大,也比較費時間。


沒有什麼最優套路,從數據清洗到特徵工程,都需要具體問題具體分析。

等做過的東西多了,經驗到位了,自然會針對某個問題採取相對有效率的比較promising最接近正確思路的套路或者方法。饒是如此,試錯返工走彎路依然是無法避免的家常便飯,只是經驗或許讓你少走一些彎路而已


首先安利一發,既然你是在談時間序列,我猜我們多少要做回歸或者forecast,我就是前幾天看這個入門的!這本在線資料非常深入淺出,非常適合forecasting方面做方法論的骨幹https://www.otexts.org/fpp

我是用R上來10個G的sales data,因為都是別人洗好了的,所以上來讀了一部分,開始畫畫圖,一開始畫點圖很容易發現一些意想不到的收穫,而且為事後的發掘方向能起到不小的啟發作用。我一上來畫了幾個線性圖,基本可以確定sales大致的趨勢。這個階段R完全可以當草稿紙用,隨便寫隨便畫,各種matrix plot瞎造,auto correlation也要看,總之這方面的調查越深入越細緻越好,為後面的模型選擇對比能提供非常好的指導作用,R語言的各種模型調參能力非常可觀,我曾在另外一個blog上看到過tbats+regrssor的跑法,還有fourier手動seasonality的,我也是看的很羨慕,但是還不會這種高級魔法。

探索完了之後一般差不多對用什麼模型怎麼個參數會有個大致的想法,周期設多長,哪個模型可能跑出來更好的預測,可能的噪音和優化的方法,這方面的思路需要紮實的數學和編程功底,我自己因為很菜,經常感到知識儲備不夠用,有想法不知道表達不知道實現,或者乾脆就想不到…總之我覺得這個是一個data miner的奧義所在,能依靠直覺和數學功底找出來可能的去處噪音的方法。淺顯的就是log一下試試之類…高級一點的去trend去season去noise,沾大神的光,希望有朝一日我能成功的照貓畫虎。

因為我比較菜,所以第三個階段就是跑樣本,熟悉套路,確定模式。跑完樣本就可以清空workplace然後開始query數據寫腳本。腳本寫好了基本就一勞永逸了,什麼時候要改要用,拿出來點兩下就可以。

然後這時候就可以看可不可以給時間序列加regressor做回歸了。跑一些諸如「假日與否」,「溫度」「心情指數」這種奇奇怪怪的regressor,希望能出個好結果!

因為我真的很菜,所以匿了。我的sales data 用logarithm做掉也只能做出來69%的correlation,也是心寒。你們有什麼好的辦法或者思路,請務必偷偷告訴我…我跑了三個不同的預測模型,arima tbats還有stlf,可是結果都沒有太令人滿意。


各個module一定要分裝,千萬不要合在一起,摔


推薦閱讀:

有哪些比較好的做異常值檢測的方法?
喜歡 Data Visualization 這個概念的人如何在追求「數據之美」的同時避免「數字的陷阱」?
需要做數據彙報,有什麼好的工具推薦?
數據產品的定義和種類?
你從數據中發現了哪些奇妙的不為人知的知識或者見解?

TAG:Python | 數據 | R編程語言 | 時間序列分析 | 大數據處理 |