疫情牵动大家,除了做好分内工作,管好自己不给社会添乱,也就是只能持续关注疫情了。现在各大门户平台都上线了疫情实时地图,但基本上数据都只展示到省这个级别。当然现在各地存在感染病例的小区也都及时披露了,相信疫后应该会有高精度的传染路径、传染扩散分布的分析。就目前而言,丁香园上的数据应该是目前聚合数据里面精度最高的了,可以获取到设区市级别的数据。但丁香园的数据存在地名不规范的问题,以及省、市、县三级行政区划并存的问题,不进行清洗不便做图。
底图制备
一张合适的底图是制作地图的基础。与行政区划相关的底图,最权威的数据源当然是从自然资源部的数据中心下载相关矢量数据再进行加工,最近微信公众号数读城市就在做这个浩大的工程。我的方法是用高德API获取行政区划边界数据然后自行制图。高德数据的优点在于可以获取从全国、省、市、区(直辖市可以到镇)各级别行政区划边界的数据,对于不同级别行政区数据并存的情况,可以按需灵活组合,快速生成需要的底图。
丁香园公布的数据以设区市为主,台湾、香港、澳门公布总体数字,县(市)的数据较少。根据数据特点,我决定省级行政区划就保留港、澳、台三地,其余31个省、市、自治区保留设区市、自治州、省代管县级市以及直辖市的区、县。也就是高德API中,各省、自治区、直辖市子一级的行政单元。我是用sf
包进行处理的,底图对象叫china_city
数据框结构如下。
adcode
即城市编码,下一步里从丁香园上下载的数据里有个locationId
,和它是同一个意思。高德的adcode基于民政部的行政区划代码,并在民政部代码的基础上加了市辖区一级的代码,会干扰后续的处理,需要把它清理掉。
Amap_adcode=readxl::read_xlsx('AMap_adcode_citycode.xlsx') %>%
select(name=中文名,adcode=adcode) %>% mutate_at('adcode',as.numeric) %>%
filter(!grepl('辖区',name))
此外,坐标我也转换成wgs84。
疫情数据读取
方法来自于R语言获取丁香园疫情数据动态网站这篇帖子。这里就简单展示一下代码
library(pacman)
p_load(sf,tidyverse,rvest,jsonlite)
setwd() #这里要自行设定工作路径
#read web
system('~/2019_nConv/phantomjs-2.