knitr::opts_chunk$set(
  echo = TRUE,
  fig.path = "man/figures/",
  warning = FALSE
)

这是一个 R 语言包,使用教程详见 https://openr.pzhao.org/zh/tags/ncovr/。这里是个简介。

ncovr 包是方便 R 用户获取新型冠状病毒(2019-nCoV)数据而开发的,后续增添了数据处理、建模、可视化等功能。

数据获取途径

ncovr 包获取数据的主要途径是 BlankerL/DXY-2019-nCoV-Crawler。这个项目提供了 api 接口和 csv 文件。为了减轻 api 的流量压力, ncovr 每天将每天自动从这个 api 读一次数据,保存成 R 语言直接读取的 .RDS 格式,方便 R 语言用户调用。详见下面的示例。

安装

  1. 安装 R。在 CRAN 上选择适合你操作系统的安装包来安装。

  2. 安装 remotes 包:install.packages('remotes')

  3. 安装 ncovr 包:remotes::install_github('pzhaonet/ncovr')

获取数据

# Sys.setlocale('LC_CTYPE', 'Chinese') # windows 用户设置中文环境
require("ncovr")
require("leafletCN")

ncov <- get_ncov() # 读取 RDS数据(推荐)国内从github读取数据不稳定!

# get_ncov(method = 'csv') # 从 csv 文件读取(推荐)
# get_ncov(method = 'api') # 从 api 接口读取

另外提供了下载数据的函数get_ncov2(),定义新的 ncov 类(实际也是data frame),提供了subset()方法, 用于提取 ncov 子集,参数可以是省份、china或者world

ncov2 <- get_ncov2()
ncov2
# 湖北 ncov, 按市统计
hubei_ncov <- ncov2["湖北"]
hubei_ncov
head(data.frame(hubei_ncov), 5)

# china,按省统计
china_ncov <- ncov2["china"]
head(data.frame(china_ncov), 5)

# world, 按国家统计
world_ncov <- ncov2["world"]
head(data.frame(world_ncov), 5)

国家地图

按省级显示

plot_map(ncov$area)

# log scale
plot_map(ncov$area, scale = "log")

更进一步使用plot_china_map()可通过设置bins参数控制如何分组以填充不同的颜色, 自动把ncov为0的地区(包括南海驻岛)填充为白色

plot_china_map(
  china_ncov, 
  bins = c(1, 100, 500, 1000, 10000), 
  legend_position = "bottomleft"
)

按城市显示

plot_map(ncov$area, method = "city", scale = "log")

ggplot

library(ggplot2)
ncov$area$date <- as.Date(ncovr:::conv_time(ncov$area$updateTime))
choose_date <- "2020-02-10"
x <- ncov$area[ncov$area$date <= as.Date(choose_date), ]
x <- x[!duplicated(x$provinceName), ]
plot_ggmap(x)

省疫情图

湖北省疫情图

# plot_province_map(ncov2, "湖北省"),或
plot_province_map(hubei_ncov, "湖北省", bins = c(1, 100, 200, 500, 1000, 10000))

或直接基于ncov作图,无需提前取各省ncov数据,天津疫情图

plot_province_map(ncov2, "天津市", bins = c(1, 10, 20, 50))

世界地图:各国疫情图

ncov$area$date <- as.Date(ncovr:::conv_time(ncov$area$updateTime))
ncov$area <- ncov$area[rev(order(ncov$area$date)), ]

ncov_date <- as.character(Sys.Date())
y <- ncov$area[ncov$area$date <= as.Date(ncov_date), ]
y <- y[!duplicated(y$provinceName), ]

countryname <- data.frame(
  ncovr = c("United Kiongdom", "United States of America", 
            "New Zealand", "Kampuchea (Cambodia )"
          ),
  leafletNC = c("UnitedKingdom", "UnitedStates", 
                "NewZealand", "Cambodia"
  ), 
  stringsAsFactors = FALSE
)

x <- data.frame(
  countryEnglishName = y$countryEnglishName,
  countryName = y$countryName, 
  confirmedCount = y$confirmedCount, 
  stringsAsFactors = FALSE
)


loc <- which(x$countryEnglishName %in% countryname$ncovr)
x$countryEnglishName[loc] <- countryname$leafletNC[
  match(x$countryEnglishName[loc], countryname$ncovr)
]

x$countryEnglishName2 = x$countryEnglishName # for taiwan

x_other <- x[!is.na(x$countryEnglishName) & x$countryEnglishName != 'China', ]
x_china <- data.frame(
  countryEnglishName = 'China',
  countryName = unique(x[!is.na(x$countryEnglishName) & x$countryEnglishName == 'China', 'countryName']),
  confirmedCount = sum(x[!is.na(x$countryEnglishName) & x$countryEnglishName == 'China', 'confirmedCount']),
  countryEnglishName2 = 'China'
) 
x_taiwan <- x_china
x_taiwan$countryEnglishName2 = "Taiwan"
x <- rbind(x_other, x_china, x_taiwan)


plot_map(
  x = x, 
  key = "confirmedCount", 
  scale = "log", 
  method = 'country', 
  legend_title = paste0("Cnfrm 确诊"), 
  filter = '待明确地区'
)

更进一步

plot_world_map(world_ncov)

ts

x_ts <- ncov$area[, c('countryEnglishName', 'countryName', 'date', 'confirmedCount', 'curedCount', 'deadCount')] %>% 
  dplyr::group_by(countryEnglishName, date) %>% 
  dplyr::summarise(
    confirmed = max(confirmedCount), 
    cured = max(curedCount), 
    dead = max(deadCount)) %>% 
  dplyr::ungroup() %>% 
  dplyr::filter(!is.na(countryEnglishName) & !countryEnglishName == 'China') %>% 
  as.data.frame()
loc <- which(x_ts$countryEnglishName %in% countryname$ncovr)
x_ts$countryEnglishName[loc] <-
  countryname$leafletNC[
    match(x_ts$countryEnglishName[loc], countryname$ncovr)
  ]

plot_ts(
  x_ts, 
  area = "Italy", 
  area_col = "countryEnglishName", 
  date_col = "date", 
  ts_col = c("confirmed", "cured", "dead")
) 

国外疫情图

韩国疫情图

korea_ncov <- get_foreign_ncov("韩国")
plot_foreign_map(korea_ncov, "korea")

日本疫情图

jp_ncov <- get_foreign_ncov("日本")
plot_foreign_map(jp_ncov, "japan")

伊朗疫情图

iran_ncov <- get_foreign_ncov("伊朗")
plot_foreign_map(iran_ncov, "iran")

意大利疫情图

italy_ncov <- get_foreign_ncov("意大利")
plot_foreign_map(italy_ncov, "italy")

直接画这四个国家的疫情图

foreign_countries <- c("韩国", "伊朗", "日本", "意大利")
names(foreign_countries) <- c("korea", "iran", "japan", "italy")
htmltools::tagList(purrr::imap(
  foreign_countries, 
  ~ get_foreign_ncov(.x) %>% 
    plot_foreign_map(.y)
))

更多功能请参看函数的帮助信息

License

Copyright Peng Zhao.

Released under the GPL-3 license.



pzhaonet/ncovr documentation built on June 12, 2020, 8:15 p.m.