【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

超级碗历史数据集分析(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


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-02-29 10:001432

评论

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

【薪火计划】08 - 非暴力沟通

AR7

管理 28天写作

架构师第 4 课作业及学习总结

小诗

「架构师训练营第 1 期」

LeetCode题解:17. 电话号码的字母组合,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

28天瞎写的第二百一二天:一次删库没跑路的故事

树上

28天写作 删库

网络工程师职业指南

架构师第 3 课作业及学习总结

小诗

「架构师训练营第 1 期」

缓存穿透,缓存击穿,缓存雪崩

en

redis 缓存穿透 缓存击穿 缓存并发

意识会在哪个早晨降落——「幻想短篇1/28」

道伟

28天写作

架构师训练营 1 期 - 第 十四周总结(vaik)

行之

「架构师训练营第 1 期」

jstat使用实用教程

JavaPub

Java JVM

区块链的前世今生(1)

抗哥

腾讯T3面试官透露!360°深入了解Flutter,聪明人已经收藏了!

欢喜学安卓

android 程序员 面试 移动开发

SpringBoot系列1——概述和快速入门

程序员的时光

springboot 七日更 28天写作

职业成长就是一个逐渐“变帅”的过程

L3C老司机

架构师训练营第七周课后作业

万有引力

资深大牛带你了解源码!阿里内部Android笔记火爆IT圈,醍醐灌顶!

欢喜学安卓

android 程序员 面试 移动开发

MySQL慢查询(上):为啥会这么慢?

架构精进之路

MySQL MySQL优化 MySQL使用 28天写作

极客大学架构师训练营大作业

Meow

MySQL中的哥哥表、妹妹字段,是什么鬼?

Java MySQL 数据库

技术人小故事-团队愿景篇-第1段

Ian哥

28天写作

芯片破壁者(二十四):1987战役启示录

脑极体

极客大学架构师训练营大作业

Meow

谬误词典:置信度

lidaobing

随机漫步的傻瓜 28天写作 谬误词典

架构师训练营第 1 期 - 第 12 周 - 学习总结

wgl

「架构师训练营第 1 期」

智能电车小白从入门到了解(Day1/28)

mtfelix

自动驾驶 28天写作 智能电车 电动汽车

手把手教你如何巧用Github的Action功能

flutter android 持续集成

牛啤了!阿里技术官整理的这份《Java面试手册5000题》已经成功让数百名社招生“圆梦BATJ”

Java 编程 面试

【计算机内功修炼】三:一文彻底理解IO多路复用

码农的荒岛求生

epoll

架构师训练营第 1 期 - 第 12 周 - 命题作业

wgl

架构师训练营第 1 期

写在再次学习python之前-why篇

赵开忠

Python 28天写作

【Node.js】静态页面和简单的路由

德育处主任

大前端 Node 28天写作

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