关于足球赛,每个人都想在足球联赛中寻找优势,所以我们写了一个网页抓取NFL数据的命令。这个命令就是nfl2stata,安装这个命令,可以输入,
使用这个新命令,您可以轻松的发现上个赛季谁的触地得分最高。
您可以从上赛季度联赛中找到前五名得分最高的球员。
您可以从上一个常规赛中产生一个顶级传球队长的图表。
里面有很多有趣的数据值得关注。虽然这看起来像是一个简单的命令,但实际上不是这样,因为需要通过web scraping来抓取、解析和加载来自http://www.nfl.com的数据。
网络抓取
您可能听说过“web scraping”这个词。Web scraping的简单定义就是从网络上提取数据。大多数时候,一个网站的版权禁止人们发布从网站上获取的数据,但是您可以在个人电脑使用数据副本。这也是NFL网站关于版权保护的描述。因此,用户必须自己抓取网络数据。获取NFL数据,可以输入,
此命令将2009年到当前年度的所有数据都进行了提取,并以Stata数据集的形式保存到本地电脑的Stata adopath中。具体来说,它将保存到PLUS目录中,这样nfl2stata命令可以找到它。保存在http://www.nfl.com第一年的NFL数据是2009。目前,在这之前没有数据可以供参考。网络抓取是一个既昂贵有费时的过程。取决于这几个因素(计算机速度、计算机存储空间、网络连接等),这种初始数据抓取需要数小时才能完成。您可能希望在一夜之间运行上述命令。如果删除了历史数据,您可以输入,
用当前周的数据来更新本地保存的数据集。
在写这篇文章时,抓取命令是可以正常使用的,但是如果NFL更改了HTML页面格式的话,这个命令就会崩溃。如果出现了这种情况,我们会修复它。此外,当NFL更新其网站上以前的数据时,被抓取的数据会随着时间的推移而改变。因此,几周前您所抓取的数据将跟ESPN或NFL网站上所看到的数据不符合。此外,有时数据可以存在于多个地方,并且可以不一致,因为一个站点得到更新的统计数据,另一个则不会。您可以使用nfl2stata scrape, season(_all) replace重新抓取数据,并创建新的干净的数据集。这些问题使得网络抓取是一个不稳定的过程。
命令
nfl2stata scrape命令可以为每一年生成game, game summary, play-by-play, player, player
profile, roster和 team Stata数据集。为了把这些数据加载到Stata中,您必须使用以下命令:
� 加载gams-by-game数据到Stata中,使用
� 加载gams summary数据到Stata中,使用
加载play-by-play数据到Stata中,使用
加载player-specific数据到Stata中,使用
� 加载player profile数据到Stata中,使用
� 加载team roster数据到Stata中,使用
� 加载team game-by-game数据到Stata中,使用
这些命令各自搜索各自的数据集。通常,您需要使用Stata命令,例如collapse, gsort 和merge来生成统计数据,对数据进行排序,并将两个或多个NFL数据集合并在一起检查数据。我们再来看几个例子。
示例
我发现使用最频繁的两个命令,一个是gsort,按升序或降序排序数据;另一个是collapse,生成汇总统计数据集。当处理多场比赛或多个季度赛数据时,collapse命令更有用。比如,要找出谁在去年的NFL中是领衔外接员,您可以输入,
有时,您需要合并两个或多个NFL数据集来回答有关数据的一些问题。例如,为了找到过去九年NFL跑卫的平均权数,您必须合并roster数据和profile数据,在同一数据集中得到player position和player weight变量。例如,输入
想要找出谁是最佳外接员或抢攻人员,您需要把所有进攻球员数据合并成一个数据集。例如,列出领衔外接人员的类型,
实施
我们使用Stata的Java plugins来编写大多数的命令。其他我们编写命令的Java库有:
� Gson
� Jsoup
� Minify
有很多用来web scraping 数据的Java库,我们只使用了其中一些。