R语言实现莆田医院的可视化

R语言实现莆田医院的可视化…

摘要:Idea来自于这里,原文作者用python完成了数据爬取,可视化的过程,本文用R实现一遍…

基本的流程如下:

  1. 爬取数据与整理
  2. 根据医院获取经纬度
  3. 根据获取的经纬度完成可视化

数据爬取与整理

数据来源于凤凰资讯,由于数据隐藏在JS代码中,所以我们使用readLines读取,字符处理的方式获得数据.

R语言实现莆田医院的可视化
raw = readLines("http://news.ifeng.com/mainland/special/ptxyy/",
                encoding = "UTF-8")
rawHospital = raw[123 : 238]
rawHospital[1]
[1] "    ['上海','上海市闵行区中医院<br/>上海华美美莱整形医院<br/>上海万众医院<br/>上海安真医院<br/>上海福华医院<br/>上海玛丽女子医院<br/>上海真爱女子医院<br/>上海心脏病医院<br/>上海远大心胸医院<br/>上海仁爱医院<br/>上海天大医疗美容医院<br/>上海沪申五官科医院<br/>上海博爱医院<br/>上海新虹桥医院<br/>上海九龙男子医院<br/>上海城市女子医院<br/>上海西郊骨科医院<br/>上海真美妇科医院<br/>上海南浦妇科医院<br/>上海虹桥医院<br/>上海健桥医院<br/>上海博爱医院<br/>上海长江医院<br/>解放军411医院<br/>上海阳光中医医院<br/>上海英港泌尿外科医院<br/>上海阿波罗男子医院<br/>上海玫瑰女子医院<br/>上海康新医院<br/>上海圣爱医院<br/>上海同德医院<br/>上海安平医院<br/>江东泌尿外科医院<br/>上海九州泌尿医院<br/>上海青城医院<br/>上海博大医院<br/>上海中亚医院','38'],"

接下来,用一个函数提取每个rawHospital中的医院名,并整理成一个字符向量.

extFun = function(x){
  split = strsplit(x, "','")
  out = strsplit(split[[1]][2], "<br/>")
  return(out)
}
extFun(rawHospital[1])
hosList = sapply(rawHospital,extFun)
hospital = c()
for(i in 1:length(hosList)) hospital = append(hospital, hosList[[i]])
head(hospital)
[1] "上海市闵行区中医院"   "上海华美美莱整形医院"
[3] "上海万众医院"         "上海安真医院"        
[5] "上海福华医院"         "上海玛丽女子医院"

获取经纬度

获取经纬度使用某大神的baidumaprepo在这里(不要纠结为啥还用百度,可视化也是…)

library(baidumap)
blackHospital = getCoordinate(hospital, formatted = T)
blackHospital = na.omit(blackHospital)
head(blackHospital)
      longtitude latitude
上海市闵行区中医院     121.4250 31.09354
上海华美美莱整形医院   121.4290 31.23277
上海万众医院           121.4267 31.19537
上海安真医院           121.2353 31.00906
上海福华医院           121.7532 31.04560
上海玛丽女子医院       121.1253 31.15449

完成了,有一个医院经纬度没找到,用na.omit删去,稍微整理一下:

plotdata = data.frame(lon = blackHospital[,1],
                      lat = blackHospital[,2],
                      city = rownames(blackHospital))

可视化

不好意思,只会REmap,代码见下,用鼠标滚轮和拖动查看细节:

library(REmap)
remapB(markPointData = data.frame(plotdata$city),
       markPointTheme = markPointControl(symbol = "pin",
                                         effect=F,
                                         symbolSize = 5,
                                         color="red"),
       geoData = plotdata)
R语言实现莆田医院的可视化

最后,把所有的代码放在一起,方便大家调用(顺便我可以数一下有几行,不到30,啧啧啧)

##获取数据
raw = readLines("http://news.ifeng.com/mainland/special/ptxyy/",
                encoding = "UTF-8")
rawHospital = raw[123 : 238]
## 数据整理
extFun = function(x){
  split = strsplit(x, "','")
  out = strsplit(split[[1]][2], "<br/>")
  return(out)
}
extFun(rawHospital[1])
hosList = sapply(rawHospital,extFun)
hospital = c()
for(i in 1:length(hosList)) hospital = append(hospital, hosList[[i]])
## 获取经纬度
library(baidumap)
blackHospital = getCoordinate(hospital, formatted = T)
blackHospital = na.omit(blackHospital)
plotdata = data.frame(lon = blackHospital[,1],
                      lat = blackHospital[,2],
                      city = rownames(blackHospital))
## 绘制地图
library(REmap)
remapB(markPointData = data.frame(plotdata$city),
       markPointTheme = markPointControl(symbol = "pin",
                                         effect=F,
                                         symbolSize = 5,
                                         color="red"),
       geoData = plotdata)

本文作者郎大为雪晴数据网兼职讲师,博客地址http://www.chiffon.ninja

本文链接:http://www.xueqing.tv/cms/article/199

本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。

(0)
张乐的头像张乐编辑
上一篇 2016-05-11 00:01
下一篇 2016-05-14 13:47

相关文章

关注我们
关注我们
分享本页
返回顶部