Successfully reported this slideshow.
Your SlideShare is downloading. ×

lubridateパッケージ入門

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Slide rhino+gh 05
Slide rhino+gh 05
Loading in …3
×

Check these out next

1 of 27 Ad

More Related Content

Viewers also liked (20)

More from Takashi Kitano (15)

Advertisement

Recently uploaded (20)

lubridateパッケージ入門

  1. 1. lubridateパッケージで   君も⽇日付処理理スタ☆ ! Tokyo.R#50   2015-‐‑‒09-‐‑‒05   @kashitan lubridateパッケージ入門
  2. 2. • ⽇日付関連クラス振り返り   • ⽇日付処理理の#Tsurami   • lubridateパッケージの紹介
  3. 3. 日付関連クラス振り返り
  4. 4. 日付関連クラス振り返り • ⽇日付   • Date   ! • 時刻   • POSIXct(POSIX  calendar  time)   • POSIXlt(POSIX  local  time)
  5. 5. Dateクラス • 1970年年1⽉月1⽇日からの経過日数で表現 > # 1970年1月1日は0 > as.Date("1970-01-01") %>% +   as.integer() [1] 0 >  > # 2015年9月5日の3日後 > as.Date("2015-09-05") + 3 [1] "2015-09-08" >  > # 日付の差(difftime関数でも算出可) > (as.Date("2015-09-05") - as.Date("2015-09-01")) %>% +   as.integer() [1] 4
  6. 6. POSIXctクラス • 1970年年1⽉月1⽇日0時0分0秒からの経過 秒数で表現 > # 1970年1月1日0時0分0秒は0 > as.POSIXct("1970-01-01 00:00:00", tz="UTC") %>% +   as.integer() [1] 0 >  > # 2015年9月5日の3時間後 > as.POSIXct("2015-09-05 12:34:56", tz="Japan") + 3 * 60 * 60 [1] "2015-09-05 15:34:56 JST"
  7. 7. POSIXltクラス • ⽇日付時刻要素のリストで表現 > today <- as.POSIXlt("2015-09-05 12:34:56", tz="Japan") > unclass(today) $sec [1] 56 $min [1] 34 $hour [1] 12 ... >  > # 要素にはラベルでアクセス > today$hour [1] 12
  8. 8. 日付処理の#Tsurami
  9. 9. 日付処理の#Tsurami • formatパラメータの指定   • 直感的でないPOSIXlt   • 既存オブジェクトの変更更
  10. 10. formatパラメータの指定 • “yyyy-‐‑‒mm-‐‑‒dd”,  “yyyy/mm/dd”以外 formatパラメータが必要 > as.Date("20150905")  以下にエラー charToDate(x) :     文字列は標準的な曖昧さのない書式にはなっていません  > > as.Date("20150905", format="%Y%m%d") [1] "2015-09-05" > > as.POSIXlt("20150905123456", format="%Y%m%d%H%M%S") [1] "2015-09-05 12:34:56 JST" %mと%M、いつも迷う
  11. 11. 直感的でないPOSIXlt • $year,  $monは注意が必要 > today <- as.POSIXlt("2015-09-05") > # $yearは1900年からの経過年 > today$year [1] 115 >  > # $monは0-11 > today$mon [1] 8 > > as.POSIXlt("2016-01-01")$mon [1] 0 1900を足す必要がある 1を足す必要がある
  12. 12. 既存オブジェクトの変更 • 固定値で変更更するのにformatパラ(ry > # 翌月や30日後などは簡単 > d <- as.Date(c("2015-01-01", "2015-02-02")) > d + months(1) [1] "2015-02-01" "2015-03-02" > d + days(30) [1] "2015-01-31" "2015-03-04" >  > # 固定で変更するのは大変 > d <- as.Date(format(d, format="%Y-09-%d")) > d [1] "2015-09-01" "2015-09-02"
  13. 13. What s lubridate? • Date, POSIXtオブジェクトを直感的に 扱えるパッケージ • 神Hadley製
  14. 14. What s lubridate? • Dateオブジェクトを直感的に扱える パッケージ P.32 “Hadley Wickham, an author of several popular R packages, has often made use of this data set in illustrating data manipulation in R.” ↑ 異教徒からも言及されるくらい神
  15. 15. 日付処理の#Tsurami • formatパラメータの指定   • 直感的でないPOSIXlt   • 既存オブジェクトの変更更 解決
  16. 16. formatパラメータの指定 • ymd(),  mdy(),dmy()などでformat 指定が不不要 > library(lubridate) ! > ymd("2015-09-05") [1] "2015-09-05 UTC" > ymd("20150905") [1] "2015-09-05 UTC" ! > mdy("Sep-05-2015", locale="C") [1] "2015-09-05 UTC" >  > dmy("05/09/15") [1] "2015-09-05 UTC"
  17. 17. formatパラメータの指定 • ymd(),  mdy(),dmy()などでformat 指定が不不要 > library(lubridate) ! > ymd("2015-09-05") [1] "2015-09-05 UTC" > ymd("20150905") [1] "2015-09-05 UTC" ! > mdy("Sep-05-2015", locale="C") [1] "2015-09-05 UTC" >  > dmy("05/09/15") [1] "2015-09-05 UTC" 環境によってはlocale= C が必要
  18. 18. formatパラメータの指定 • ymd_̲hms(),  mdy_̲hms()などで POSIXtも対応 > ymd_hms("20150905123456") [1] "2015-09-05 12:34:56 UTC" ! > options(digits.secs=3) > ymd_hms("2015-09-05 12:34:56.789") [1] "2015-09-05 12:34:56.789 UTC" ! > mdy_hms("Sep-05-2015 12:34:56.789", locale="C") [1] "2015-09-05 12:34:56.789 UTC"
  19. 19. formatパラメータの指定 • ⽇日付を含む⽂文字列列であればいい感じに 解析してくれる > # creating heterogeneous date object > hetero_date <- c("second chapter due on 2013, august, 24",   +                  "first chapter submitted on 2013, 08, 18",  +                  "2013 aug 23") ! > # parsing the character date object and convert to valid date > ymd(hetero_date, locale="C") [1] "2013-08-24 UTC" "2013-08-18 UTC" "2013-08-23 UTC"
  20. 20. 直感的でないPOSIXlt • year(),month()などで直感的に取得 > # 現在時刻の取得 > ct <- now() > ct [1] "2015-09-05 01:20:26.254 JST" ! > # 年 > year(ct) [1] 2015 ! > # 月(label=TRUEで略称) > month(ct) [1] 9
  21. 21. 直感的でないPOSIXlt • year(),month()などで直感的に取得 > # 日(day or mday) > day(ct) [1] 5 > # 曜日 > wday(ct) [1] 7 > # 週 > week(ct) [1] 36 > # 年間通算日 > yday(ct) [1] 248
  22. 22. 直感的でないPOSIXlt • year(),month()などで直感的に取得 > # 時 > hour(ct) [1] 1 > # 分 > minute(ct) [1] 20 > # 秒 > second(ct) [1] 26.25421
  23. 23. 既存オブジェクトの変更 • year(),month()などで変更更も可能 > d <- ymd(c("2015-01-01", "2015-02-02")) > d [1] "2015-01-01 UTC" "2015-02-02 UTC” ! > # 月を9月に変更 > month(d) <- 9 ! > d [1] "2015-09-01 UTC" "2015-09-02 UTC” ! > # 2016年に変更 > year(d) <- 2016 > d [1] "2016-09-01 UTC" "2016-09-02 UTC"
  24. 24. その他便利?関数 • with_̲tz()   ! • leap_̲year() > # ニューヨークの現在日時 > with_tz(now(), "America/New_York") [1] "2015-09-04 13:04:21.272 EDT” > # うるう年の判定 > d <- ymd(c("2015-01-01", "2016/01/01", "20170101")) > d [1] "2015-01-01 UTC" "2016-01-01 UTC" "2017-01-01 UTC" ! > leap_year(d) [1] FALSE  TRUE FALSE
  25. 25. まとめ
  26. 26. lubridateパッケージを使うと 日付処理が る!!

×