1 / 35

Data Mining - Baseball Data

Data Mining - Baseball Data. 目的   利用 graphical methods 試圖來說明:球隊是如何由球員的表現來計算所支付的薪水。 資料介紹

majed
Télécharger la présentation

Data Mining - Baseball Data

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Data Mining - Baseball Data

  2. 目的   利用 graphical methods試圖來說明:球隊是如何由球員的表現來計算所支付的薪水。 • 資料介紹 Baseball Data 是在一場名為 “Why They Make What They Make - An Analysis of Major League Baseball Salaries.“ 的會議中被提出來的。 這場會議是在1988年的New Orleans,由 Statistical Graphics Section of the American Statistical Association所舉辦。主辦單位希望藉由這個資料,讓會員之間互相比較彼此分析和展現資料的技巧。   原始資料是由兩個檔案所組成(打擊者資料、球隊資料)。總共收集了 322 位球員,裡面有各個球員 1986 年 和 他職業生涯 中的表現。其中球員的資料出自於 ” The 1987 Baseball Encyclopedia Update published by Collier Books, Macmillan Publishing Company, New York ” ;而球隊的資料是從 Elias Sports Bureau 私人的會談中獲得其中薪水的資料並不完全,薪水資料有缺失的球員,在那個欄位中會以 NA 表示。 以上說明的原文:baseball_des.doc

  3. 原始資料 變數名稱 • 球員姓名 • 1986年 上場打擊的數目   AB • 1986年 安打的個數 ( 詳細說明:安打) HIT • 1986年 全壘打的個數 ( 詳細說明:全壘打) HR • 1986年 得分 R • 1986年 打點 ( 詳細說明:打點) RBI • 1986年 保送 W • 在大聯盟的時間(年) YEAR • 在大聯盟的中 上場打擊的數目 C.AB • 在大聯盟的中 安打的個數 C.H • 在大聯盟的中 全壘打的個數 C.HR • 在大聯盟的中 的得分 C.R • 在大聯盟的中 的打點 C.RBI • 在大聯盟的中 的保送 C.W

  4. 變數名稱 • 1986年底 所在的聯盟 無 • 1986年底 所在的區 無 • 1986年底 所在的球隊 無 • 1986年底 所在的位置 無 • 1986年 讓別人出局次的數 PO • 1986年 的助殺次數 ( 詳細說明:助殺) ASS • 1986年 的失誤次數 ( 詳細說明:失誤) ER • 1987年初 的薪水(單位:千元) SALARY • 1987年初 所在的聯盟 無 • 1987年初 所在的球隊 無

  5. 工作目標 我們這組專題,是做 data mining 的第一個步驟,將各個變數的概況,呈現出來,使後面的各組可以快速的了解各項資料的輪廓,利於資料的分析。再來就是把資料做初步的清理和整理,使數據很容易使用。   其次,我們希望做出一套流程,要是將來拿到其他的資料,也能夠套用這個流程直接處理,所以在我們的報告裡面,會附上 R 的程式碼,以後要是有其他的資料,可以直接將程式複製貼上,修改部分變數及欄位的名稱就可以了。 • 工作大綱 • 認識原始資料中,各個變數的意義 • 取出數值資料 • 計算個項資料基本的統計量 • 處理有缺失的資料 • 畫出各項圖表,以觀察各項資料的狀況 • 初步檢視有沒有不合理的數據 • 各項資料做適當的轉換

  6. 軟體介紹:R 在這個專題中,我們所使用的軟體是 R,它是一種統計計算的語言和環境,由Bell Laboratories ( 從前的 AT&T,現在的 Lucent Technolo-gies ) 裡面的 John Chambers 和他的同事們所研發出來的。R是一個和 S 語言相似的 GNU project 。它與 S 有許多不同的地方,但是為 S 所寫的原始碼大致上還是可以在 R 上面正常的運作。 R 提供了各種統計及繪圖技術,也具備了高度擴充的能力。S 是統計方法中經常被選擇使用的工具,而 R,因為開放的原始碼,成為它一項很強的優勢。 我們選擇使用 R,除了他是免費的軟體,還因為它可以輕易的加入所需要的數學樣本或是函式,正因如此,一些統計方法的 package 都很完善,可供我們使用,當然這些也是免費的。 R的官方網站:http://www.r-project.org/

  7. 讀入資料 (使用R) 原始資料存放檔案 baseball.dat ( 記得要將檔案存放於工作目錄中 ) 讀入原始資料並存放於變數 org 中 org=read.table ("baseball.dat") • 取出數值資料 將球員姓名放入變數 hitter.name 中 並設定欄位名稱 hitter.name=org[,1:2] colnames(hitter.name)=c("f.name","l.name") 將數值資料放入變數 hitter 中 並設定欄位名稱 其中第 1,2,16~19,24,25 變數,不是數值的資料,所以把他拿掉 hitter=org[,-c(1,2,16:19,24,25)] colnames(hitter)=c("AB","HIT","HR","R","RBI","W","YEAR","C.AB","C.H","C.HR","C.R","C.RBI","C.W","PO","ASS","ER","SALARY") 註:欄位名稱說明放在 附錄二 中 [ 白字部分為程式碼 ]

  8. 計算各個變數的基本統計量 1. 使用 summary 列出各個變數的基本統計量 ( mean,max,min,quantile,Median,資料有缺失的個數 ) summary(hitter) 注意:由結果可看出,薪水有 59 筆資料有缺失 2. 補足 summary 尚未顯示的統計量 ( 標準差與變異數) apply(hitter[,-c(17)],2,sd) apply(hitter[,-c(17)],2,var) 注意:由於薪水有資料缺失,所以薪水沒有以上兩種統計量 註:以上所有基本統計量存放於檔案 附錄三 中 [ 白字部分為程式碼 ]

  9. 處理有缺失的資料 ( missing data ) 由上一個程序知道,薪水的資料有缺失, 找出第幾筆薪水資料有缺失,並存放於變數 miss 中 miss=which(is.na(hitter[,"SALARY"])== TRUE) 我們薪水資料將有缺失的球員放在變數 hitter.miss 中 所對應到的球員姓名放在 hitter.miss.name 中 hitter.miss =hitter[miss,] hitter.miss.name =hitter.name[miss,] 將薪水資料沒有缺失的球員放在變數 bb 中 所對應的球員姓名放在變數 bb.name 中 bb=hitter[-miss,] bb.name=hitter.name[-miss,] 補充:總共 ( hitter ) 有 322 筆資料,   薪水資料沒有缺失的球員 ( bb ) 有 263 筆 [ 白字部分為程式碼 ]

  10. 以繪圖方法,視覺化的呈現各個變數中,quantile 的分布情形 [ 白字部分為程式碼 ]

  11. 以繪圖方法,視覺化的呈現各個變數中,數值與個數的分布狀況以繪圖方法,視覺化的呈現各個變數中,數值與個數的分布狀況 [ 白字部分為程式碼 ]

  12. 修正薪水 (一) 由 Histogram 的圖形可以看出來,所要預測的對象 ( SALARY ) 圖形並不對稱,有嚴重偏斜的現象,所嘗試進行修正

  13. 修正薪水(二) 試著將薪水以 log 轉換, 並將轉換後的數據存放於 變數 logSALARY 中 logSALARY=log(bb[,"SALARY"]) 看看轉換後的狀況 ( 如右圖 ) hist(logSALARY) 結果:轉換後的圖形比較好 建議以 logSALARY 取代原來的 SALARY [ 白字部分為程式碼 ]

  14. 計算變數間兩兩的相關係數 ( Correlation Coefficient ) 計算 hitter 中,各個變數兩兩之間的相關係數, 由於 hitter 中薪水的資料有缺失,無法計算相關係數, 所以必須把薪水 ( 第17項 ) 扣掉, 結果存放於變數 hitter.cor 和 附錄四(3-1)中 hitter.cor=cor(hitter[,-17]) 計算薪水與其他變數間的相關係數, 結果存放於以下的變數和 附錄四(3-2)中 bb.SALARY.cor=cor(bb[,"SALARY"],bb[,1:16]) bb.logSALARY.cor=cor(logSALARY,bb[,1:16]) 注意:bb中的資料扣掉薪水資料有缺失的球員 是用 263 筆資料計算 而上面是用原始的 hitter 中的 322 筆資料計算 [ 白字部分為程式碼 ]

  15. 看看薪水與各個變數之間的分布,與畫出 Lowess 圖形 下面這個例子是畫出 logSALARY 與 1986 年打擊次數的分布圖, 並加上 lowess 的線條,其他的以此類推, 完整的指令歷程存放於檔案 lowess.txt中, 完整的繪圖結果存放於 lowess.ppt中 attach(bb) plot(AB,logSALARY) AB.lowess=lowess(AB,logSALARY) points(AB.lowess,col=2,type="l") 注意:上面繪圖的過程是採用 logSALARY 的值 [ 白字部分為程式碼 ]

  16. 薪水與出場次數的分布圖 (一) 由薪水與出場次數的分布圖觀察到:有兩個球員的行為很奇怪,出場次數非常低,薪水卻非常低,要特別注意

  17. 薪水與出場次數的分布圖 (二) 這兩個球員分別是: 1968出場次數  薪水(平均:535.9259) Jose Uribe 20 2127.333 (第三高) Terry Kennedy 19 920 (高於平均) 而且其他表現的數值也非常低 HIT HR R RBI W YEAR C.H C.HR C.R C.RBI C.W PO ASS ER J 1 0 0 0 0 2 9 2 6 7 4 78 220 6 T 4 1 2 3 1 1 4 1 2 3 1 692 70 8 建議:可能是資料錯誤,建議把這兩筆資料拿掉

  18. 新變數:安打率 生涯安打率 安打個數裡面含有球員安打能力的資訊, 但是由於安打個數與上場次數呈現高度相關(0.96793882), 如果安打個數不除以打擊次數, 則球員安打能力的資訊就會被上場次數蓋掉, 如果以安打個數對薪水做線性廻歸 相當於以打擊次數對薪水做線性廻歸 失去了安打能力的資訊 建議:以安打率代替安打個數 新增 1986 年安打率與生涯安打率 分別存放於變數 HIT.avg 和 CH.avg 中 HIT.avg=hitter[, "HIT"]/hitter[, "AB"] CH.avg=hitter[, "C.H"]/hitter[, "C.AB"] [ 白字部分為程式碼 ]

  19. 新變數:生涯得分率 生涯打點率 生涯保送率 同安打率的理由 生涯得分  與 生涯打擊次數 相關係數 0.98334538 生涯打點  與 生涯打擊次數 相關係數 0.98334538 生涯保送率 與 生涯打擊次數 相關係數 0.94921878 建議:上面變數分別用 生涯得分率 生涯打點率 生涯保送率 代替 新增  生涯得分率 生涯打點率 生涯保送率  分別存放於變數 CR.avg 和 CRBI.avg 以及 CW.avg 中 CR.avg=hitter[,"C.R"]/hitter[,"C.AB"] CRBI.avg=hitter[,"C.RBI"]/hitter[,"C.AB"] CW.avg=hitter[,"C.W"]/hitter[,"C.AB"] [ 白字部分為程式碼 ]

  20. 補充: 由生涯表現和 1986 表現的分布圖可以得到一個現象,每位球員1986 年的表現跟生涯的表現很接近,以下是安打的例子:

  21. 更正錯誤的資料 一九九五年 公佈的列表,更正之前原始資料中的一些錯誤

  22. 變數列表 將程式中所造出的變數彙總

  23. =END= [ 以下是附錄 ]

  24. 附錄一: 安打  ( 1 of 2 ) [ 回原始資料] 「安打」應該是打擊部分最重要的數據了,一場比賽得分最主要就是靠安打,它也是一個打者站上打擊區擊球的最大目標,自然也是球迷最想看到的比賽內容。什麼樣的擊球會成為安打?看下面的說明就可以有基本的概念了。 1. 打者擊出的球,碰觸野手之前落在界內區、擊在全壘打牆上,或飛過全壘打牆外,打者因此進佔一壘(或以上)時,記為安打。 2. 打者擊出的球過強或過慢,使內野手無法處理,造成打者上壘時,記為安打。包括其他內野手碰觸後使球改變力道及方向的情況,例如原本游擊手可以接到傳一壘刺殺的滾地球,因三壘手衝出防守而碰觸球,使得球改變方向,造成打者上一壘。 3. 界內球不自然的跳動,或打在野手身上、投手板、壘包使得野手無法防守,而打者上一壘時記為安打。 4. 沒有碰到野手的飛球落在外野區域,經記錄員判斷野手以正常守備動作沒有辦法接到時,上一壘的打者記為安打。 5. 界內球(不包括內野高飛球)直接碰到跑者或裁判時,記為安打。 6. 內野手接球之後,企圖讓壘上的跑者出局,但沒有成功,而這一球以記錄員的判斷,即使直接傳一壘也無法刺殺打者時,應給打者安打記錄。 蕃薯藤運動網

  25. 附錄一: 安打  ( 2 of 2 ) [ 回原始資料] 下列的情況,不能判定為安打: 1. 因打者擊出的球使壘上跑者被封殺,或因野手失誤而上壘時不記為安打。 2. 打者雖然擊出安打,但因前一位跑者未踩壘包而被「促請裁決」出局時,打者仍不記為安打而只有打數。 3. 投捕手及內野手原本可以觸殺壘上跑者,卻因失誤而使跑者上壘時,打者不給予安打紀錄。但如果內野手離開內野區時則要視情況而決定是否給予安打,例如二壘有跑者,打者擊出左外野和游擊手之間的小飛球,此時,二壘跑者為防止球被接到,所以不敢離壘太遠,等球落地時才開始起跑,但卻被拾球的游擊手傳到三壘前觸殺,這種情況下,雖然跑者被觸殺,但打者在紀錄上仍是安打。 4. 打者擊出的球很明顯地會被刺殺在一壘前,但野手接球後卻不傳一壘而企圖觸殺跑者不成時不記安打。但如果野手接球後沒有馬上傳一壘,而是拿著球注意跑者行動,以致稍微猶疑之間未把球傳出,讓打者上一壘時則記為安打。 5. 跑者妨礙守備被判出局時,打者不記為安打。但如果記錄員判斷,打者擊出的球很明顯是安打時,雖有妨礙仍記為安打。 蕃薯藤運動網

  26. 附錄一: 全壘打[ 回原始資料] 棒球比賽最讓人興奮的,莫過於「紅不讓」(Home Run)──全壘打了,看著球從本壘板上方被敲出去,直直飛過全壘打牆外,真是一大享受。 全壘打的定義很簡單,只要球打擊出去,直接飛過全壘打牆(沒有在球場中落地),就是全壘打了。需要知道的是,全壘打牆究竟有多遠?棒球規則中並未明定全壘打牆應該距離本壘板多遠,但一般建議兩翼(左右外野)距離在320英呎(97.534公尺)以上,中外野距離在400呎(121.918公尺)以上較理想。 除了一般的全壘打之外,還有一種比較罕見的「場內全壘打」。打者擊出安打後,依序通過一、二、三壘,奔回本壘得分,就算是場內全壘打。場內全壘打的誕生,必須打者本身腳程夠快,對方守備員花較長的時間處理球(發生失誤則不算),再加上一點運氣,所以相當難得。前兄弟象球員吳英偉是中華職棒第一位擊出場內全壘打的球員。 蕃薯藤運動網

  27. 附錄一: 打點[ 回原始資料] 「打點」這數字是打者成績最受重視的三項數據之一,最白話的定義,就是「幫球隊打回的分數」。因此,只要打者靠擊出安打、犧牲打、野手選擇、內野滾地球出局而使跑者得分時都記為打點。 最容易賺進打點的方法,就是擊出全壘打。壘上沒有跑者時,打者擊出全壘打的打點是一,因為把自己送回家也有打點;壘上有跑者時,打者擊出全壘打的打點,就是該全壘打得分的總和。擊出滿貫全壘打的四分打點了。 關於打點的判定,下面有幾項規定: (1) 無人或一人出局三壘有跑者,打者擊球造成失誤使三壘跑者得分時,應判斷如果沒有失誤,跑者可不可能得分,如果可能則打者記打點一分。 (2) 無人或一人出局三壘有跑者,投手投出的第三個好球捕手沒有接到,三壘跑者利用機會回本壘得分,雖然打者最後仍被捕手傳球刺殺在一壘前,但打者仍有打點。 (3) 擊出雙殺打的打者沒有打點。 (4) 打者擊出滾地球可能變成雙殺,雖然因野手傳球漏接只出局一人,而且三壘跑者也得分,但紀錄上打者仍沒有打點。 (5) 跑者跑壘過程中,雖然發生野手持球過久或沒有作用的傳球情形,但只要是跑者沒有中斷的跑壘而得分時,打者都有打點。反之,只要跑者先停止跑壘,發現失誤後,才又繼續跑壘而得分時,打者都沒有打點。 蕃薯藤運動網

  28. 附錄一: 助殺[ 回原始資料] 談及野手的守備時,我們往往只看重該名野手的失誤數和守備率,卻忽略掉「助殺」這個同樣很重要的數據,對外野手來說,更是評斷一名外野手傳球能力的指標。 野手的傳球、改變擊球的方向、改變擊球的力道因而完成刺殺動作時,給野手一次助殺紀錄。發生夾殺時,有很多野手來回傳球才完成夾殺,給所有傳過球的野手一次助殺紀錄。 (A) 跑者妨礙守備或跑離三呎線被判出局時,給傳球的野手一次助殺紀錄。 (B) 投手三振打者沒有助殺紀錄,但如果捕手漏接第三個好球,經投手傳球而把打者刺殺在一壘前時,給投手一次助殺。 投手撿到捕手的漏接球,傳一壘發生暴投,使得打者多進壘時,投手不但沒有助殺紀錄,還要加記失誤一次。 (C) 投手不但三振打者沒有助殺紀錄,因他的投球使捕手接球後傳到各壘觸殺離壘或盜壘的跑者,也沒有助殺紀錄。 但如果投手退出投手板,就視同一般內野手,因他的傳球使打者或跑者出局時,就有助殺紀錄。 蕃薯藤運動網

  29. 附錄一: 失誤 ( 1 of 2 ) [ 回原始資料] • 失誤的紀錄並不是以野手有沒有碰到球做為判斷,而是以記錄員的觀察,野手在正常守備情況下未能接住球時即為失誤,例如球從野手兩腿間緩慢穿過,或是高飛球在身邊掉落時都算是失誤。 但,判斷上及思考上發生錯誤時不算失誤,另外,野手接傳球動作緩慢以致讓打者及跑者上壘時,也不算是失誤記錄。 • (A) 可以接住的界外球野手未能接住,使得打者還有擊球機會時,記野手失誤。 • (B) 野手未能接住滾地球或傳球,而使得打者上一壘時,記野手失誤一次。 • (C) 野手未能接住滾地球或傳球,而使得跑者上壘時,記野手失誤一次。 • 傳球狀態下失誤的相關說明如下: • (D) • 野手暴傳使跑者上壘時,記傳球野手的失誤,但捕手為了阻殺盜壘者而暴傳 時,只要跑者不多進壘,就不記捕手失誤。 • (2) 因野手暴傳球而使跑者多進壘時,記傳球的野手失誤。 • (3) 野手的傳球落地後彈跳碰觸投手板、壘包、跑者、裁判或其他野手身上,而使跑者多進壘時,記傳球野手失誤。 • (4) 接球的野手因陽光或夜間照明影響而未能接住球時,記傳球的野手失誤。 • (5) 野手暴傳後,不管多跑幾壘,只記一次失誤。 • 蕃薯藤運動網

  30. 附錄一: 失誤 ( 2 of 2 ) [ 回原始資料] (E) 野手未能接住或企圖擋住沒有偏差的傳球時,記接球的野手失誤。不過,因傳球過慢讓打者(或跑者)上壘時,即使傳球沒有偏差,也不記接球者或是傳球者失誤。 另外,傳球到二壘上,但沒有任何野手接球時,以記錄員的判斷,二壘手或游擊手何者該接球,以做為失誤記錄的依據。 (F) 野手妨礙,而使打者(或跑者)上壘,不管進幾個壘,只記野手一次失誤。但,野手的妨礙不改變已成的事實時,則不記野手失誤。例如打者擊出右外野三壘安打,通過一壘往二壘途中受到妨礙,經裁判判定可以上三壘,此時不記野手失誤而是打者三壘安打。 蕃薯藤運動網

  31. 附錄二: 變數 hitter 中的欄位名稱[ 回取出數值資料] “AB“ 1986年打擊次數 “HIT“ 1986年安打個數 “HR“ 1986年全壘打個數 “R“ 1986年得分 “RBI“ 1986年打點 “W“ 1986年保送 “YEAR“ 職業生涯的長短(年數) “C.AB“  生涯打擊次數 “C.H“  生涯安打個數 “C.HR“  生涯全壘打個數 “C.R“  生涯得分 “C.RBI“  生涯打點 “C.W“  生涯保送 “PO“  生涯出局數 “ASS“  生涯助殺 “ER“ 生涯失誤 “SALARY“ 薪水

  32. 附錄三:各個變數的基本統計量 ( 1 of 2 ) [ 回到計算各個變數的基本統計量]

  33. 附錄三:各個變數的基本統計量 ( 2 of 2 ) [ 回到計算各個變數的基本統計量]

  34. 附錄四:各個變數間的相關係數 ( 1 of 2 ) [ 回到計算各個變數間的相關係數] 注意:由於版面的關係,數值接四捨五入至小數點下第三位,完整的資料在檔案 cor.xls中

  35. 附錄四:補上薪水的相關係數 ( 2 of 2 ) [ 回到計算各個變數間的相關係數]

More Related