其他
使用 R 语言爬取 VINSIGHT 网站上的沪深 300 VIX 和上证 50 VIX 数据
在之前的课程 Stata 编程导论:网络数据爬取 中我给大家留了个作业:爬取 VINSIGHT 网站上的沪深 300 VIX 和上证 50 VIX 数据。
昨天我公布了 Stata 版本的答案,今天我们再来用 R 语言实现一下!
首先通过查看网页源代码我们可以看到 沪深 300 VIX 和 上证 50 VIX 的数据都在网页源代码里面(160 行和 164 行),所以我们的第一步就是把网页源代码读取到 R 语言中进行处理:
library(tidyverse)
readLines("http://vinsight.shanghai.nyu.edu/implied_moments.php") -> html
再根据需要把 160 行和 164 行先处理成 JSON 数组再转换成数据框:
str_match(html[160], pattern = "\\[(.*)\\]")[,2] %>%
str_replace_all('\\{"date":', '[') %>%
str_replace_all("\\}", "]") %>%
str_remove_all('"value":') %>%
paste0("[", ., "]") %>%
jsonlite::fromJSON() %>%
as_tibble() %>%
type_convert() %>%
set_names(c("date", "value")) -> sz50vix
sz50vix
#> # A tibble: 1,398 x 2
#> date value
#> <date> <dbl>
#> 1 2015-02-09 34.6
#> 2 2015-02-10 33.2
#> 3 2015-02-11 29.5
#> 4 2015-02-12 25.6
#> 5 2015-02-13 22.1
#> 6 2015-02-16 22.8
#> 7 2015-02-17 23.7
#> 8 2015-02-25 25.2
#> 9 2015-02-26 25.4
#> 10 2015-02-27 26.0
#> # … with 1,388 more rows
str_match(html[164], pattern = "\\[(.*)\\]")[,2] %>%
str_replace_all('\\{"date":', '[') %>%
str_replace_all("\\}", "]") %>%
str_remove_all('"value":') %>%
paste0("[", ., "]") %>%
jsonlite::fromJSON() %>%
as_tibble() %>%
type_convert() %>%
set_names(c("date", "value")) %>%
dplyr::filter(!is.na(value)) -> hs300vix
hs300vix
#> # A tibble: 211 x 2
#> date value
#> <date> <dbl>
#> 1 2019-12-23 11.4
#> 2 2019-12-24 12.7
#> 3 2019-12-25 11.6
#> 4 2019-12-26 10.8
#> 5 2019-12-27 12.4
#> 6 2019-12-30 12.3
#> 7 2019-12-31 15.9
#> 8 2020-01-02 19.5
#> 9 2020-01-03 17.6
#> 10 2020-01-06 18.0
#> # … with 201 more rows
比 Stata 简单快捷好多!
最后我们再画个图展示下:
ggplot(sz50vix, aes(date, value)) +
geom_line(aes(color = "sz50vix")) +
geom_line(data = hs300vix, aes(color = "hs300vix")) +
tidyquant::theme_tq(base_family = cnfont) +
scale_color_manual(values = c("sz50vix" = "#E31A1C",
"hs300vix" = "#18BC9C"),
labels = c("沪深 300 VIX", "上证 50 VIX")) +
scale_x_date(breaks = scales::date_breaks("10 month"),
labels = scales::date_format("%Y-%m")) +
labs(title = "上证 50 & 沪深 300 波动率指数",
subtitle = "绘制:微信公众号 RStata",
caption = "数据来源:Vinsight\nhttp://vinsight.shanghai.nyu.edu/implied_moments.php",
color = "",
x = "", y = "VIX") +
theme(legend.position = c(0.8, 0.9),
legend.background = element_blank())
免费数据分享
工企位置(1998~2007) // 工企位置(2008~2013) // 行政村区划(2019) // 县域年鉴(2015~2019) // 县域年鉴(2014) // 乡镇区划(2018~2019) // 区县行政区划(2009~2019) // 新冠疫情数据 // 省级行政区划(2019) // 夜间灯光数据(1992~2013) // 夜间灯光数据(2012~2018) // 夜间灯光数据(1992~2013, 分县)
更多数据和课程的获取,欢迎扫描下方二维码浏览 RStata 学院(https://rstata.duanshu.com/):