NBA 史上最弱球队大揭秘:elo 值分析揭示常规赛胜场期望
- 时间:2024-07-25 22:31:51|
- 来源:NBA直播吧
雷锋网:我们之前发表过一篇分析NBA历史最强球队的文章,详情请看《分析近四年比赛数据,NBA最强球队原来是这支》,这次我们来看看究竟哪支球队最弱。原文作者为集智总经理景略,原载于集智网专栏,雷锋网已获授权。
文章中部分代码会有标注“Code ”字样的注释,留给读者在线完成并评估,相当于一个小作业,请读者自行填空。(编者注:每处需要补充的部分都会给出提示信息)
01. elo 值
elo值就像竞技类网游中的天梯系统,每场比赛结束后,队伍会根据表现做出调整,胜场增加、负场减少,小胜增加,大胜增加。elo值体现的是一支队伍在常规赛中的表现,比赛预期胜场数为1800,对应的期望胜场数为67场以上,也就是王朝级的队伍。具体天梯段位分布如下:
ELO值匹配记录对应队伍描述
1800 67-15 史诗级
1700 60-22 冠军争夺者
1600 51-31 季后赛水平
1500 41-41 平均
1 乐透级别
1300 22-60 无语
1200 15-67 糟糕
历史最高纪录是1996年总决赛公牛队,一度突破1850分。
知名数据分析网站538()提供了NBA历史赛程的elo值记录(截止到2015赛季),有6万多条数据,这个数据量不算很大,不过直接在本地用Excel打开操作估计体验还是挺痛苦的,这里就给大家介绍一下如何使用+SQL来处理nba球队名称英文,也许对在Excel中苦苦挣扎的小伙伴们有帮助。
02. 元组
Tuple 是另一种常用的数据类型,它和 list 很相似,可以包含若干个元素,元素的调用方式为方括号 [] + index。
= [0,1,2,3]
= (0,1,2,3)
# 列表的第一个元素
[0]
# 元组的第二个元素
[1]
主要区别在于:
● 元组用括号 () 定义,列表用方括号 [] 定义
● 元组是不可变的
● 即使只有一个元素,也需要用逗号隔开,如(item1, ),如果没有逗号,结果依然是元素本身,而不是元组。
元组只有在定义时才可以赋值,如果强行改变它们,会收到解释器的错误信息。
:
“tuple” 不包含项
有些函数并不是返回单个值或者字符,而是返回多个输出nba球队名称英文,这些输出是元组格式的。例如,下面的示例返回两个输入参数的和与乘积。您可以单击“运行”查看两个输出。 ()中。
定义(x,y):
(x + y),(x * y)(2,3)
03.数据库
在前面的教程中,我们接触过一些数据集,有的在程序中生成,有的存储在文本文件中。对于较大的数据集,通常将其存储在文件中。然后将其读入内存。
但是文件存储数据(.txt或者.csv)还是面临很大的问题,首先当数据量大于计算机内存时,会带来很大的计算负担,甚至无法运行;其次数据可能比较高频,比如双11高峰期,电商每秒有几万笔交易,普通的文件格式显然无法处理。
于是数据库就应运而生了。数据库首先是一种结构化存储数据的方式,为了更加灵活的处理数据,程序不再一次性把数据全部读入内存,而是根据特定的需要通过查询来获取相应的数据集。完成这些任务的编程语言就叫做SQL(Query)。稍有计算机知识的朋友一定对这个缩写很熟悉。
著名的关系数据库管理系统有MySQL等。
04.
SQL是一种专为查询和操作数据库而设计的语言,因此它不像Java这样的语言那样功能丰富且可扩展。
一个数据库由若干个表组成,就好比每个Excel文件有多个表一样,每个表有行和列,这个比较容易理解,一行代表一个样本,多个列定义各个维度的属性。
它是一个轻量级的数据库管理系统,占用资源很少,处理速度很快,目前已经更新到3.0版本,有专门用于处理语句的库。
下面我们将以一个历史NBA赛程数据为例,来了解SQL的基本规则和应用方法。(数据来源:)
05.查询
与数据库通讯的最基本形式是查询,查询返回符合条件的数据子集,基本关键字后面跟着的是所选列的表头,前面提到过,一个数据库中可能会有多张表,所以查询语句必须指定源表,关键字是FROM。
,,... 来自表;
注意,SQL 要求句子末尾有分号 (;),这与您的习惯非常不同,可能会唤起曾经被 C++ 主导的恐惧。
NBA数据库只包含一张表nba球队名称英文,名字叫sheet,假设我们要查询sheet中的列,那么对应的SQL为:
从 ;
如果数据库很大,即使你只查询某些列,也需要大量的计算。这里,你可以引入一个新的关键字 LIMIT,后面跟着要查询的行数。例如,如果你只想要前 5 行的列,那么 SQL 就是:
从限制 5 开始;
以下示例通过调用以下命令查询 elo_n 和两列的前 5 行:
conn = .('/mnt/vol0///.db')
当前时间 = 连接数()
# 代码补全
查询 =
# 代码补全
cur.(查询)
elos = cur.()
conn.close()
打印(elos)
完成提示:查看示例,替换关键字之间的名称,并将字符类型分配给变量查询
可以看出查询语句返回的是一个以元组为元素的列表,上面例子的输出是一个5(elo_n, )的列表,应该是:
[(1293.2767, 40.29483),
(1306.7233, 41.70517),
(1309.6521, 42.),
(1297.0712, 40.),
(1279.6189, 38.)]
06. 与
在04节的最后一个例子中,除了SQL语句之外,还有很多命令,这些命令都是调用语句。
连接对象
第一步是与数据库建立连接。.() 会返回实例对象,然后将其存储为 conn 变量。此时,conn 对应于整个数据库。
conn = .(“/mnt/vol0///.db”)
光标对象
对象的 .() 可以创建一个游标对象( ),游标对象可以对数据库执行SQL语句,进行更加灵活的数据操作。
王莽的光标
query 是一个纯粹的 SQL 语句,实际是通过 cur.() 来执行的,此时数据库查询的结果还在 cur 对象中,最后调用 cur.() 返回所有查询结果并存放在变量 elos 中,也就是最终的元组列表。
如果只想返回一个查询结果,可以使用cur.()。
关于和的结合应用,后面会深入讲解,本文依然以SQL语句为中心。
07. 哪里
简单地从数据库的表中查询某一列的前几行数据太过有限,无法满足应用需求。事实上,我们感兴趣的数据子集并不总是按顺序排列的,而是遵循某种限制。
为了进一步缩小精准查询范围,可以使用关键字WHERE。例如我们想查询NBA历史上赛后elo值elo_n高于1850的强队ID,SQL语句为:
,elo_n 来自工作表 其中 elo_n > 1850
查询结果显示,历史上唯一一支elo值突破1850的球队是1996年总决赛时期的芝加哥公牛队。
请查询elo_n小于1100的弱队ID及对应的比赛日期,库、连接对象、游标对象都是预定义的,您可以先定义SQL查询语句查询。
# 代码补全
查询 =
# 代码补全
cur.(查询)
= 当前.()
conn.close()
打印()
完成提示:请按照“”、“”、“elo_n”的顺序搜索。
查询筛选结果显示,历史上唯一一支曾经下滑到1100名以下的弱队,是1968年的一支名为“ ”的球队。
我认为他们之所以这么弱,是因为他们的名字不好。“”在英文中是“仆人”的意思。《炉石传说》中有很多仆人的名字叫“”,比如11圣盾战士: