當我們要處理財經資料的時候,很容易遇到時間格式轉換處理的問題。
尤其像是面對交易的 tick 資料時動則數百萬筆。
在 R 中,如果用 as.POSIXct 處理的話,那個速度會讓人等到天荒地老。
假若時間格式是 "2017-06-01 12:34:56" 的 character 形式的話,
我們想把它改成 POSIXct 格式以利之後的資料處理。
這時,我們可以利用 lubridate 套件中的 ymd_hms 函數
就可以把這個時間日期字串轉成 POSIXct 的時間資料格式了。
===============================================
以下我們用 2017-01-03 至 2017-05-26 的小型台灣指數期貨的 tick 檔為例:
我們想把它改成 POSIXct 格式以利之後的資料處理。
這時,我們可以利用 lubridate 套件中的 ymd_hms 函數
library(lubridate) ymd_hms("2017-06-01 12:34:56")
就可以把這個時間日期字串轉成 POSIXct 的時間資料格式了。
===============================================
以下我們用 2017-01-03 至 2017-05-26 的小型台灣指數期貨的 tick 檔為例:
從 2017-01-03 到 2017-05-26 共有 5028981 筆資料
但是其中的 Time 格式為 character
> mtx Date Product Contract Time Price Volume Nearer Further Opening 1: 2017-01-03 MTX 201701 2017-01-03 08:45:00 9266 566 NA NA * 2: 2017-01-03 MTX 201701 2017-01-03 08:45:00 9266 2 NA NA 3: 2017-01-03 MTX 201701 2017-01-03 08:45:00 9266 2 NA NA 4: 2017-01-03 MTX 201701 2017-01-03 08:45:00 9266 2 NA NA 5: 2017-01-03 MTX 201701 2017-01-03 08:45:00 9265 2 NA NA --- 5028977: 2017-05-26 MTX 201803 2017-05-26 13:43:52 9628 2 NA NA 5028978: 2017-05-26 MTX 201803 2017-05-26 13:44:31 9628 2 NA NA 5028979: 2017-05-26 MTX 201803 2017-05-26 13:44:44 9628 2 NA NA 5028980: 2017-05-26 MTX 201803 2017-05-26 13:44:56 9628 2 NA NA 5028981: 2017-05-26 MTX 201803 2017-05-26 13:44:56 9629 2 NA NA
但是其中的 Time 格式為 character
> str(mtx) Classes ‘data.table’ and 'data.frame': 5028981 obs. of 9 variables: $ Time : chr "2017-01-03 08:45:00" "2017-01-03 08:45:00" "2017-01-03 08:45:00" "2017-01-03 08:45:00" ...
如果我們用 as.POSIXct 轉換時間格式的話,執行的時間和轉換後的格式如下:
> system.time(mtx[,as.POSIXct(Time)]) user system elapsed 102.399 34.636 137.121 > str(mtx) Classes ‘data.table’ and 'data.frame': 5028981 obs. of 9 variables: $ Time : POSIXct, format: "2017-01-03 08:45:00" "2017-01-03 08:45:00" "2017-01-03 08:45:00" "2017-01-03 08:45:00" ...
如果我們用 lubridate package 的 ymd_hms() 函數轉換時間格式的話,執行的時間則為:
> system.time(mtx[,ymd_hms(Time)]) user system elapsed 0.939 0.117 1.058 > str(mtx) Classes ‘data.table’ and 'data.frame': 5028981 obs. of 9 variables: $ Time : POSIXct, format: "2017-01-03 08:45:00" "2017-01-03 08:45:00" "2017-01-03 08:45:00" "2017-01-03 08:45:00" ...
兩者格式相同,但是速度相差了 130 倍...
沒有留言:
張貼留言
有什麼話想告訴我嗎?歡迎在此留言喔!