写点什么

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

评论

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

1ms的时延,10Gbps速率…5G通信技术解读

华为云开发者联盟

5G 物联网 通信 网络架构 网络切片

AI时代来袭,你的存储做好准备了吗?

焱融科技

AI 高性能 文件存储 云计算, 分布式,

【VueRouter 源码学习】第七篇 - 路由变化触发视图更新

Brave

源码 vue-router 9月日更

飞桨中国行走进成都 与当地企业共话制造智能化升级

百度大脑

人工智能 飞桨

如何借助腾讯云简单、高效移动开发

腾讯云数据库

数据库 tdsql

腾讯私有云MySQL解决方案—TDSQL

腾讯云数据库

数据库 tdsql

TDSQL 全时态数据库系统-理念与愿景

腾讯云数据库

数据库 tdsql

企业为什么要建设自有即时通讯软件系统

WorkPlus

阅读

紧锣密鼓完成小闭环,微型博客项目快快进入下一阶段

梦想橡皮擦

9月日更

字节再次出圈!GitHub上爆火一星期的算法刷题手册竟出自这人之手

Java~~~

Java 架构 面试 算法 刷题

web技术分享| webRTC 媒体流录制

anyRTC开发者

音视频 WebRTC 流媒体 web技术 流媒体录制

Code Review在TDSQL-C 的应用实践

腾讯云数据库

数据库 tdsql

华为云GuassDB(for Redis)发布全新版本,两大核心特性正式亮相

华为云开发者联盟

数据库 华为云 GuassDB(for Redis) Lua脚本 SSL连接加密

TDSQL Inside:从腾讯的分布式数据库能力到行业的能力

腾讯云数据库

数据库 tdsql

干货 | TDSQL-A核心架构揭秘

腾讯云数据库

数据库 tdsql

资深Linux系统管理员常用的15个很好用的Cron工作示例

华为云开发者联盟

Linux Linux Cron 工作示例 应用程序 工作调度

ThreadLocal在链路性能测试中实践

FunTester

多线程 ThreadLocal 性能测试 线程安全 FunTester

新来的前端小姐姐问:Vue路由history模式刷新页面出现404问题

华为云开发者联盟

node.js Vue hash 404 history 模式

TDSQL-A,全力应对海量数据实时分析需求

腾讯云数据库

数据库 tdsql

用6年前的低性能电脑运行「360安全卫士极速版」,效果怎么样?

Regan Yue

安全 测评 病毒云查杀 9月日更

2021 Atlassian 大中华区用户大会来袭!

Atlassian

DevOps 敏捷 Atlassian Jira 敏捷精益

缓存和数据库一致性问题,看这篇就够了

Kaito

数据库 redis 缓存 后端 一致性

一年数十万次实验背后的架构与数据科学

百度Geek说

人工智能 架构 数据科学

「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之模块管理(十四)

crudapi

Vue API crud crudapi qusar

HTAP大潮下,TDSQL的探索与实践

腾讯云数据库

数据库 tdsql

TDSQL的2020进化在未来之前,更在未来之后

腾讯云数据库

数据库 tdsql

【OpenIM原创】C/C++调用golang函数,golang回调C/C++函数

OpenIM

华云大咖说 | 华云数据企业开发测试平台解决方案

华云数据

西部首个国家级车联网先导区获批,EMQ 联手中国移动打造 5G 交通生态链

EMQ映云科技

自动驾驶 车联网 5G 移动 emq

TDSQL“相似查询工具MSQL+”入选VLDB论文

腾讯云数据库

数据库 tdsql

细节炸裂!阿里P8高管总结出这份1500页的Java编程思想(第六版)

Java~~~

Java 编程 架构 面试 JVM

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