本文共 1534 字,大约阅读时间需要 5 分钟。
本节书摘来异步社区《机器学习与数据科学(基于R的统计学习方法)》一书中的第2章,第2.9节,作者:【美】Daniel D. Gutierrez(古铁雷斯),更多章节内容可以访问云栖社区“异步社区”公众号查看。
将网站当成是一个数据源可能是个奇怪的想法,但是,一旦你想起网站是一组HTML文件,HTML可以更好地表示数据时,那么“读取”网站这一行为就会显得比较合理了。这一技术在需要的数据没有现成的CSV文件或者其他文件类型可供下载时特别有效。作为替代,我们可以直接从网页中“抓取”数据。
为了演示这一读取数据的工具,让我们来访问一个包含数据集的网站,并将其导入R进行处理。图2-3展示了制造业数据采购经理人指数(PMI,Purchasing Managers Index)的历史值。我们的目标是写一个R脚本,直接从网页中读取数据,然后将它载入数据框中进行更深入的分析。接着更进一步,将数据变形,转换成对我们的目标来说更容易使用的形式。
下面的代码首先下载两个包:XML和reshape2。XML包中有一个对抓取网页来说非常有用的函数:readHTMLTable(),它能将数据从HTML表格中提取出来。HTML表格通常是数据在网页中的展现形式。为了方便使用,我们将这一函数的返回数据列表转换成数据框的形式。使用head(df)展示了现在在数据框中的数据,我们可以看到,与网页中的数据相同。
> library(XML)> library(reshape2)> webdata <- readHTMLTable('http://www.ism.ws/ISMReport/ content.cfm?ItemNumber=10752')> df <- data.frame(webdata[[1]])> names(df)[1] <- 'Year' # Add a name for first column> head(df) Year JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC1 2014 51.3 2 2013 52.3 53.1 51.5 50.0 50.0 52.5 54.9 56.3 56.0 56.6 57.0 56.53 2012 52.8 52.4 53.0 53.7 53.2 51.0 50.6 51.1 52.2 51.2 49.5 50.44 2011 59.0 59.3 59.1 58.9 53.7 56.6 52.9 53.0 52.8 51.8 52.1 53.15 2010 57.2 55.8 58.8 58.1 58.3 56.4 56.4 58.0 56.3 57.7 57.6 57.56 2009 34.9 35.5 36.0 39.5 41.7 45.8 49.9 53.5 54.4 56.0 54.4 55.3```让我们更进一步,改进从网页中抓取的数据。可以使用reshape2包中的melt()函数,它在快速转换数据框方面特别强大。在这种情况下,我们选择从网站中读入的列表格式,将其改造成有序三元组Year、Month和PMI。同时,也要将PMI转换成数值型,并移除PMI值为NA的观测行(有几个月的PMI没有值)。
df <- melt(df,id.vars='Year')
names(df) <- c('Year','Month','PMI')df$PMI <- as.numeric(df$PMI)df <- na.omit(PMI)`
转载地址:http://hjpfx.baihongyu.com/