NBA 史上实力最弱的球队是哪个?用 Python + SQL 我们找到了答案

文中部分代码会有“代码补完”字样的注释,是留给读者自己补完并在线评测的,相当于小作业,这里就请大家自行脑补吧。(编者注:每个需要补充的部分都给出了提示信息)

  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圣盾小兵:

====================================分割线================================

本文作者:AI研习社

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-07-30 11:53:19

NBA 史上实力最弱的球队是哪个?用 Python + SQL 我们找到了答案的相关文章

《疯狂猜图》史上最全图文答案——国家、城市、球队篇

疯狂猜图史上最全图文答案:国家(1)近日,一款名为<疯狂猜图>的休闲游戏迅速风靡Android和iOS两个平台.<疯狂猜图>以幽默风趣的图片.轻松简单的玩法,掀起您的头脑风暴.让人一上手就停不下来,更有众多玩家不惜熬夜也要不断猜图过关.现在,小编为大家精心整理出了<疯狂猜图>所有图片的答案,并以图文对照的方式呈献给大家,清晰易找.<疯狂猜图>的图片共分八大类--城市.电影&电视.国家.名人&明星.品牌.球队.人物&角色.游戏&

NBA 赛场上的导弹探测技术

     今天为大家分享两篇非常精彩的案例:      (1)NBA--将大数据用到极致!      (2)NBA 赛场上的导弹探测技术       许多年以来,因为篮球运动的速度和节奏过快的关系,用肉眼去捕捉并记录运动员的一举一动几乎是不可能的事情.而从这个赛季开始,NBA 通过使用"SportVu"技术,彻底改变了这一局面.动态捕捉的摄像头配合追踪每个运动员在球场上活动的算法,当然还有篮球的运动轨迹,SportVu 生成了前所未有的深度数据,揭示出运动员在每场比赛中的细微差别,而之

史上最无聊游戏按点击率为国家排名

每天,都有上万名中国网友坐在电脑前,同全世界的网友共同玩一款叫做"点点点"的游戏,英文名叫"click click click".网友通过点击鼠标,为自己的国家投票,网站根据点击率的多少为国家排名.目前,中国的网友已经创造了百万点击率,为中国赢得排名. 万名网友为"中国队"投票 "点点点"是一种靠点击率换取排名的免费游戏,玩者在网站上每点一次,就会给自己的国家投一票,网站会根据点击总次数,对各个国家进行排名. 截至昨天下午15

颠覆你的认知,带你领略史上最为齐全的微软黑科技之旅

自从微软这次的发布会后,网上着实遍布不少对微软黑科技的描述,从这次大家熟知集显独显分离的Surface Book,到已经耳熟能详的Hololense和Kinect,微软与其背后的研究院似乎一直在默默的在黑科技中探索,不断刷新大家对科技的认知,一次次的将科幻带到现实,在这里,小编就带你领略史上最为齐全的微软黑科技之旅! 1.Microsoft Hololense 当之无愧,黑科技之首应属Hololense! 一个手势即可将影像"显示"到任何平面 虚拟显示与真实物体完美交互,设计.建模,让

史上最大的远程直播

曾经有一篇叫做<体育解说员已死>的文章(见文末),主要的观点是说伴随"大数据"出现的一系列新产品.新技术,打破了体育解说员和观众之间的信息壁垒,此时如果解说员再没有自己独特的东西,那么"关了声音看比赛"的观众会越来越多,解说员们就面临下岗的局面. 以"大数据"为代表的新技术对体育直播的冲击,虽然现在来看威胁到体育解说员的角色,但是对这个行业的来说却是锦上添花. 从"单屏"到"多屏" 首先还是要从

史上最惨烈的价格战

第一农经讯 本月中旬掀起的电商价格战可谓是舆论的焦点话题,本轮价格战先由京东商城掌门人刘强东在微博上发起,8月14日,京东CEO刘强东发布微博称,京东三年内将是毛利,随后又称明天上午九点开始,京东商城所有大家电价格都比苏宁线上线下便宜!之后,国美苏宁等老对手迅速的在微博中迅速的表示应战.国美称,明天9:00起,国美电器电子商城全线商品价格比京东商城低5%.万事具备,15日上午9点,国美.苏宁.京东这三个巨头掀起了号称史上最惨烈的价格战. 奈何都声称最大幅度的让利消费者,然而终端消费者能得到实惠的

《疯狂猜图》史上最全图文答案——电影&电视篇

疯狂猜图史上最全图文答案:电影&电视(1)近日,一款名为<疯狂猜图>的休闲游戏迅速风靡Android和iOS两个平台.<疯狂猜图>以幽默风趣的图片.轻松简单的玩法,掀起您的头脑风暴.让人一上手就停不下来,更有众多玩家不惜熬夜也要不断猜图过关.现在,小编为大家精心整理出了<疯狂猜图>所有图片的答案,并以图文对照的方式呈献给大家,清晰易找.<疯狂猜图>的图片共分八大类--城市.电影&电视.国家.名人&明星.品牌.球队.人物&角色.

《疯狂猜图》史上最全图文答案——名人&明星篇

疯狂猜图史上最全图文答案:名人&明星(1)近日,一款名为<疯狂猜图>的休闲游戏迅速风靡Android和iOS两个平台.<疯狂猜图>以幽默风趣的图片.轻松简单的玩法,掀起您的头脑风暴.让人一上手就停不下来,更有众多玩家不惜熬夜也要不断猜图过关.现在,小编为大家精心整理出了<疯狂猜图>所有图片的答案,并以图文对照的方式呈献给大家,清晰易找.<疯狂猜图>的图片共分八大类--城市.电影&电视.国家.名人&明星.品牌.球队.人物&角色.

《疯狂猜图》史上最全图文答案——品牌篇

疯狂猜图史上最全图文答案:品牌(1)近日,一款名为<疯狂猜图>的休闲游戏迅速风靡Android和iOS两个平台.<疯狂猜图>以幽默风趣的图片.轻松简单的玩法,掀起您的头脑风暴.让人一上手就停不下来,更有众多玩家不惜熬夜也要不断猜图过关.现在,小编为大家精心整理出了<疯狂猜图>所有图片的答案,并以图文对照的方式呈献给大家,清晰易找.<疯狂猜图>的图片共分八大类--城市.电影&电视.国家.名人&明星.品牌.球队.人物&角色.游戏&