本次采用《基于R语言的自动收集》这本书进行参考作为案例,从第一章开始与大家进行分享,书中些许变动在文中会以注释形式说明。
本次涉及的知识点:
XML+RCurl包 抓取网页中表格形式的数据
stringr包 处理脏乱的数据以及
正则表达式 对文字的处理
maps包 标记世界地图上某一处经纬度
# 首先采用install.packages('XML')安装包,并使用library(''XML")调用所需要的包,本次将会运用到的是
library('XML')
library('stringr')
library('RCurl')
library('dplyr')
library('stringr')
library('maps')
一、XML包网络抓取的运用:
# 世界濒危遗产地址已更改与书中案例地址不同
url
#getURL函数运用解析,从中可以获取table格式的信息
web
# readHTMLTable可以获取网页含有table格式信息
tables
danger
如果是360的对网页所需部分进行右击审查元素,别的浏览器也可以通过F12进行搜索,从下图中可以看到网页中 有 table class,我们所需的table在第二个
二、stringr包数据处理的运用
接下来会涉及到数据清理,并且选择一些我们所需要的数据
# 通过view函数可以观测tables实际结构
str(danger)
# 观测有哪些名称
names(danger)
# 选取1,3,4,5,6,7列数据
danger_table
# 重新赋值变量名,建议不要赋值成中文吧
names(danger_table)
# 将年份设置为数值型数据值
danger_table$year
三、stringr包+正则表达式的运用
以下是正则表达式知识点的图表,详细将在后面章节说明
# 对地址的经纬度数据的观测
danger_table$local
# 数据处理str_extract_all函数属于匹配功能 相当于excel中的查找
y_coord
说明:[ -]*相当于匹配任意个空格和-
[0-9]*相当于匹配任意个数字,比如:123456,1324
[0-9]*[.]*[0-9]* 相当于匹配任意个数字加上.加上任意数字 123456.12
# str_sub函数 截取字符串 从第三个到最后第二个
y_coords
# %>%是一个传递函数 能把参数传递给下一个函数这样看起来比较清楚,熟悉的小伙伴可以使用下面函数得到经纬度
y_coords % str_sub(3,-2) %>% as.numeric()
# 传递给原来的参数danger_table
danger_table$y_coords
x_coord
x_coords % str_sub(3,-1) %>% as.numeric()
danger_table$x_coords
# dim()函数返回行列数据(书中遗物仅44个 现抓取有52个)
dim(danger_table)
# 观测前几行数据
head(danger_table)
四、map包的使用
# 对文物赋值不同符号
# 对不同文物进行不同符号的赋值
pch
# 画出地图
map("world", col = "darkgrey", lwd = 0.5, mar = c(0.1, 0.1, 0.1, 0.1))
# 设置点
points(danger_table$x_coords, danger_table$y_coords, pch = pch,col=pch,
main='世界濒危遗产分布图')
# 设置标签lengend
legend( -180,20,c("文化遗产", "自然遗产"), col = c( 2, 19),
text.col = "blue", lty = c( -2, 2), pch = c(2, 19),
box.col='white' )
box()
# 可以看出,很多濒危地区位于非洲,中东,和西南亚,濒危文化遗产比自然遗产更多
# 直方图观测
hist(
danger_table$year,
freq = TRUE,
ylab = "频数",
xlab = "列入濒危名单年份",
main = "世界濒危文化直方图",
col = "BLUE"
)
# 直方图中比作者收录的时候多了2015年以后的数量,由此可见维基百科还是在不断更新的.
参考文献:
《基于R语言的自动数据收集》
领取专属 10元无门槛券
私享最新 技术干货