数据采集

library(RCurl)
library(XML)
library(DT)
web<-"https://www.bls.gov/opub/ted/2018/5-point-5-million-separations-in-june-2018.htm"
webcode<- getURL(web)
webhtml<- htmlParse(webcode , asText = T)
tables<- readHTMLTable(webhtml, header =  T , colClasses = c("character" , "FormattedNumber" ,"FormattedNumber" ,"FormattedNumber","FormattedNumber" ))
tables<- tables[[1]]
datatable(tables)

数据清理

names(tables)<- c("time" , "total","quits","discharge&layoffs" , "other")
tables$time<- paste("01" , tables$time ,sep = "-")
Sys.setlocale("LC_TIME" , "us")
[1] "English_United States.1252"
tables$time<- as.Date(tables$time, "%d-%b %Y")
datatable(tables)

library(tidyr)
library(DT)
tables_thin<- gather(tables , key = "types" , value = "values" , -1)
tables_thin$values<- tables_thin$values/1000000
datatable(tables_thin)

绘图

library(ggplot2)
library(RColorBrewer)
mycolors<- brewer.pal(4, "Set2")
p<- ggplot(tables_thin, aes(x = time , y = values , col = types ,fill = types))
p+  geom_point(aes(shape = types),size = 1)+ 
    theme_classic()+
  theme(axis.line = element_line(size  = 1))+ 
    labs(title = "Total separations, quits, layoffs and discharges, and other separations\n June 2008–June 2018" , x ="Years" , y = "Million") + 
    scale_color_manual(values = mycolors) + 
    scale_fill_manual(values = mycolors)+ 
    stat_smooth()

LS0tDQp0aXRsZTogImdncGxvdDIgcHJhY3RpY2U1IC0gbGluZXBsb3QiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIOaVsOaNrumHh+mbhg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShSQ3VybCkNCmxpYnJhcnkoWE1MKQ0KbGlicmFyeShEVCkNCndlYjwtImh0dHBzOi8vd3d3LmJscy5nb3Yvb3B1Yi90ZWQvMjAxOC81LXBvaW50LTUtbWlsbGlvbi1zZXBhcmF0aW9ucy1pbi1qdW5lLTIwMTguaHRtIg0Kd2ViY29kZTwtIGdldFVSTCh3ZWIpDQp3ZWJodG1sPC0gaHRtbFBhcnNlKHdlYmNvZGUgLCBhc1RleHQgPSBUKQ0KdGFibGVzPC0gcmVhZEhUTUxUYWJsZSh3ZWJodG1sLCBoZWFkZXIgPSAgVCAsIGNvbENsYXNzZXMgPSBjKCJjaGFyYWN0ZXIiICwgIkZvcm1hdHRlZE51bWJlciIgLCJGb3JtYXR0ZWROdW1iZXIiICwiRm9ybWF0dGVkTnVtYmVyIiwiRm9ybWF0dGVkTnVtYmVyIiApKQ0KdGFibGVzPC0gdGFibGVzW1sxXV0NCmRhdGF0YWJsZSh0YWJsZXMpDQoNCmBgYA0KDQoNCiMg5pWw5o2u5riF55CGDQoNCmBgYHtyfQ0KbmFtZXModGFibGVzKTwtIGMoInRpbWUiICwgInRvdGFsIiwicXVpdHMiLCJkaXNjaGFyZ2UmbGF5b2ZmcyIgLCAib3RoZXIiKQ0KdGFibGVzJHRpbWU8LSBwYXN0ZSgiMDEiICwgdGFibGVzJHRpbWUgLHNlcCA9ICItIikNClN5cy5zZXRsb2NhbGUoIkxDX1RJTUUiICwgInVzIikNCnRhYmxlcyR0aW1lPC0gYXMuRGF0ZSh0YWJsZXMkdGltZSwgIiVkLSViICVZIikNCmRhdGF0YWJsZSh0YWJsZXMpDQpsaWJyYXJ5KHRpZHlyKQ0KDQp0YWJsZXNfdGhpbjwtIGdhdGhlcih0YWJsZXMgLCBrZXkgPSAidHlwZXMiICwgdmFsdWUgPSAidmFsdWVzIiAsIC0xKQ0KdGFibGVzX3RoaW4kdmFsdWVzPC0gdGFibGVzX3RoaW4kdmFsdWVzLzEwMDAwMDANCmRhdGF0YWJsZSh0YWJsZXNfdGhpbikNCmBgYA0KDQojIOe7mOWbvg0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KbXljb2xvcnM8LSBicmV3ZXIucGFsKDQsICJTZXQyIikNCnA8LSBnZ3Bsb3QodGFibGVzX3RoaW4sIGFlcyh4ID0gdGltZSAsIHkgPSB2YWx1ZXMgLCBjb2wgPSB0eXBlcyAsZmlsbCA9IHR5cGVzKSkNCnArICBnZW9tX3BvaW50KGFlcyhzaGFwZSA9IHR5cGVzKSxzaXplID0gMSkrIA0KICAgIHRoZW1lX2NsYXNzaWMoKSsNCiAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9saW5lKHNpemUgID0gMSkpKyANCiAgICBsYWJzKHRpdGxlID0gIlRvdGFsIHNlcGFyYXRpb25zLCBxdWl0cywgbGF5b2ZmcyBhbmQgZGlzY2hhcmdlcywgYW5kIG90aGVyIHNlcGFyYXRpb25zXG4gSnVuZSAyMDA44oCTSnVuZSAyMDE4IiAsIHggPSJZZWFycyIgLCB5ID0gIk1pbGxpb24iKSArIA0KICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBteWNvbG9ycykgKyANCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBteWNvbG9ycykrIA0KICAgIHN0YXRfc21vb3RoKCkNCmBgYA0KDQo=