Python数据可视化2.3 体育案例

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有可能会打破纪录:

 

时间: 2024-08-27 05:09:42

Python数据可视化2.3 体育案例的相关文章

《Python数据可视化编程实战》—— 1.2 安装matplotlib、Numpy和Scipy库

1.2 安装matplotlib.Numpy和Scipy库 Python数据可视化编程实战 本章介绍了matplotlib及其依赖的软件在Linux平台上的几种安装方法. 1.2.1 准备工作 这里假设你已经安装了Linux系统且安装好了Python(推荐使用Debian/Ubuntu或RedHat/SciLinux).在前面提到的Linux系统发行版中,Python通常是默认安装的.如果没有,使用标准的软件安装方式安装Python也是非常简便的.本书假设你安装的Python版本为2.7或以上.

《Python数据可视化编程实战》——5.2 创建3D柱状图

5.2 创建3D柱状图 Python数据可视化编程实战 虽然matplotlib主要专注于绘图,并且主要是二维的图形,但是它也有一些不同的扩展,能让我们在地理图上绘图,让我们把Excel和3D图表结合起来.在matplotlib的世界里,这些扩展叫做工具包(toolkits).工具包是一些关注在某个话题(如3D绘图)的特定函数的集合. 比较流行的工具包有Basemap.GTK 工具.Excel工具.Natgrid.AxesGrid和mplot3d. 本节将探索关于mplot3d的更多功能.mpl

《Python数据可视化编程实战》—— 1.6 安装图像处理工具:Python图像库(PIL)

1.6 安装图像处理工具:Python图像库(PIL) Python数据可视化编程实战Python图像库(PIL)为Python提供了图像处理能力.PIL支持的文件格式相当广泛,在图像处理领域提供了相当强大的功能. 快速数据访问.点运算(point operations).滤波(filtering).图像缩放.旋转.任意仿射转换(arbitrary affine transforms)是PIL中一些应用非常广泛的特性.例如,图像的统计数据即可通过histogram方法获得. PIL同样可以应用在

《Python数据可视化编程实战》—— 1.5 在Windows上安装matplotlib

1.5 在Windows上安装matplotlib Python数据可视化编程实战在本节中,我们将演示如何安装Python和matplotlib.假设系统中没有预先安装Python. 1.5.1 准备工作 在Windows上安装matplotlib有两种方式.较简单的方式是安装预打包的Python环境,如EPD.Anaconda和Python(x,y).这是本书推荐的安装方式,尤其对于初学者来说更是如此. 第二种方式,是使用预编译的二进制文件来安装matplotlib和依赖软件包.需要注意安装的

《Python数据可视化编程实战》—— 1.8 在代码中配置matplotlib参数

1.8 在代码中配置matplotlib参数 Python数据可视化编程实战matplotlib库提供了强大的绘图功能,是本书用的最多的Python库.在其配置文件即.rc文件中,已经为大部分属性设定了默认值.本节会介绍如何通过应用程序代码修改matplotlib的相关属性值. 1.8.1 准备工作 如前所述,matplotlib配置信息是从配置文件读取的.在配置文件中可以为matplotlib的几乎所有的属性指定永久有效的默认值. 1.8.2 操作步骤 在代码执行过程中,有两种方式更改运行参数

《Python数据可视化编程实战》—— 1.9 为项目设置matplotlib参数

1.9 为项目设置matplotlib参数 Python数据可视化编程实战本节介绍matplotlib使用的各种配置文件的位置,以及使用这些配置文件的意义.同时还将介绍配置文件中的具体配置项. 1.9.1 准备工作 如果不想在每次使用matplotlib时都在代码开始部分进行配置(像前一节我们做的那样),就需要为不同的项目设定不同的默认配置项.本节将介绍如何做到这一点.这种配置方式使得配置项与代码分离,从而使代码更加整洁.此外,你可以很容易在同事间甚至项目间分享配置模板. 1.9.2 配置方法

《Python数据可视化编程实战》—— 1.7 安装requests模块

1.7 安装requests模块 Python数据可视化编程实战我们需要的大部分数据都可以通过HTTP或类似协议获得,因此我们需要一些工具来实现数据访问.Python的requests库能让这部分工作变得轻松起来. 虽然Python提供的urllib2模块提供了访问远程资源的能力以及对HTTP协议的支持,但使用该模块完成基础任务的工作量还是很大的. Request模块提供新的API,减轻了使用web服务的痛苦,使其变得更直接.Requests封装了很多HTTP 1.1的内容,仅在需要实现非默认行

《Python数据可视化编程实战》—— 1.3 安装virtualenv和virtualenvwrapper

1.3 安装virtualenv和virtualenvwrapper Python数据可视化编程实战如果同时工作在多个项目上,或是需要在不同项目间频繁切换,将所有的软件都安装在操作系统层级上也许不是一个好主意.当需要在不同系统(产品环境)上运行软件时,这种方式会带来问题.如果到此时才发现缺少特定的软件包,或是产品环境已经安装的软件包存在版本冲突,这将是非常痛苦的.为避免这种情况发生,可以选择使用virtualenv. virtualenv是由Ian Bicking创建的开放源代码项目.通过这个项

《Python数据可视化编程实战》—— 第 5 章 创建3D可视化图表

第 5 章 创建3D可视化图表 Python数据可视化编程实战本章将学习以下内容. 创建3D柱状图创建3D直方图在matplotlib中创建动画用OpenGL制作动画

《Python数据可视化编程实战》—— 导读

前言 Python数据可视化编程实战最好的数据是我们能看到并理解的数据.作为一个开发人员,我们想创造并构建出最全面且容易理解的可视化图形.然而这并非总是很简单,我们需要找出数据,读取它.清理它.揣摩它,然后使用恰当的工具将其可视化.本书通过简单(和不那么简单)直接的方法解释了如何读取.清理和可视化数据的流程. 本书对怎样读取本地数据.远程数据.CSV.JSON以及关系型数据库中的数据,都进行了讲解. 通过matplotlib,我们能用一行简单的Python代码绘制出一些简单的图表,但是进行更高级