R语言:自动获取和展示中国宏观杠杆率数据 & 初识 R 语言面向对象的编程:R6 类
Posted 程振兴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言:自动获取和展示中国宏观杠杆率数据 & 初识 R 语言面向对象的编程:R6 类相关的知识,希望对你有一定的参考价值。
在之前的教程中我介绍了如何使用 Stata 自动获取也会展示中国宏观杠杆率数据,昨天有个小伙伴想用 R 语言实现,所以今天我就写一下如何用 R 语言实现这个过程。最后本文还演示了如何通过 R6 类封装实现这一过程的自动化。下次有机会我还会讲述如何编写一个最小的 R 包来加快自己的工作效率!
首先我们的数据来源是:国家资产负债表研究中心 CNBS:中国宏观杠杆率数据[1],是下面这个样子的:
knitr::include_graphics('leverage.png')
在左下角有个数据下载按钮,点击就可以下载数据了,下载链接为:http://114.115.232.154:8080/handler/download.ashx ,下载之后会得到这个 xlsx 文件,这个文件的内容是这样的:
knitr::include_graphics('leverage2.png')
那么我们先用 R 完成下载数据、整理数据、图表绘制这三个操作:
下载和整理数据
library(tidyverse)
library(ggplot2)
library(lubridate)
library(readxl)
library(tidyr)
# devtools::install_github('czxa/hotkeys')
library(hotkeys)
# 下载数据
download.file("http://114.115.232.154:8080/handler/download.ashx", "CNBS中国杠杆率数据.xlsx")
# 读取数据
df <- read_xlsx('CNBS中国杠杆率数据.xlsx',
sheet = "Data", skip = 1) %>%
gather(everything() %w/o% 1, key = "leverage",
value = "value") %>%
mutate(
Period = ymd(Period)
)
df 数据框就是整理好的数据集了,是下面这个样子的:
df %>%
DT::datatable(
extensions = 'Buttons',
options = list(dom = 'Blfrtip',
buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
lengthMenu = list(c(10,25,50,-1),
c(10,25,50,"All"))))
绘图展示
library(scales)
df %>%
ggplot() +
geom_line(aes(x = Period, y = value,
color = leverage)) +
geom_point(aes(x = Period, y = value,
color = leverage), size = 0.5) +
tidyquant::scale_color_tq() +
labs(x = "", y = "",
title = "China's Macro Leverage Ratio Database",
subtitle = "Leverage Ratio = Debt/Nominal GDP; Unit: Percent",
caption = "Source: Center for National Balance Sheets (CNBS)") +
scale_x_date(labels = date_format("%Y-%m")) +
guides(color = guide_legend(nrow = 3)) +
theme(legend.position = "bottom",
legend.title = element_blank())
scales 包提供的 date_format
函数可以设定日期显示的格式。
使用 R6 类封装
上面的操作有两个部分(整理数据和绘图),我们可以用一个类封装一下,这里我使用的是 R6 包提供的 R6 类,大家感兴趣的话可以封装更多的东西实现更多的功能:
library(R6)
leverage <- R6Class(
"leverage",
public = list(
Source = "Center for National Balance Sheets (CNBS)",
DataBase = "China's Macro Leverage Ratio Database",
LeverageRatio = "Debt/Nominal GDP",
Unit = "Percent",
get_leverage = function(){
download.file("http://114.115.232.154:8080/handler/download.ashx", "CNBS中国杠杆率数据.xlsx")
read_xlsx('CNBS中国杠杆率数据.xlsx',
sheet = "Data", skip = 1) %>%
gather(everything() %w/o% 1, key = "leverage",
value = "value") %>%
mutate(
Period = ymd(Period)
)
},
plot = function(){
df %>%
ggplot() +
geom_line(aes(x = Period, y = value,
color = leverage)) +
geom_point(aes(x = Period, y = value,
color = leverage), size = 0.5) +
tidyquant::scale_color_tq() +
labs(x = "", y = "",
title = "China's Macro Leverage Ratio Database",
subtitle = "Leverage Ratio = Debt/Nominal GDP; Unit: Percent",
caption = "Source: Center for National Balance Sheets (CNBS)") +
scale_x_date(labels = date_format("%Y-%m")) +
guides(color = guide_legend(nrow = 3)) +
theme(legend.position = "bottom",
legend.title = element_blank())
}
)
)
使用这个类的方法是:
# 新建一个 leverage 类:
l <- leverage$new()
# 查看 l 的类:
class(l)
## [1] "leverage" "R6"
可以看出 l 是一个 leverage
类。接下来就可以调用这个类里面的方法了:
# 获取数据
l$get_leverage()
## # A tibble: 784 x 3
## Period leverage value
## <date> <chr> <dbl>
## 1 1993-12-31 Household 8.31
## 2 1994-12-31 Household 7.81
## 3 1995-12-31 Household 8.24
## 4 1996-03-31 Household 8.40
## 5 1996-06-30 Household 8.58
## 6 1996-09-30 Household 8.79
## 7 1996-12-31 Household 8.94
## 8 1997-03-31 Household 9.25
## 9 1997-06-30 Household 9.59
## 10 1997-09-30 Household 9.95
## # … with 774 more rows
# 绘图
l$plot()
除此之外我还把数据源之类的信息封装了进去:
# 数据的名称
l$DataBase
## [1] "China's Macro Leverage Ratio Database"
# 杠杆率计算的方法
l$LeverageRatio
## [1] "Debt/Nominal GDP"
# 单位
l$Unit
## [1] "Percent"
# 数据来源
l$Source
## [1] "Center for National Balance Sheets (CNBS)"
最后你还可以直接把 leverage 类传递给 plot() 函数绘图:
plot(l)
当然也可以直接把 leverage 类获取的数据保存为一个数据框:
ldf <- l$get_leverage()
ldf
## # A tibble: 784 x 3
## Period leverage value
## <date> <chr> <dbl>
## 1 1993-12-31 Household 8.31
## 2 1994-12-31 Household 7.81
## 3 1995-12-31 Household 8.24
## 4 1996-03-31 Household 8.40
## 5 1996-06-30 Household 8.58
## 6 1996-09-30 Household 8.79
## 7 1996-12-31 Household 8.94
## 8 1997-03-31 Household 9.25
## 9 1997-06-30 Household 9.59
## 10 1997-09-30 Household 9.95
## # … with 774 more rows
封装成类就可以很容易的使用了嘛!
References
[1]
中国宏观杠杆率数据: http://114.115.232.154:8080/
点击阅读原文即可跳转到 TidyFriday 的知识星球查看最新动态!
加入 TidyFriday 即可获取本文完整的学习教程、代码和数据!详情可添加我的个人微信了解:
以上是关于R语言:自动获取和展示中国宏观杠杆率数据 & 初识 R 语言面向对象的编程:R6 类的主要内容,如果未能解决你的问题,请参考以下文章
R语言回归模型诊断方式有哪些?如何解读这些诊断方式?:残差和样本杠杆值的关系图比例-位置图正太QQ图残差和拟合曲线关系图
R语言使用car包的influencePlot函数将回归分析中的离群点(outlier)杠杆(leverage)和影响(influence)的信息组合成一个高度信息量丰富的合成图
R语言使用econocharts包创建微观经济或宏观经济图sdcurve函数可视化需求曲线和供给曲线创建自定义仿真数据可视化多条需求曲线和供给曲线