本节书摘来自华章计算机《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一书中的第2章,第2.1节,作者:[美] 德博拉·诺兰(Deborah Nolan) 邓肯·坦普·朗(Duncan Temple Lang) 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.1 引言
在这个“数据免费且无处不在”的时代,我们在搜寻数据上拥有巨大的潜力,这些数据可以使我们洞悉专业领域的问题或个人感兴趣的主题。例如,我们可能对理解人的体能如何随年龄的增长而变化产生兴趣。对于这个问题,其中一个数据源来自公路赛。每年有成百上千人参加公路赛,比赛的组织者收集参赛选手的比赛用时信息并通常在网上发布个人相关的数据。这些可以免费访问的数据能够帮助我们深入了解有关个人体能和年龄之间关系的问题。
每年有许多公路赛,其中一个经典的赛事是樱花开放的4月初在华盛顿地区举行的樱花10英里公路赛。樱花公路赛始于1973年,当时是即将参加波士顿马拉松的跑步精英们的一场训练赛。随着知名度的提高,到了2012年有将近17 000人参与该项赛事,参赛者的年龄跨度从9岁一直到89岁。这项赛事变得十分流行,以致参赛选手需要通过抽奖方式进行选拔,或者他们需保证向官方竞赛慈善机构捐款500美金以获得参赛资格。每年比赛结束之后,组织者都会在http://www.cherryblossom.org/上公布结果(见图2-1),这些数据为研究年龄与比赛成绩之间的关系提供了巨大的资源。
樱花10英里公路赛公开的结果可以从网站上抓取并读入R中[3]以备分析。当前公布的结果包括所有从1999年到2012年的赛事成绩。 稍微具有挑战性的任务是从网站上抓取结果并将其格式化为能在R中分析的形式,这是因为被记录的信息以及信息的格式每年都在变化。一些简单的格式上的差异体现在表头格式和脚注的使用上,有些表中还会包含一些错误,例如,一些值出现在错误的列中,表头缺失,等等。总的来说,数据的获取是相当简单的,但是由于我们要发现一些小错误,那么该过程就变成了一个迭代处理。这里我们用统计的方法实现这个迭代过程,例如,我们检查已经读入R中的数据的汇总统计和分布图,发现异常点,比如2003年所有参赛选手的年龄都小于9岁等,并使用原始表格中的数据对样本观测值进行交叉校验,在某种程度上用尽可能通用的方法来修正代码以解决问题,重新生成数据并重复以上过程。这是有关“凌乱”数据的处理过程。它是2.2节和2.3节中重点关注的问题。此外,2.7节为那些对整个数据获取过程感兴趣的读者介绍了如何从网站上抓取比赛结果的主题。
图2-1 樱花公路赛网站截图。该网页包含每年比赛结果的链接。他们提供的最早数据是1999年的数据。男子组和女子组的结果被分别列出
在将数据成功读入R中并清洗之后,我们在2.4节中研究跑步时间与年龄的关系。鉴于比赛的普及,像数据可视化这样简单的任务也将面临挑战,我们要考虑怎样以一种信息丰富的方式展现数以万计的观察结果。
对于任何一年的比赛结果,我们都有一个成绩-年龄的关系横截面视图。也就是说,我们观察的是不同年龄组的人群和他们的跑步时间,而不是在他变老的过程中观察单个个体的比赛成绩。然而,我们拥有14个年度的赛事成绩,而且许多参赛选手参加了多场比赛,如果我们可以将单个选手几年内的跑步时间联系起来,就可以检测他的成绩随着年龄增长的变化情况。这些数据包括跑步者的姓名、年龄和居住地,因此我们将考虑怎样使用这些信息构建个人跑步时间的纵向视图。这是2.5节的主题。
如果我们研究那些参加过多个年度比赛的选手,就会得到一个成绩的纵向视图。然而,对于一个参赛选手,我们最多有其14年的成绩,因此我们不能在参赛年龄18~89岁整个跨度范围内观察某个个体的成绩变化情况。那么,我们可以拼凑这些纵向数据得到一个比赛成绩对于年龄的函数估计吗?我们将在2.6节研究这个问题的解决方法。
计算方面的主题
使用正则表达式从预格式化的文本表中提取和清洗混乱的数据,并创建唯一标识符以匹配属于同一个体的记录。
采用统计技术来识别坏数据,并确认这些问题已被修正。
可视化具有大量观测值的数据(约150 000条记录)。
获得采用R公式语言进行绘图和建模的经验。
拟合采用最小二乘法的分段线性模型和采用局部平均的非参数化曲线。
比较数据结构,例如,用于支持和处理纵向数据的数据框和数据框列表。这里包含诸如tapply()、mapply()、sapply()和lapply()等“应用”函数的应用。
开发策略,以便使用recover()在报错后通过浏览活动函数的调用来调试代码。
为获得文本内容抓取简单的网页。
请发表评论