2.3 体育案例
为了说明另一个案例以及某种可视化方法的优势,我们不妨考虑一个不同的问题:2015年2月美国足球四分卫球员的前五个最高纪录是哪几个?原始数据源为Len Dawson NFL和AFL Statistics。(数据来源:http://www.pro-football-reference.com/players/D/DawsLe00.htm。)
数据包括前22名四分卫球员的信息,他们是Peyton Manning、Brett Favre、Dan Marino、Drew Brees、Tom Brady、Frank Tarkenton、John Elway、Warren Moon、John Unitas、Vinny Testaverda、Joe Montana、Dave Krieg、Eli Manning、Sonny Jurgensen、Dan Fouts、Philip Rivers、Ben Roethlisberger、Drew Bledsoe、Boomer Esiason、John Hadle、Tittle和Tony Romo:
在我们考虑可视化之前,需要做一些分析工作。这些四分位球员参加比赛的时期不同。例如,Brett Favre参赛时间从1991年到2010年,Dan Marino参赛时间从1983年到1999年。挑战在于:如果使用条形图或气泡图,我们将只能得到一维的可视化结果。
进行可视化的第一步是解析CSV文件,这有几种选择,我们可以用pandas中的read_csv函数或csv模式,这些都有一些诸如DictReader的便利的函数:
四分卫数据可以从前面的数据源下载;过滤数据也同样可从http://www.knapdata.com/python/qb_ data.csv上下载。csv模式包括像字典一样用行表示类别,因此可以命名域。DictReader和DictWriter类将行翻译成字典,而不是列表。字典的关键要点能被输入或从输入的第一行进行推断(该行包括抬头标题)。通过DictReader可读取CSV文件的内容,其中的列输入值被视为字符串:
为了完成数据的数值型转换,我们可能需要一个转换和返回数值型数值的函数。我们也有额外的函数,如prepare.py 中的getcolors()和num(),这些将在下面的案例中使用:
呈现可视化结果
基于输入数据的域名,每一个四分卫球员的触地得分统计量和传球码数统计量可以画在同一个时间线上。知道绘图内容后,我们应弄清楚绘制方式。
用(年份,触地得分)和(触地得分,年份)域绘制简单的X-Y图应该是一个好的开始。然而,输入数据文件中的252位四分位球员绝大多数彼此无关。因此用不同颜色来展示没有意义。(没有意义的原因在于我们没有252种不同的颜色。)我们试图画出前7或前10种结果,如下图所示:
下面的Python程序表明怎样用matplotlib展示前10位四分卫球员的触地得分数。该程序的运行结果如上图所示:
将图(X,Y)转换为(Y,X),有足够的空间展示四分卫球员的名字。在上面的代码片段中,我们可能要做出如下改变:
如果我们转换x轴和y轴,就会有更多的空间展示四分卫球员的名字和触地得分总和,如上图所示。为了完成这项任务,我们需要转换x轴和y轴,根据新的x轴和y轴,在合适的位置添加标签。
乍一看,我们只能发现职业生涯中触地得分占领先位置的四分卫球员(2014~2015年足球赛季)。基于这种可视化,你可以进一步尝试分析和理解还能从数据中推断出什么结论。这些发现围绕下述问题的答案展开:
哪位四分卫球员职业生涯最长?
现在还有能超越Peyton Manning触地得分记录的四分卫球员吗?
在读取的输入文件中,Age正好是我们得到的其中一个字段值。用Age起始值绘制Age与Touchdown统计量有很多种试验方法。为了回答第一个问题,我们不得不跟踪Age而不是Year。下面的片段既可以用于一个单独的函数(如果常常被用到),也可以包含在主要脚本中:
运行上面的代码可知,44是四分位球员的最大年龄(在联赛中发挥积极作用时,有3位四分位球员:Warren Moon、Vinny Testaverde和Steve DeBerg。名义上,George Blanda在48岁前一直参赛(年龄最大的球员),但他一开始是四分位球员,也曾经当过几年球员)。
为了回答其他问题,我们用图表示触地得分统计量和四分位球员的年龄,代码如下:
当你看这些图的结果时,仅有两位四分位球员(Drew Brees和Tom Brady)在他们35岁时与Peyton Manning势均力敌。然而,考虑到Tom Brady的年龄和他目前的成就,似乎只有Drew Brees更有可能超越Peyton Manning的触地得分记录。
由下图可得出这个结论。该图是35岁球员数据的一个较简单的图。比较排名前四的四分卫球员的成绩(Peyton Manning、Tom Brady、Drew Brees和Brett Favre),我们发现Drew Brees在35岁时的成绩可与Peyton同龄时的成绩匹敌。尽管与纽约时报中“为什么Peyton Manning的记录难以超越”报道的结论不同,下图至少更倾向于Drew Brees有可能会打破纪录: