丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習(xí)社
發(fā)送

0

NBA 史上實(shí)力最弱的球隊(duì)是哪個(gè)?用 Python + SQL 我們找到了答案

本文作者: AI研習(xí)社 2017-05-22 10:08
導(dǎo)語:NBA 史上實(shí)力最弱的球隊(duì)是哪個(gè)?

NBA 史上實(shí)力最弱的球隊(duì)是哪個(gè)?用 Python + SQL 我們找到了答案

雷鋒網(wǎng)按:此前我們專門發(fā)布了一篇文章分析NBA史上實(shí)力最強(qiáng)的球隊(duì),詳見《用 Python 分析過去四年的比賽數(shù)據(jù),實(shí)力最強(qiáng)的 NBA 球隊(duì)原來是它》,這次我們來看看最弱的是哪個(gè)。原文作者 Kaiser,景略集智總經(jīng)理,原載于集智網(wǎng)專欄,雷鋒網(wǎng)已獲授權(quán)。

文中部分代碼會(huì)有“代碼補(bǔ)完”字樣的注釋,是留給讀者自己補(bǔ)完并在線評(píng)測(cè)的,相當(dāng)于小作業(yè),這里就請(qǐng)大家自行腦補(bǔ)吧。(編者注:每個(gè)需要補(bǔ)充的部分都給出了提示信息)

  01. elo值

elo值就像現(xiàn)在競(jìng)技網(wǎng)游里的天梯系統(tǒng),隊(duì)伍在每場(chǎng)比賽后會(huì)根據(jù)表現(xiàn)有所調(diào)整,勝增敗減,小勝小增,大勝大增。elo值反映了一支隊(duì)伍在常規(guī)賽中的勝場(chǎng)期望,1800的對(duì)應(yīng)期望是獲勝67場(chǎng)以上,就是王朝級(jí)強(qiáng)隊(duì)了。具體的天梯分段分布如下:

ELO值 匹配戰(zhàn)績(jī) 對(duì)應(yīng)隊(duì)伍描述
1800 67-15 史詩級(jí)別
1700 60-22 總冠軍爭(zhēng)奪者
1600 51-31 季后賽水平
1500 41-41 平均水平
1400 31-51 樂透水平
1300 22-60 無言以對(duì)
1200 15-67 糟糕透頂

歷史上最高紀(jì)錄是96年總決賽階段的公牛,曾一度突破了1850分。

知名數(shù)據(jù)分析網(wǎng)站538(fivethirtyeight.com)提供了NBA歷史賽程的 elo 值記錄(至2015賽季),有六萬余條數(shù)據(jù)。這個(gè)數(shù)據(jù)量不能算很大,但是在本地用Excel直接打開操作,估計(jì)體驗(yàn)還是挺痛苦的,這里就介紹一下如何用 Python+SQL 來處理,或許會(huì)對(duì)廣大勞形于 Excel 之間的朋友們有所幫助。

  02. 元組

元組(tuple)是另一種Python中常用的數(shù)據(jù)類型,他跟列表非常相似,都可以包含若干元素,并且元素的調(diào)用都是通過方括號(hào)[]+索引的形式。

sample_list = [0,1,2,3]
sample_tuple = (0,1,2,3)

# 列表的第1個(gè)元素
sample_list[0]

# 元組的第2個(gè)元素
sample_tuple[1]

主要區(qū)別在于:

● 元組用括號(hào)()定義,列表用方括號(hào)[]定義

● 元組不可更改

● 即使只有一個(gè)元素,也需要有逗號(hào),如(item1, )。如果缺了這個(gè)逗號(hào),得到的仍是元素本身,而不是元組。

元組只能在定義時(shí)賦值,如果強(qiáng)行更改會(huì)得到解釋器的錯(cuò)誤提示。

TypeError:
'tuple' object does not support item assignment

有的函數(shù)返回值并非一個(gè)數(shù)值或字符,而是具有多重輸出,這時(shí)就以元組格式存在。比如下例返回的是兩個(gè)輸入?yún)?shù)的和與乘積,可以點(diǎn)擊運(yùn)行查看,兩個(gè)輸出在()中。

def sum_times(x, y):
   return (x + y), (x * y)sum_times(2,3)

  03. 數(shù)據(jù)庫

在之前的幾篇教程中,我們已經(jīng)接觸過了一些數(shù)據(jù)集,既有在程序中生成的,也有存儲(chǔ)在文本文件中的。對(duì)于體積較大的數(shù)據(jù)集,一般都存在文件中,程序運(yùn)行時(shí)再讀入內(nèi)存。

但是文件存儲(chǔ)數(shù)據(jù)(.txt或.csv)還面臨很大的問題,一是當(dāng)數(shù)據(jù)量比計(jì)算機(jī)內(nèi)存還要大的時(shí)候,會(huì)帶來沉重的計(jì)算負(fù)擔(dān)甚至無法運(yùn)行;二是數(shù)據(jù)有可能高頻變化,比如電商在雙11高峰期每秒就有幾萬次交易,普通的文件格式顯然無法處理。

于是數(shù)據(jù)庫(database)應(yīng)運(yùn)而生。數(shù)據(jù)庫首先是結(jié)構(gòu)化(structured)存儲(chǔ)數(shù)據(jù)的方式,為了更加靈活的處理數(shù)據(jù),程序不再一次性將所有數(shù)據(jù)讀入內(nèi)存,而是根據(jù)具體需要進(jìn)行查詢(query),獲得相應(yīng)的數(shù)據(jù)集。完成這些工作的程序語言叫作SQL(Structured Query Language),在計(jì)算機(jī)方面稍有常識(shí)的朋友想必都對(duì)這個(gè)縮寫不會(huì)陌生。

著名的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)有MySQL, Oracle等。

NBA 史上實(shí)力最弱的球隊(duì)是哪個(gè)?用 Python + SQL 我們找到了答案

  04. SQLite

SQL是專為查詢、操作數(shù)據(jù)庫所用的語言,所以不像Python, JavaScript等語言那樣功能豐富,擴(kuò)展多樣。

一個(gè)數(shù)據(jù)庫由若干個(gè)表(table)組成,就像每個(gè)Excel文件里有多個(gè)Sheets。每個(gè)表又包含行(row)列(column),這就比較好理解了。一行代表一個(gè)樣本,而多列定義了各個(gè)維度上的屬性。

SQLite是一種輕型的數(shù)據(jù)庫管理系統(tǒng),占用資源極低且處理速度快,目前更新到了3版本。Python有專門處理SQLite語句的庫sqlite3。

import sqlite3

以下我們將以一份NBA的歷史賽程數(shù)據(jù)為例,來了解SQL的基本法則與應(yīng)用方法。(數(shù)據(jù)來源:FiveThirtyEight

NBA 史上實(shí)力最弱的球隊(duì)是哪個(gè)?用 Python + SQL 我們找到了答案

  05. 查詢

與數(shù)據(jù)庫進(jìn)行通信的最基本形式是查詢(query),即返回符合條件的數(shù)據(jù)子集,其基本關(guān)鍵字是SELECT,SELECT后面跟所選列的表頭。前面提到過一個(gè)數(shù)據(jù)庫里可能存在多個(gè)表,所以查詢語句必須指定來源表,關(guān)鍵字是FROM。

SELECT column1, column2, ... FROM table;

注意SQL是要求句末有分號(hào)(;)的,這與Python的習(xí)慣大為不同,可能會(huì)喚起一度為C++支配的恐懼。

NBA數(shù)據(jù)庫里只含一張表,名為sheet,假設(shè)我們想要查詢sheet表中的team_id列,那么對(duì)應(yīng)的SQL是:

SELECT team_id FROM nba_history;

如果數(shù)據(jù)庫非常龐大,那么即使哪怕僅僅查詢某些列,也是不小的計(jì)算量,這里可以引入新的關(guān)鍵字LIMIT,之后接想要查詢的行數(shù)。比如只想要前 5 行的 team_id 列,那么SQL為:

SELECT team_id FROM nba_history LIMIT 5;

下例將通過Python調(diào)用SQLite,查詢elo_n和win_equiv兩列的前5行:

import sqlite3

conn = sqlite3.connect('/mnt/vol0/Py_Intro/05_tuple_database/nbaallelo.db')

cur = conn.cursor()


# 代碼補(bǔ)完


query = 


#代碼補(bǔ)完


cur.execute(query)

elos = cur.fetchall()

conn.close()


print(elos)


補(bǔ)完提示:回顧示例,替換關(guān)鍵字之間的名稱,并以字符類型賦值予變量 query

可見,查詢語句返回的是以元組(tuple)為元素的列表(list)。上例的輸出即是5個(gè)(elo_n, win_equiv)組成的列表,應(yīng)為:

[(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節(jié)最后的例子中,除了SQL語句,還有很多Python命令,這些是Python調(diào)用SQLite的語句。

連接對(duì)象

首先是建立與數(shù)據(jù)庫的聯(lián)系,sqlite3.connect()將返回Connection實(shí)例對(duì)象,然后存為conn變量,此時(shí)的conn對(duì)應(yīng)的是整個(gè)數(shù)據(jù)庫。

import sqlite3

conn = sqlite3.connect("/mnt/vol0/Py_Intro/05_tuple_database/nbaallelo.db")

游標(biāo)對(duì)象

Connection對(duì)象的.cursor()可以創(chuàng)建游標(biāo)對(duì)象(cursor object)。游標(biāo)對(duì)象可以對(duì)數(shù)據(jù)庫執(zhí)行SQL語句并進(jìn)行更靈活的數(shù)據(jù)操作。

NBA 史上實(shí)力最弱的球隊(duì)是哪個(gè)?用 Python + SQL 我們找到了答案

王莽的游標(biāo)

query是純SQL語句,通過cur.execute()實(shí)際執(zhí)行,此時(shí)數(shù)據(jù)庫查詢的結(jié)果仍在cur對(duì)象中。最后調(diào)用cur.fetchall()將查詢結(jié)果全部返回,并存至變量elos,就是最終得到的元組列表。

如果只想返回一條查詢結(jié)果,可以使用cur.fetchone()。

關(guān)于Python與SQLite3的聯(lián)合應(yīng)用,以后還會(huì)深入講解,本篇仍將重點(diǎn)回歸到SQL語句上。

  07. Where

僅僅從數(shù)據(jù)庫的某個(gè)表中查詢某一列的前若干行,這樣的操作局限性太大,很難滿足應(yīng)用需求。實(shí)際上我們感興趣的數(shù)據(jù)子集并非總是按照順序排列,而是符合某種限制條件。

為了進(jìn)一步縮減精確查詢范圍,可以使用關(guān)鍵字WHERE。比如我們想要查詢NBA歷史上,賽后elo值elo_n高于1850的強(qiáng)隊(duì)ID,其SQL語句是:

SELECT team_id, elo_n FROM sheet WHERE elo_n > 1850

查詢結(jié)果表明,歷史上唯一一支elo值曾經(jīng)突破1850的隊(duì)伍是1996年總決賽時(shí)期的芝加哥公牛。

下面請(qǐng)查詢elo_n低于1100的弱隊(duì)ID,及其對(duì)應(yīng)比賽日期。sqlite3庫以及連接對(duì)象、游標(biāo)對(duì)象已經(jīng)預(yù)定義,可以從定義SQL查詢語句query開始。

# 代碼補(bǔ)完


query =


# 代碼補(bǔ)完


cur.execute(query)

elo_1100 = cur.fetchall()

conn.close()


print(elo_1100)


補(bǔ)完提示:請(qǐng)以"fran_id", "date_game", "elo_n"的順序進(jìn)行查詢。

查詢篩選結(jié)果顯示,歷史上一度衰到1100以下的弱旅,也只有1968年一支名為"Squires"的隊(duì)伍。

NBA 史上實(shí)力最弱的球隊(duì)是哪個(gè)?用 Python + SQL 我們找到了答案

他們這么弱,我認(rèn)為與名字起的不好是分不開的。"Squire"在英文中是“侍從”的意思,在《爐石傳說》中,就有很多仆從名為"Squire",比如11圣盾小兵:

NBA 史上實(shí)力最弱的球隊(duì)是哪個(gè)?用 Python + SQL 我們找到了答案

雷鋒網(wǎng)(公眾號(hào):雷鋒網(wǎng))相關(guān)閱讀:

用 Python 分析過去四年的比賽數(shù)據(jù),實(shí)力最強(qiáng)的 NBA 球隊(duì)原來是它

禪與奶罩識(shí)別藝術(shù)(上)


“TensorFlow & 神經(jīng)網(wǎng)絡(luò)算法高級(jí)應(yīng)用班”開課了!

最受歡迎的谷歌TensorFlow 框架,ThoughtWorks大牛教你玩轉(zhuǎn)深度學(xué)習(xí)!

課程鏈接:http://www.mooc.ai/course/82

加入AI慕課學(xué)院人工智能學(xué)習(xí)交流QQ群:624413030,與AI同行一起交流成長(zhǎng)



雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

NBA 史上實(shí)力最弱的球隊(duì)是哪個(gè)?用 Python + SQL 我們找到了答案

分享:
相關(guān)文章

編輯

聚焦數(shù)據(jù)科學(xué),連接 AI 開發(fā)者。更多精彩內(nèi)容,請(qǐng)?jiān)L問:yanxishe.com
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說