R开发实例-map分布图

在网上查找R实战的的时候无意间看到这位大神的R开发实例:绘制分布图。对其十分感兴趣因此按照步骤,从头到尾做了一遍,也算是收获不小。
先附上原博客的链接https://www.cnblogs.com/tgzhu/p/5775829.html#undefined

下面,实战开始!


首先安装包

R命令: install.packages("devtools")

R命令: library(devtools)

R命令: install_github('badbye/baidumap')

R命令: install_github('lchiffon/REmap')


然后从网上下载了全国三甲医院的分布情况:之前博主的文章的链接失效了,我就重新找了一个类似的,经过测试是没问题的

附上链接:http://www.chisc.net/doc/DownSoft/?softid=5876&pathid=0

下载后就是对数据进行清洗,这也是非常重要的工作

首先数据是这样的


只需要医院的名称以及省份即可,因此对需要的部分进行抓取,得到下列的数据并导出到txt文件中,这是在excel中完成的


然后用read.table读取该文件,并转换成dataframe

hs <- read.table("hospital distribution.txt", header = FALSE, sep = '\t')
hst <- as.data.frame(hs)
colnames(hstcl) <- c("city", "name")

效果如下图

接下来写了一个脚本对数据做转换(其实这些用excel很容易完成,但是想锻炼写代码的能力,就...)

dataframetrans <- function(mydf){
rows <- dim(mydf)[1]
city <- NULL
x <- NULL
for (i in 1:rows){
if(mydf[i, 2] == "") {city <- mydf[i,1]
next}
city <- as.character(city)
row <- c(city, as.character(mydf[i, 2]))
x<- rbind(x, row) }
return (x)}

得到结果如下图


然后

#这一步是将字符串里的不必要的文字都去掉
hstcl1[,1] <- str_remove_all(hstcl1[,1],"[0-9、()省市自治区维吾尔回族壮族]") 

得到结果如下图


至此前期的数据清洗就都完成了。

接下来就是按照大神的代码加载baidumap包,获取医院的经纬度

#加载baidumap 根据名称获取医院经纬度
library(baidumap)
bhs <- getCoordinate(hstcl1$name,formatted = T)
#组织清洗后的数据
hsdata <- data.frame(name=hstcl1[, 2],lon=bhs[,1],lat=bhs[,2])
result <- merge(hstcl1,hsdata,by.x="name",by.y="name")
head(result)
#删除空值数据
result <- na.omit(result)
#按城市统计医院数量(分布图用到的参数)
  cityCount <- tapply(pdata$name,pdata$cityName,length)
  citydata <- data.frame(place=row.names(cityCount),values=cityCount)
#geodata
  stadata <- data.frame(lon=pdata$lon,lat=pdata$lat,cityname = pdata$name)
#分布图
  library(REmap)
  output <- remapC(citydata, 
                   title = "Demo",
                   theme = get_theme("Bright"),
                   markPointData =stadata[,3],
                   markPointTheme = markPointControl(symbol = "pin",effect = TRUE,symbolSize = 3,color = "red"),
                   geoData = stadata)
 show(output)

得到如下




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值