翻译自《Demo Week: Tidy Time Series Analysis with tibbletime》
原文链接:www.business-science.io/code-tools/2017/10/26/demo_week_tibbletime.html
注意:由于软件包的版本变化,部分代码被修改,文字有删减
时间序列分析工具箱——tibbletime
tibbletime
的用途
- tidy 时间序列分析的未来:基于
tbl
的新类——tbl_time
,为tibble
对象添加时间轴,赋予处理时间的能力。 - 时间序列函数:为
tbl_time
对象专门设计的一系列函数,例如:filter_time()
:根据日期简便快捷地过滤一个tbl_time
对象。as_period()
:转换时间周期(例如月度变为年度),让用户能将数据聚合到低粒度水平上。time_collapse()
:当使用time_collapse
时,tbl_time
对象中落入相同周期的索引将被修改成相同的日期。rollify()
:修改一个函数,使其能够在特定时间区间上计算一个或一组值。可以用来计算滚动均值,或其他tidyverse
框架下的滚动计算。create_series()
:根据规则时间序列,用简化标记快速初始化一个带有date
列tbl_time
对象。
加载包
tibbletime
目前还在活跃开发阶段,可以用常规方法安装,也可以借助 devtools
从 github 上安装最新开发版。
# Get tibbletime version with latest features
devtools::install_github("business-science/tibbletime")
安装完成后,加载下面的包:
tibbletime
:创建带时间轴的tibble
对象,可以使用tbl_time
函数。tidyquant
:加载tidyverse
框架,用tq_get()
获取数据。
# Load libraries
library(tibbletime) # Version: 0.1.1, Future of tidy time series analysis
library(tidyquant) # Loads tidyverse, tq_get()
数据
用 tq_get()
下载 FANG(脸书、亚马逊、网飞、谷歌)每天的股票价格。
# Stock Prices from Yahoo! Finance
FANG_symbols <- c("FB", "AMZN", "NFLX", "GOOG")
FANG_tbl_d <- FANG_symbols %>%
tq_get(
get = "stock.prices",
from = "2014-01-01",
to = "2016-12-31")
FANG_tbl_d <- FANG_tbl_d %>%
group_by(symbol)
FANG_tbl_d
## # A tibble: 3,024 x 8
## # Groups: symbol [4]
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 FB 2014-01-02 54.83 55.22 54.19 54.71 43195500 54.71
## 2 FB 2014-01-03 55.02 55.65 54.53 54.56 38246200 54.56
## 3 FB 2014-01-06 54.42 57.26 54.05 57.20 68852600 57.20
## 4 FB 2014-01-07 57.70 58.55 57.22 57.92 77207400 57.92
## 5 FB 2014-01-08 57.60 58.41 57.23 58.23 56682400 58.23
## 6 FB 2014-01-09 58.65 58.96 56.65 57.22 92253300 57.22
## 7 FB 2014-01-10 57.13 58.30 57.06 57.94 42449500 57.94
## 8 FB 2014-01-13 57.91 58.25 55.38 55.91 63010900 55.91
## 9 FB 2014-01-14 56.46 57.78 56.10 57.74 37503600 57.74
## 10 FB 2014-01-15 57.98 58.57 57.27 57.60 33663400 57.60
## # ... with 3,014 more rows
我们设计了一个函数来按股票代码分块绘图,可以在本文中重复使用。没有必要深究这些代码,只要认识到我们正在创建一个 ggplot2
对象,它通过指定数据框、x、y 和 group(如果存在)等要素来创建根据“symbol”分块的信息图。
# Setup plotting function that can be reused later
ggplot_facet_by_symbol <- function(data,
mapping)
{
if (is.null(mapping$group))
{
# No groups
g <- data %>%
ggplot(
mapping = mapping) +
labs(x = quo_name(mapping$x),
y = quo_name(mapping$y))
}
else
{
# Deal with groups
g <- data %>%
ggplot(
mapping = mapping) +
labs(x = quo_name(mapping$x),
y = quo_name(mapping$y),
group = quo_name(mapping$group))
}
# Add faceting and theme
g <- g +
geom_line() +
facet_wrap(
~ symbol, ncol = 2, scales = "free_y") +
scale_color_tq() +
theme_tq()
return(g)
}
我们可以使用绘图函数 ggplot_facet_by_symbol
快速可视化我们的数据。让我们看一下“除权调整的”股票价格。
# Plot adjusted vs date
FANG_tbl_d %>%
ggplot_facet_by_symbol(
mapping = aes(
x = date, y = adjusted, color = symbol)) +
labs(
title = "FANG Stocks: Adjusted Prices 2014 through 2016")
上图所显示就是我们要处理的数据,下面让我们进入 tibbletime
的教