QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

超级碗历史数据集分析(1967~2020 年)

  • 2020-02-29
  • 本文字数:2555 字

    阅读完需:约 8 分钟

超级碗历史数据集分析(1967~2020 年)

有没有想过自己对某个好玩的历史数据集进行分析呢?比如,历届春晚的历史数据集,看看谁上春晚次数多,谁人气最高等等,可是分析的思路又该是什么样的呢?InfoQ 带来了 Sadrach Pierr 博士的文章,虽然不是对春晚的历史数据集分析,但思路是类似的,话不多说,让我们看看他是怎么对超级碗历史数据集进行分析的,相信对你一定有所裨益!


超级碗(Superbowl)是美国一年一度的比赛,决定着美国国家橄榄球联盟(National Football League,NFL)的冠军。这是世界上收视率最高的年度体育赛事之一,在美国,拥有大量的国内观众,平均每年有超过 1 亿人收看超级碗。


在本文中,我们将分析超级碗历史数据集(1967-2020 年)。我们将生成汇总统计和数据可视化信息,如获胜球队、大球场、获胜得分和最有价值球员。我们将要使用的数据可以在这里找到。


言归正题。


首先,让我们用 pandas 导入数据:


import pandas as pddf = pd.read_csv("superbowl.csv")
复制代码


接下来,我们可以打印列的列表:


print(df.columns)
复制代码



如你所见,有 10 列。让我们打印前五行。


print(df.head())
复制代码



我们可以看到有几个分类列。让我们定义一个函数,该函数接受数据框、列名和限制作为输入。调用时,它将打印分类值字典及其出现的频率:


def return_counter(data_frame, column_name, limit):   from collections import Counter    print(dict(Counter(data_frame[column_name].values).most_common(limit)))
复制代码


让我们将函数应用到最有价值球员(Most Valuable Player,MVP)列,并将结果限制在以下五个最常见的值:


return_counter(df, 'MVP', 5)
复制代码



我们将会看到,Tom Brady 拥有最多的 MVP 记录,其次是 Joe Montana。



让我们将函数应用到“Stadium”(大球场)一栏:


return_counter(df, 'Stadium', 5)
复制代码



Louisiana Superdome、Rose Bowl、Orange 在数据集中出现了 5 次。


让我们试试看“Winner”(获胜者)列,它对应于获胜球队。


return_counter(df, 'Winner', 5)
复制代码



New England Partriots 和 Pittsburg Steelers 以六场胜利并列。


我鼓励你将此函数应用于其余的分类列,如“State”(州)、“City”(城市)和“Loser”(失败者)等。


正如你所见到的,这是一个非常有用的快速测试,可以查看数据中是否存在任何明显的不平衡,这通常是在构建模型时需要处理的一个关键问题。


接下来,从数字列生成汇总统计数据将会很有用,如“Winner Pts”,这是获胜球队的得分。让我们定义一个函数,该函数接受一个数据框、一个分类列和一个数字列。每个类别的数字列的平均值和标准差存储在一个数据框中,数据框按照平均值降序排序。如果要快速查看特定数字列的某些类别的平均值和 / 或标准差值是否更高还是更低,这将非常有用。


def return_statistics(data_frame, categorical_column, numerical_column):    mean = []    std = []    field = []    for i in set(list(data_frame[categorical_column].values)):        new_data = data_frame[data_frame[categorical_column] == i]        field.append(i)        mean.append(new_data[numerical_column].mean())        std.append(new_data[numerical_column].std())    df = pd.DataFrame({'{}'.format(categorical_column): field, 'mean {}'.format(numerical_column): mean, 'std in {}'.format(numerical_column): std})    df.sort_values('mean {}'.format(numerical_column), inplace = True, ascending = False)    df.dropna(inplace = True)    return df
复制代码


我们可以查看“Winner”和“Winner Pts”的汇总统计数据:


stats = return_statistics(df, 'Winner', 'Winner Pts')print(stats.head(15))
复制代码



旧金山 49 人队的“Winner Pts”平均得分和“Winner Pts”的标准准差都是最高的。


接下来,我们将使用箱型图根据最小值、最大值、中值、第一个四分位数和第三个四分位数的数值分布进行可视化。如果你对它们不熟悉,可以看看这篇文章《理解箱型图》(Understanding Boxplots


与汇总统计函数类似,该函数接受一个数据框、分类列和数字列,并根据限制显示最常见列表的箱型图:


def get_boxplot_of_categories(data_frame, categorical_column, numerical_column, limit):    import seaborn as sns    from collections import Counter    keys = []    for i in dict(Counter(df[categorical_column].values).most_common(limit)):        keys.append(i)    print(keys)    df_new = df[df[categorical_column].isin(keys)]    sns.set()    sns.boxplot(x = df_new[categorical_column], y =      df_new[numerical_column])
复制代码


让我们为 5 个最常见的获胜球队中的“Winner Pts”生成箱型图:


get_boxplot_of_categories(df, 'Winner', 'Winner Pts', 5)
复制代码



我们还可以定义一个函数,来显示得分的时间序列图。首先,让我们将“Date”转换为“date-time”对象。


df['Date'] = pd.to_datetime(df['Date'])
复制代码


接下来,让我们定义一个函数,该函数以数字框和数字列作为输入,并显示“Winner Pts”的时间序列图:


def get_time_series(data_frame, numerical_column):    import matplotlib.pyplot as plt    df_new = data_frame    plt.scatter(df_new['Date'], df_new[numerical_column])    plt.xlabel('Date')    plt.ylabel(numerical_column)
复制代码


让我们用数据框和“Winner Pts”来调用这个函数:


get_time_series(df, 'Winner Pts')
复制代码



最后,让我们定义一个函数,该函数将数据框和数字列作为输入,并显示一个直方图:


def get_histogram(data_frame, numerical_column):    df_new = data_frame    df_new[numerical_column].hist(bins=100)
复制代码


让我们用数据框调用函数,并生成得分的直方图:


get_histogram(df, 'Winner Pts')
复制代码



我就讲到这里,但你可以随意使用数据并自己编写代码。


概括地说,我在本文中,研究了分析超级碗历史数据集的几种方法。这包括定义用于生成汇总统计数据的函数,如平均值、标准差和分类值计数等。我们还定义了用箱型图、直方图和时间序列图对数据进行可视化的函数。这篇文章的代码可以在 GitHub 上找到。


作者介绍:


Sadrach Pierre 博士,热情的数据科学家,对自然语言处理、机器学习、数学、物理和化学感兴趣。


原文链接:


https://towardsdatascience.com/analyzing-the-superbowl-history-dataset-1967-2020-fdee01a760c9


2020-02-29 10:001641

评论

发布
暂无评论
发现更多内容

R-Drop论文复现与理论讲解

华为云开发者联盟

人工智能 华为云 深度神经网络 华为云开发者联盟 企业号 3 月 PK 榜

软件测试 | 质量控制

测吧(北京)科技有限公司

测试

你代码的异味是故意的还是不小心?是故意的!

禅道项目管理

ins视频保姆级图文教程,快学起来!

frank

Sovit3D平台快速构建智慧渔业三维可视化养殖管理系统

2D3D前端可视化开发

智慧渔业 智慧渔场 智慧水产养殖 数字渔业 渔业数字孪生

React等前端框架如何与小程序结合

Onegun

前端 前端框架 React Vue 3

适用于 Apple Silicon (M1芯片)的 Photoshop常见问题及解决方案

理理

PhotoShop PS常见问题

量化合约对冲交易app系统开发源代码

开发微hkkf5566

软件测试 | 什么是Logstach

测吧(北京)科技有限公司

测试

Higress on K8s 5分钟开箱即用

阿里巴巴中间件

阿里云 云原生 Higress

跨端技术或许是提升软件运维效率的利器

FinFish

小程序化 小程序技术 高效运维 软件运维

M1电脑运行Windows10弹出“内部版本已过期”的解决方法

Rose

pd虚拟机 M1电脑 Windows内部版本已经过期

小程序技术如何提升企业的移动研发效率?

FinFish

降本增效 小程序容器 移动研发 小程序技术

解决mac电脑打开应用“意外退出”的问题 (点按“重新打开”以再次打开应用程序)

理理

PHPStorm 意外退出 mac电脑

TypeScript 与 JavaScript:你应该知道的区别

京东科技开发者

JavaScript typescript 前端 后端 企业号 3 月 PK 榜

京东云RASP云原生安全免疫创新实践

京东科技开发者

Web 安全 漏洞 业务安全 企业号 3 月 PK 榜

软件测试 | Elasticsearch+Kibana

测吧(北京)科技有限公司

测试

Dubbo Triple 协议

昵称不能为null

dubbo RPC triple协议

取得成功的 13 个方法

宇宙之一粟

个人成长 翻译 成功

云智慧助力中国信通院组装式应用开发平台系列标准建设

云智慧AIOps社区

FDF循环互助游戏系统开发智能合约搭建

薇電13242772558

智能合约

探索 Pixelmator Pro 3新功能——AI智能模板

Rose

Pixelmator Pro Mac修图软件

告别数据开发中的人工审核!火山引擎DataLeap落地“自动校验开发规范”能力

字节跳动数据平台

大数据 数据治理 数据研发 企业号 3 月 PK 榜

从原生迈向混合,小而美团队如何搞定APP高效定制

华为云开发者联盟

App 华为云 定制开发 华为云开发者联盟 企业号 3 月 PK 榜

数据测试实践:从一个bug开始的大数据引擎兼容性探索

京东科技开发者

大数据 bug修复 引擎 测试数据构造 企业号 3 月 PK 榜

精选案例 | 博睿数据30w+监测节点护航新华网、人民网两会重保工作

博睿数据

可观测性 智能运维 博睿数据 精选案例 主动式拨测

Flink Table Store 0.3 构建流式数仓最佳实践

Apache Flink

大数据 flink 实时计算

详解神经网络中反向传播和梯度下降

华为云开发者联盟

人工智能 神经网络 华为云 华为云开发者联盟 企业号 3 月 PK 榜

openEuler用户软件仓(EUR)介绍

openEuler

Linux 操作系统 虚拟机 openEuler 软件包

聊聊线上发布这件事

老张

软件测试 权限管理 服务部署

融云入选中国信通院《高质量数字化转型产品及服务全景图》

融云 RongCloud

产品 数字化 通讯

超级碗历史数据集分析(1967~2020 年)_大数据_Sadrach Pierr_InfoQ精选文章