LoginSignup
3
3

More than 5 years have passed since last update.

lubridateパッケージの時間抽出・変換の速度について

Last updated at Posted at 2015-09-30

概要

  • Rの日付・時間周りの操作で便利なlubridateパッケージがよく使われるが、実際その速度ってどうなのか調べてみた
    • というか、上司が調べてた。ので、それを私の方でまとめた。
  • 結果としては、lubridateを使わない方が速かった。

データの準備

> days <- seq(as.POSIXct("2000-1-1 00:00:00"),len=365*24*10, by="1 hour")
> head(days, n=3)
[1] "2000-01-01 00:00:00 JST" "2000-01-01 01:00:00 JST" "2000-01-01 02:00:00 JST"
> tail(days, n=3)
[1] "2009-12-28 21:00:00 JST" "2009-12-28 22:00:00 JST" "2009-12-28 23:00:00 JST"

例:年月日に丸め変換

lubridateを使うパターン

> system.time(day <- floor_date(days, "day"))
   user  system elapsed 
  0.292   0.047   0.346 
> head(day, n=3)
[1] "2000-01-01 JST" "2000-01-01 JST" "2000-01-01 JST"

lubridateを使わないバターン

> system.time(day <- as.POSIXct(trunc(days, 'days')))
   user  system elapsed 
  0.065   0.003   0.070 
> head(day, n=3)
[1] "2000-01-01 JST" "2000-01-01 JST" "2000-01-01 JST"

思ってたより差があった。

例:時間(hour)の抽出

lubridateを使うパターン

> system.time(hours <- hour(days))
   user  system elapsed 
  0.058   0.002   0.061 
> head(hours, n=3)
[1] 0 1 2

lubridateを使わないバターン

> system.time(hours <- as.integer(as.POSIXlt(days)$hour))
   user  system elapsed 
  0.029   0.005   0.034 
> head(hours, n=3)
[1] 0 1 2

少しの差だが、使わないパターンの方が速い。

まとめ

  • 数十万単位のベクトルでは、さらに差が広がった。
  • ただし、可読性という点では、lubridateはとても良いと思う。
  • 速度を気にするなら、使わないパターンもおさせておくと良いかも。
  • ちなみに、自社の分析チームでは、可読性向上のため、独自の日付・時間操作関数を独自パッケージで運用している。

参考

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3