写点什么

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

评论

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

不要再焦虑了:BATJ大牛给程序员的价值百万的职业规划(18-35岁(1)

android 程序员 移动开发

为了KPI,对APK进行极限优化!,2021年Android春招面试经历

android 程序员 移动开发

【得物技术】主子订单模型

得物技术

互联网 模型 电商 订单系统 订单

互联网寒冬即将过去,Jetpack将是燃起来的第一把火,我先收藏为敬

android 程序员 移动开发

不懂源码、NDK,架构设计,2021最新Android笔经

android 程序员 移动开发

不明白四大组件底层的通信机制是怎样的?写给Android应用工程师的Binder原理剖析!

android 程序员 移动开发

互联网大厂“围城”,android界面开发

android 程序员 移动开发

产品级Flutter开源项目FunAndroid,Provider MVVM的最佳实践

android 程序员 移动开发

从 0 到 1,带你解剖 MVP 的神秘之处,并自己动手实现 MVP !

android 程序员 移动开发

不愧是鹅厂,连面试算法题都是这样恐怖至极,已顺利OC,附赠课程+题库

android 程序员 移动开发

为什么经常看到35岁程序员,转行之后工资呈断崖式下跌?

android 程序员 移动开发

毕业总结

Geek_35a345

人工智能的下一站:精细化生活场景的智能时代,靠着这份900多页的PDF面试整理

android 程序员 移动开发

为了这一次字节跳动Android面试机会,我准备了158天,一个疏忽让我前功尽弃

android 程序员 移动开发

专科毕业,Android不好找工作的同学,你的问题在这里,android源码设计模式解析与实战

android 程序员 移动开发

中奖了!中奖了!,android组件化通信

android 程序员 移动开发

今日头条屏幕适配方案终极版正式发布!,移动应用开发平台

android 程序员 移动开发

二本学历,五年抄代码经验,疫情期被裁,真牛皮

android 程序员 移动开发

今年40岁了,忽然接到公司裁员通知,接下来的路我该怎么办

android 程序员 移动开发

今日头条APK瘦身之路,android组件化开发框架对比

android 程序员 移动开发

不要再焦虑了:BATJ大牛给程序员的价值百万的职业规划(18-35岁

android 程序员 移动开发

为什么不能使用 Application Context 显示 Dialog?,安卓kotlin

android 程序员 移动开发

为了弄懂Flutter的状态管理, 我用10种方法改造了counter app

android 程序员 移动开发

毕业设计

Geek_35a345

为您的应用配置 Play Feature Delivery,flutter视频教程仿京东

android 程序员 移动开发

携程商旅订单系统架构优化实践

GavinYe

架构 中台 后端 OTA 订单系统

浮感

feitian

不愧是阿里技术官,Android-Framework的精髓全写在这本“限量笔记

android 程序员 移动开发

专科毕业三年,从外包公司到今日头条offer,我想把面试心得分享给你

android 程序员 移动开发

为什么不能使用 Application Context 显示 Dialog?(1)

android 程序员 移动开发

五千字长文,深度解密:那些BAT大厂的Android面试官到底在想些什么

android 程序员 移动开发

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