NBA 史上实力最弱的球队是哪个?用 Python + SQL 我们找到了答案
雷锋网按:此前我们专门发布了一篇文章分析NBA史上实力最强的球队,详见《用 Python 分析过去四年的比赛数据,实力最强的 NBA 球队原来是它》,这次我们来看看最弱的是哪个。原文作者 Kaiser,景略集智总经理,原载于集智网专栏,雷锋网已获授权。
文中部分代码会有“代码补完”字样的注释,是留给读者自己补完并在线评测的,相当于小作业,这里就请大家自行脑补吧。(编者注:每个需要补充的部分都给出了提示信息)
01. elo值
elo值就像现在竞技网游里的天梯系统,队伍在每场比赛后会根据表现有所调整,胜增败减,小胜小增,大胜大增。elo值反映了一支队伍在常规赛中的胜场期望,1800的对应期望是获胜67场以上,就是王朝级强队了。具体的天梯分段分布如下:
ELO值 匹配战绩 对应队伍描述
1800 67-15 史诗级别
1700 60-22 总冠军争夺者
1600 51-31 季后赛水平
1500 41-41 平均水平
1400 31-51 乐透水平
1300 22-60 无言以对
1200 15-67 糟糕透顶
历史上最高纪录是96年总决赛阶段的公牛,曾一度突破了1850分。
知名数据分析网站538(fivethirtyeight.com)提供了NBA历史赛程的 elo 值记录(至2015赛季),有六万余条数据。这个数据量不能算很大,但是在本地用Excel直接打开操作,估计体验还是挺痛苦的,这里就介绍一下如何用Python+SQL
来处理,或许会对广大劳形于 Excel 之间的朋友们有所帮助。
02. 元组
元组(tuple)是另一种Python中常用的数据类型,他跟列表非常相似,都可以包含若干元素,并且元素的调用都是通过方括号+索引的形式。
sample_list = [0,1,2,3]
sample_tuple = (0,1,2,3)
# 列表的第1个元素
sample_list[0]
# 元组的第2个元素
sample_tuple[1]
主要区别在于:
● 元组用括号定义,列表用方括号定义
● 元组不可更改
● 即使只有一个元素,也需要有逗号,如(item1, )
。如果缺了这个逗号,得到的仍是元素本身,而不是元组。
元组只能在定义时赋值,如果强行更改会得到解释器的错误提示。
TypeError:
'tuple' object does not support item assignment
有的函数返回值并非一个数值或字符,而是具有多重输出,这时就以元组格式存在。比如下例返回的是两个输入参数的和与乘积,可以点击运行
查看,两个输出在中。
def sum_times(x, y):
return (x + y), (x * y)sum_times(2,3)
03. 数据库
在之前的几篇教程中,我们已经接触过了一些数据集,既有在程序中生成的,也有存储在文本文件中的。对于体积较大的数据集,一般都存在文件中,程序运行时再读入内存。
但是文件存储数据(.txt或.csv)还面临很大的问题,一是当数据量比计算机内存还要大的时候,会带来沉重的计算负担甚至无法运行;二是数据有可能高频变化,比如电商在双11高峰期每秒就有几万次交易,普通的文件格式显然无法处理。
于是数据库(database)应运而生。数据库首先是结构化(structured)存储数据的方式,为了更加灵活的处理数据,程序不再一次性将所有数据读入内存,而是根据具体需要进行查询(query),获得相应的数据集。完成这些工作的程序语言叫作SQL(Structured Query Language)
,在计算机方面稍有常识的朋友想必都对这个缩写不会陌生。
著名的关系型数据库管理系统有MySQL, Oracle等。
04. SQLite
SQL是专为查询、操作数据库所用的语言,所以不像Python, JavaScript等语言那样功能丰富,扩展多样。
一个数据库由若干个表(table)组成,就像每个Excel文件里有多个Sheets。每个表又包含行(row)与列(column)
,这就比较好理解了。一行代表一个样本,而多列定义了各个维度上的属性。
SQLite是一种轻型的数据库管理系统,占用资源极低且处理速度快,目前更新到了3版本。Python有专门处理SQLite语句的库sqlite3
。
import sqlite3
以下我们将以一份NBA的历史赛程数据为例,来了解SQL的基本法则与应用方法。(数据来源:FiveThirtyEight)
05. 查询
与数据库进行通信的最基本形式是查询(query),即返回符合条件的数据子集,其基本关键字是SELECT,SELECT后面跟所选列的表头。前面提到过一个数据库里可能存在多个表,所以查询语句必须指定来源表,关键字是FROM。
SELECT column1, column2, ... FROM table;
注意SQL是要求句末有分号(;)的,这与Python的习惯大为不同,可能会唤起一度为C++支配的恐惧。
NBA数据库里只含一张表,名为sheet,假设我们想要查询sheet表中的team_id
列,那么对应的SQL是:
SELECT team_id FROM nba_history;
如果数据库非常庞大,那么即使哪怕仅仅查询某些列,也是不小的计算量,这里可以引入新的关键字LIMIT,之后接想要查询的行数。比如只想要前5行的team_id
列,那么SQL为:
SELECT team_id FROM nba_history LIMIT 5;
下例将通过Python调用SQLite,查询elo_n和win_equiv两列的前5行:
import sqlite3
conn = sqlite3.connect('/mnt/vol0/Py_Intro/05_tuple_database/nbaallelo.db')
cur = conn.cursor
# 代码补完
query =
#代码补完
cur.execute(query)
elos = cur.fetchall
conn.close
print(elos)
补完提示:
回顾示例,替换关键字之间的名称,并以字符类型赋值予变量 query
可见,查询语句返回的是以元组(tuple)为元素的列表(list)。上例的输出即是5个(elo_n, win_equiv)组成的列表,应为:
[(1293.2767, 40.29483),
(1306.7233, 41.70517),
(1309.6521, 42.012257),
(1297.0712, 40.692783),
(1279.6189, 38.864048)]
06. SQLite with Python
在04节最后的例子中,除了SQL语句,还有很多Python命令,这些是Python调用SQLite的语句。
连接对象
首先是建立与数据库的联系,sqlite3.connect将返回Connection实例对象,然后存为conn变量,此时的conn
对应的是整个数据库。
import sqlite3
conn = sqlite3.connect("/mnt/vol0/Py_Intro/05_tuple_database/nbaallelo.db")
游标对象
Connection对象的.cursor
可以创建游标对象(cursor object)。游标对象可以对数据库执行SQL语句并进行更灵活的数据操作。
王莽的游标
query是纯SQL语句,通过cur.execute实际执行,此时数据库查询的结果仍在cur对象中。最后调用cur.fetchall将查询结果全部返回,并存至变量elos
,就是最终得到的元组列表。
如果只想返回一条查询结果,可以使用cur.fetchone
。
关于Python与SQLite3的联合应用,以后还会深入讲解,本篇仍将重点回归到SQL语句上。
07. Where
仅仅从数据库的某个表中查询某一列的前若干行,这样的操作局限性太大,很难满足应用需求。实际上我们感兴趣的数据子集并非总是按照顺序排列,而是符合某种限制条件。
为了进一步缩减精确查询范围,可以使用关键字WHERE。比如我们想要查询NBA历史上,赛后elo值elo_n高于1850的强队ID,其SQL语句是:
SELECT team_id, elo_n FROM sheet WHERE elo_n > 1850
查询结果表明,历史上唯一一支elo值曾经突破1850的队伍是1996年总决赛时期的芝加哥公牛。
下面请查询elo_n低于1100
的弱队ID,及其对应比赛日期。sqlite3库以及连接对象、游标对象已经预定义,可以从定义SQL查询语句query开始。
# 代码补完
query =
# 代码补完
cur.execute(query)
elo_1100 = cur.fetchall
conn.close
print(elo_1100)
补完提示:
请以"fran_id", "date_game", "elo_n"的顺序进行查询。
查询筛选结果显示,历史上一度衰到1100以下的弱旅,也只有1968年一支名为"Squires"的队伍。
他们这么弱,我认为与名字起的不好是分不开的。"Squire"在英文中是“侍从”的意思,在《炉石传说》中,就有很多仆从名为"Squire",比如11圣盾小兵:
雷锋网(公众号:雷锋网)相关阅读:
用 Python 分析过去四年的比赛数据,实力最强的 NBA 球队原来是它
禅与奶罩识别艺术(上)
【NBA2K】NBA2K联赛 了解一下
四月四日,首届NBA2K联赛选秀正式举行。首届的专业电竞联赛共有17支NBA球队参与,这一次的选秀大会将有102位玩家参选。
首届的选秀大会结束后首场锦标赛也在上周五正式打响,HoopsHype网站采访了几位职业玩家和战队总经理,来帮助大家了解一下NBA的电竞赛事。
NBA2K联赛是什么?
NBA2K联赛是由NBA官方与NBA2K的发行商Take-Two Interactive公司合作推出的职业电竞赛事,NBA联盟里一共30支球队里有17支球队正式宣布参加首届的联赛。新赛季于五月份开打,八月份结束。除了每周的常规比赛之外,联盟还将在赛季中安排三场锦标赛和季后赛,这些所有赛事的奖金总额约为100万美金。NBA2K联赛设立的初衷是希望能引起NBA球迷和电竞迷的兴趣,如果首届联赛运营得顺利,那么最终NBA联盟里的30支球队都会加入进来。
目前正式宣布加入NBA2K联赛的17支NBA球队分别是:费城76人、波特兰开拓者、密尔沃基雄鹿、克利夫兰骑士、波士顿凯尔特人、孟菲斯灰熊、迈阿密热火、犹他爵士、萨克拉门托国王、纽约尼克斯、奥兰多魔术、达拉斯独行侠、印第安纳步行者、底特律活塞、多伦多猛龙、金州勇士和华盛顿奇才。每一支参赛队伍都会有新的名字和队徽,以免和实际NBA球队混淆。
NBA2k联赛主办方是怎么挑选参赛选手的?
联赛要求参赛者必须在2018年2月1日前年龄达到18岁同时高中毕业,每位选手都必须要在NBA2K18的业余挑战赛里赢下50场比赛,然后在1月31日前完成网上申请。
联赛主办方为已经通过了审核的72000名选手举办了选拔赛,选拔赛里每个选手必须选定一个位置,至少完成40场比赛以获得评估资格。主办方会通过比赛录像、基础数据(如得分、篮板和助攻等)、进阶数据(如投篮键释放时间、助攻率和盖帽率等),来对这些高端玩家进行进一步的筛选。
通过选拔赛,联盟选出了实力前250名的选手,并一一进行了一对一直播专访。访谈结束后,所有的选手信息会交由一个选拔委员会进行实力评估,最后决定出有资格参加选秀大会的102位选手。
虽然有一些女选手杀进了实力榜前250名,但是最终的102位参加选秀大会的选手却都是男性。联赛官方也主动与那些被淘汰的女玩家沟通,讨论比赛流程是不是有疏忽的地方,对女性玩家有所影响。官方也表示下个赛季鼓励更多的女玩家参与进来,虽然NBA是2K联赛的主办方之一,但这并不意味着联赛只欢迎男性选手。联赛官方也坦言道,在对前250名选手进行一对一访谈之前,所有的筛选过程都只参考游戏中的数据,所以其中并不存在性别的影响。
上周二下午,NBA官方正式宣布了102位参加2K联赛选秀大会的选手名单,本赛季17支队伍的队员就从他们之中产生。
比赛形式是怎样的?
每一支2K队伍由6名选手组成。五位首发和一位第六人,每位选手控制一个角色。简单来说,就像2K里的5V5一样。只是控制的并不是NBA球员罢了,当然也不是什么预先创建好的角色,防止选手通过投入更多的时间精力或者氪金来提升角色的能力属性。
实际上,选手们会在职业业余模式下比赛,他们要做的只需选好游戏角色的位置以及确定球员的类型就够了。球员类型决定了属性值和自带的技能,从而保证了相同的角色水平。换句话说,想创建一位230厘米的球员影响游戏平衡,这是不可能的。选手先确定位置,再选择以下的球员类型就好了。
位置:控球后卫
球员类型:运球投篮高手+扣将、运球投篮高手+神射手、扣将+进攻组织者、神射手+进攻组织者、进攻组织者+运球投篮高手
位置:得分后卫
球员类型:进攻组织者+扣将、神射手+锁定防守者、扣将+运球投篮高手、神射手+运球投篮高手、神射手+神射手
位置:小前锋
球员类型:运球投篮高手+扣将、神射手+运球投篮高手、神射手+神射手、扣将+锁定防守者、神射手+扣将
位置:大前锋
球员类型:扣将+护框高手、篮板好手+强力终结者、扣将+背身得分手、攻防俱佳的篮板好手、神射手+护框高手
位置:中锋
球员类型:背身得分手+强力终结者、扣将+篮板好手、护框高手+护框高手、扣将型五号位、篮板好手+背身得分手
选择不同的球员类型,属性自然就会有差异,会存在某一队的中锋属性刚好克制对面的中锋这种情况。但是每一个球员类型都会有各自的长板和短板,所以不会有绝对的强点,比如一个纯护框高手,进攻方面的属性就会是短板。
比赛将会在PC端进行,操纵游戏角色的XBOX手柄、PlayStation控制器和键盘都可以根据选手不同的喜好自由选择。
运营这些职业电竞队伍的是谁?
每支队伍有一位总经理,一位战队总监和管理人。每支球队可以自由任命适合的人选以及各自的权力,不过大多数情况下战队总监负责管理市场和业务运作,而总经理负责人事调动。
举个例子说明一下2K联赛管理层的运营方式,看看他们的职能是怎么划分的,工作又是怎么安排的。
奥兰多魔术队下属的魔术电竞俱乐部,战队总监是莱安-德沃斯,战队总经理也要向他汇报工作。但实际上德沃斯的工作重心是在战队业务的增长上,拟定市场方案,确定战略伙伴。他需要研究分析魔术电竞俱乐部的队伍实力状况,评估潜在得失,制定商业方案等等。如果觉得方案可行,那么他就会立即着手方案的落实和推广。德沃斯雇佣了18岁的克里斯-图森特担任战队总经理,并给他一定的管理自由,处理战队人事和战略方面的事务。德沃斯的工作还有一部分是和魔术电竞俱乐部投资人一起寻找其他可进军的电竞领域,记者欧姆-杨米思科在最近的采访里谈到:“已经有13支NBA队伍下属的俱乐部投资或收购了其他与2K联赛无关的电竞项目业务。”审时度势也是总监德沃斯的工作,对市场上的电竞项目进行权衡,并向俱乐部高层汇报,因为很多高层并不懂电竞行业。
最初欧姆-杨米思科被任命的是球队总经理职位,后来由于自己具体的工作内容,将头衔改为了球员总经理。有趣的是,2K联赛的第一个赛季不会发生球员交易。也就意味着,选秀大会结束后,总经理职位的工作将会更像战队主教练,负责诸如赛前准备、日程安排和训练监督,考虑如何最大化队伍的实力以及处理队员之间爆发的冲突。甚至还要做些日常事务,像订机票、储备食物等后勤工作。等到下个赛季,总经理就可以考虑交易的事情了,战队也会招募主教练分担总经理的工作负担,但是本赛季很多队伍的总经理都是兼任战队的主教练。
选秀大会是怎样进行的?
4月4日下午一点,选秀大会在麦迪逊花园广场举行。NBA TV和Twitch全程直播,让更多感兴趣的人观看选秀大会。
选秀大会上,每支战队都能选择六名选手,同时这六名选手不能是同一位置的。每个队伍都必须在前五轮选择一位控球后卫、一位得分后卫、一位小前锋、一位大前锋、一位中锋,具体顺序没有限制,而第六轮就可以随意选择任意位置的选手。值得一提的是,赛季中期选手可以更换自己的位置,所以擅长多个位置,能力全面的选手在选秀大会上会比较抢手。
以下是各支战队蛇形排列方式的选秀顺序:
通过之前的选拔赛,不仅主办方将参选人数最终缩减到了102人,还给了各支战队总经理观看选手游戏视频和数据后,再观察选手们同台竞技的机会。
比赛何时正式打响?
虽然常规赛要等到五月份开打,但是上周五已经有了一场锦标赛。在4月6日NBA2K联赛选秀大会结束后的第三天,NBA2K联赛新秀赛正式拉开帷幕,这也是前十顺位的选手首次正面交锋的机会。联赛主办方还请来了一些强力知名的2K玩家参与进来,将这次新秀赛办得像全明星一样,也让感兴趣的粉丝们对接下来的常规赛正赛充满了期待。这属于上文提到的赛季常规的三场锦标赛中的一场,所以胜利的选手将会有巨额的奖金。
2K粉丝怎样才能观看到比赛呢?
所有的比赛在NBA2K联赛演播室进行,每周比赛的队伍都会飞往演播室,并进行面对面的对决。联赛官方目前还没有公布演播室具体的位置,也没有公布粉丝们是否可以买票现场观看比赛。最大的可能就是NBA官方负责售票的事宜,但是目前粉丝们还是没有办法现场观看的,比如说上周五的新秀赛。总的来说,NBA总裁亚当-萧华决定投身电竞行业的原因之一,是他参加了之前在麦迪逊花园广场举办的英雄联盟北美联赛决赛。观赛门票被抢购一空,情绪高涨的粉丝们也引起了亚当-萧华的注意。许多电竞联赛和锦标赛都得到了很多人关注,NBA联盟自然也想分一杯羹。
如果粉丝们想在家观看比赛的话,那就没有问题了,每场比赛都会有线上转播。NBA官方也正在和一些媒体集团谈判转播合同的事宜,如果顺利的话,那么所有的比赛就都会有全美电视转播了。
ESPN就曾转播过英雄联盟的比赛,其他的电竞联赛和锦标赛,像Dota2和炉石传说也都有过报道,ESPN还有疯狂橄榄球18锦标赛的转播权。2K联赛可以像疯狂橄榄球18一样吸引到电竞迷和篮球迷的关注,考虑到NBA和ESPN有过转播合同,如果2K联赛与ESPN再次达成合作,那么不可谓不是双赢的局面。当然,除了ESPN,福克斯体育也有希望拿下2K联赛的转播权,福克斯体育曾转播过FIFA互动世界杯,福克斯体育在体育直播市场一直有抢占先机的准备。去年,福克斯拿下了BIG3的转播权,预计过不了多久,2K联赛官方将公布转播协议的谈判结果。
2K联赛职业电竞选手工资是什么水平?
每位2K联赛选手都会签下一份六个月的合同,首轮被选中的选手能拿到35000美元薪水,其他的选手薪水是32000美元。不过,真正的大头是三场锦标赛和季后赛的奖池,加起来共计有100万美元。
选手们还可以签订一些其他的合同增加薪水收入,像NBA球员代言品牌一样,他们可以和一些类似于Twitch的直播平台签约。而一些在整个游戏圈知名度都很高的选手,已经在和一些电竞品牌进行代言谈判。相当一部分的职业选手聘请了私人经纪人处理赞助的事宜,甚至打造出自己的品牌。
选手们都有医疗保险和退休保障,选秀大会结束后,被球队选中的选手需要搬到各自俱乐部所在的城市生活,联赛主办方报销一切搬迁和住房费用。
为什么参加联赛的NBA队伍会有17支?
刚开始,NBA官方只打算先组织起10-12支队伍进行新赛季的试运营。不过,后来因为很多方面的事情都比较顺利,于是联赛官方就打算扩大队伍规模了。而且NBA队伍知道官方和2K公司合办的这个联赛后,都表现出很高的热情,于是队伍就增加到了17支。当然,最终的目标肯定是让所有的30支NBA队伍都参与进来。
会有选手之间的交易或者其他的交易产生吗?
前文提到了,NBA2K联赛第一个赛季不会有交易发生,这也就意味着各支球队在挑选战队的第六人时要格外地花点心思,虽然官方目前没有通知,据民间消息,下个赛季一切交易就可以正常进行了。
还有关于球员签约的细则也还需要商榷,各支战队的总经理对于自由球员的签约细则的出台也是翘首以盼。很多总经理表示,不知晓具体的签约细则,让他们在选秀大会上做决定的时候左右为难。举个例子,比如说我看上了一位非常有潜力的选手,但是没有签约细则,我就不知道选了他之后明年他还会不会留队,无疑增加了决定的难度。
虽然很多事情还悬而未决,每支队伍好像在休赛期有特定的时间处理自由球员的事宜,还有一些内部人士透露,会有一个特殊机制,保证战队在赛季结束的时候,队伍里可以多出一个选手名额,方便他们休赛期做决定。
原文:Alex Kennedy
编译:晴天