[读书笔记r4ds]16.Dates and times

在线读书:
R for data science
github地址: https://github.com/hadley/r4ds

16. Dates and Times

library(lubridate)

16.2 Creating date/times

3种date/times格式:

  • date. Tibbles print this as <date>.

  • time. Tibbles print this as <time>.

  • date-time. is a date plus a time: (typically to the nearest second). Tibbles print this as <dttm>.

You should always use the simplest possible data type that works for your needs.
today() ## date of today
now() ## date-time of now
3 种需要使用date/time的途径;

  • From a string.
  • From individual date-time components.
  • From an existing date/time object.

16.2.1 From strings

通过y年,m月,d日的不同顺序组合来创制

ymd("2017-01-31") ## 年月日
#> [1] "2017-01-31"
mdy("January 31st, 2017")## 月日年
#> [1] "2017-01-31"
dmy("31-Jan-2017") ## 日月年
#> [1] "2017-01-31"
ymd(20170131) ##也可以识别非字符串形式

也可以创制date-time

ymd_hms("2017-01-31 20:11:59")
#> [1] "2017-01-31 20:11:59 UTC"
mdy_hm("01/31/2017 08:01")
#> [1] "2017-01-31 08:01:00 UTC"

16.2.2 From individual components

对于分散在不同列中的组成部分使用
make_date() for dates, or make_datetime() for date-times:

flights %>% 
  select(year, month, day, hour, minute) %>% 
  mutate(departure = make_datetime(year, month, day, hour, minute))
#> # A tibble: 336,776 x 6
#>    year month   day  hour minute departure          
#>   <int> <int> <int> <dbl>  <dbl> <dttm>             
#> 1  2013     1     1     5     15 2013-01-01 05:15:00
#> 2  2013     1     1     5     29 2013-01-01 05:29:00
#> 3  2013     1     1     5     40 2013-01-01 05:40:00
#> 4  2013     1     1     5     45 2013-01-01 05:45:00
#> 5  2013     1     1     6      0 2013-01-01 06:00:00
#> 6  2013     1     1     5     58 2013-01-01 05:58:00
#> # … with 3.368e+05 more rows

-date-times in a numeric context (like in a histogram), 1 means 1 second, so a binwidth of 86400 means one day. For dates, 1 means 1 day.

16.2.3 From other types

  • as_datetime() #转换date-time格式,
  • as_date() # 转换为date格式。
  • “Unix Epoch”时间,是从Epoch(1970年1月1日00:00:00 UTC)开始所经过的秒数,不考虑[闰秒]。在大多数的[UNIX]系统中UNIX时间戳存储为32位,这样会引发2038年问题或Y2038。If the offset is in seconds, use as_datetime(); if it’s in days, use as_date().
as_datetime(today())
#> [1] "2019-01-08 UTC"
as_date(now())
#> [1] "2019-01-08"
as_datetime(60 * 60 * 10)
#> [1] "1970-01-01 10:00:00 UTC"
as_date(365 * 10 + 2)
#> [1] "1980-01-01"

16.3 Date-time components

  • year() , month(), mday() (day of the month), yday() (day of the year), wday() (day of the week), hour(), minute(), and second().
  • month() and wday() 可以设置 label = TRUE参数,显示月份或者星期几的缩写。设置abbr = FALSE 参数可以显示全称。

16.3.2 Rounding 近似

  • floor_date() #round down (floor)往前
  • round_date() # 四舍五入
  • ceiling_date()# round up (ceiling)靠后

16.3.3 Setting components

  • 使用 <- 对date/time 进行更改
  • update() # 对多个部分进行修改。update(datetime, year = 2020, month = 2, mday = 2, hour = 2)
  • If values are too big, they will roll-over

16.4 Time spans

  • durations, 持续时间.
  • periods, 周期.
  • intervals, 起止时间.

16.4.1 Durations

  • 两个时间相减 ## 产生的格式为difftime
  • as.duration()###转换为duration格式。始终以秒为单位计算持续时间,Larger units are created by converting minutes, hours, days, weeks, and years to seconds at the standard rate (60 seconds in a minute, 60 minutes in an hour, 24 hours in day, 7 days in a week, 365 days in a year).
  • dseconds() ##通过函数创制Duration 格式的时间,形式为dxxxs()
    dminutes() ##
    dhours()
    ddays()
    dweeks()
    dyears()
  • 时间间隔可以相加或相减 ##如果遇到闰年、夏令时等问题,结果会不同。

16.4.2 Periods 周期

以下函数将创制周期为单位的数据,同类型数据可以相加减:
days() # 1天
seconds(15) ## 15s
minutes(10) ## 10min
hours(12) ## 12 hour
months()## 月
weeks() ## 周
years()## 年

16.4.3 Intervals

  • today() %--% next_year ### 以"%--%" 隔开两个时间点,得到Interval 格式的数据。
  • pick the simplest data structure that solves your problem.
  • If you only care about physical time, use a duration;
  • if you need to add human times, use a period;
  • if you need to figure out how long a span is in human units, use an interval.
    image.png

    Figure 16.1 不同时间格式的计算操作规律.

16.5 Time zones

  • Sys.timezone() # 查看系统时区
  • lubridate always uses UTC. UTC (Coordinated Universal Time) is the standard time zone used by the scientific community and roughly equivalent to its predecessor GMT (Greenwich Mean Time).调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。
  • GMT(Greenwich Mean Time)——格林尼治标准时间
  • It does not have DST, which makes a convenient representation for computation. DTS是Daylight Saving Time的缩写,称为阳光节约时,在我国称为夏时制,又称夏令时,是一种为节约能源而人为调整地方时间的制度。
  • Operations that combine date-times, like c(), will often drop the time zone.

16.3.4 Exercises

  1. How does the distribution of flight times within a day change over the course of the year?
flights_dt %>% 
  mutate(dep_time=update(dep_time,year = 2020, month = 2, mday = 2)) %>% 
  ggplot(aes(dep_time))+geom_freqpoly(binwidth = 3600)
  1. Compare dep_time, sched_dep_time and dep_delay. Are they consistent? Explain your findings.
flights_dt %>% 
  mutate(delay=(dep_time-sched_dep_time)) %>% 
  select(tailnum,dep_time,sched_dep_time,dep_delay,delay) 
  1. Compare air_time with the duration between the departure and arrival. Explain your findings. (Hint: consider the location of the airport.)
flights %>% select(air_time,distance) %>% 
  ggplot(aes(distance,air_time))+geom_point()
  1. How does the average delay time change over the course of a day? Should you use dep_time or sched_dep_time? Why?
##
flights_dt %>% mutate(dep_time=update(dep_time,year=2013,month=1,mday=1))%>% 
  group_by(dep_time) %>% 
  summarise(mean=mean(dep_delay)) %>% 
  ggplot(aes(dep_time,mean))+geom_line()
flights_dt %>% mutate(sched_dep_time=update(sched_dep_time,year=2013,month=1,mday=1))%>% 
  group_by(sched_dep_time) %>% 
  summarise(mean_delay=mean(dep_delay)) %>% 
  ggplot(aes(sched_dep_time,mean_delay))+geom_point()+geom_smooth()
  1. On what day of the week should you leave if you want to minimise the chance of a delay?
flights_dt %>% mutate(weekday=wday(sched_dep_time)) %>% 
  group_by(weekday) %>% 
  summarise(mean=mean(dep_delay)) %>% 
  ggplot(aes(weekday,mean))+geom_line()
  1. What makes the distribution of diamonds$carat and flights$sched_dep_time similar?
    by human judgement
ggplot(diamonds,aes(carat))+geom_freqpoly()
sched_dep <- flights_dt %>% 
    mutate(minute = minute(sched_dep_time)) %>% 
    group_by(minute) %>% 
    summarise(
        avg_delay = mean(arr_delay, na.rm = TRUE),
        n = n())
ggplot(sched_dep, aes(minute, n)) +
    geom_line()
  1. Confirm my hypothesis that the early departures of flights in minutes 20-30 and 50-60 are caused by scheduled flights that leave early. Hint: create a binary variable that tells you whether or not a flight was delayed.
flights_dt %>% mutate(minute=minute(sched_dep_time),is=dep_delay<0) %>% 
  group_by(minute) %>% 
  summarise(ave_delay=mean(is),n=sum(is)/n()) %>% 
  ggplot(aes(minute,n))+geom_line()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,113评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,644评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,340评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,449评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,445评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,166评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,442评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,105评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,601评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,066评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,161评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,792评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,351评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,352评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,584评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,618评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,916评论 2 344

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,446评论 0 13
  • By clicking to agree to this Schedule 2, which is hereby ...
    qaz0622阅读 1,436评论 0 2
  • 疫中小城 文|思 山峦起伏,绿水漾波 白色小城安静地躺卧 大地厮守承诺 云彩变幻的魔术师,刷子急切涂抹 万千金属光...
    思_zs912阅读 280评论 0 1
  • 故惜酒 醉成莫泣他日别, 阳关莫哀...
    無鯹鹤酒阅读 201评论 0 1
  • 昨日,同学群里转发一条北外福建校友会的消息。原来我初中85岁的英语老师参加了校友会还被特别提及。作为北外50年代...
    流一盏灯阅读 322评论 0 5