王瑞華 宋薇



摘要:隨著籃球賽事的廣泛開展,傳統數據處理分析已不能滿足籃球運動訓練指標優化和培訓狀態評估需求,制約了籃球數據的數字化管理與發展進程。本文基于Spark框架與云計算pyspark接口技術構建數據計算平臺,通過統計網站與Scrapy抓取框架獲取運動數據,利用Logistic Distribution與ELO算法實現成績預測,提高籃球運動大數據運算與分析的效率。為運動員、教練員、體育運動管理者提供教學訓練與競賽決策支持。
關鍵詞:籃球 數據分析 Spark ELO
Research on Basketball Performance Prediction Analysis Based on Spark Framework and ELO Algorithm
WANG Ruihua1 ?SONG Wei2
(Hubei Open University,Wuhan,Hubei Province,430074 China; Wuhan Sports University, Wuhan,Hubei Province,430079China)
Abstract:With the extensive development of basketball events, traditional data processing and analysis can no longer meet the needs of basketball training index optimization and training status evaluation, which has restricted the digital management and development process of basketball data. This paper builds a data computing platform based on Spark framework and cloud computing pyspark interface technology, obtains sports data through statistical website and Scrapy grab framework, and realizes performance prediction by Logistic Distribution and ELO algorithm, improving the efficiency of basketball big data operation and analysis. Provide teaching training and competition decision support for athletes, coaches and sports managers.
Key Words: Basketball; Date analysis; Spark; ELO
研究背景
隨著籃球賽事的廣泛開展,傳統數據處理分析方法已無法實現籃球運動數據的深入挖掘與分析需求,制約了訓練指標優化和運動員訓練狀態評估的數字化管理進程。籃球運動數據分析研究,也因此成為體育統計方向的研究[1]。當前籃球運動大數據分析存在以下問題。
(1)缺乏對數據計算分析平臺與框架的應用研究[2]。隨著計算機存儲設備與運動數據采集設備功能日益強大,籃球運動數據存儲量與計算量都在不斷飛速增長,目前的數據分析平臺無法滿足籃球運動大數據分析需求[3]。
(2)缺乏對深度學習建模與機器學習算法研究,局限于個別動作數據查詢和競技水平統計描述,對數據的挖掘與分析不夠深入,無法提供籃球運動信息預測與策略支持[4]。
(3)缺乏對數據可視化技術的運動訓練應用研究,當前運動數據可視化技術主要應用于體育新聞傳播[5],著重娛樂性和趣味性,而用于運動訓練領域的可視化工具對人工操作依賴程度較高,因此存在可視化結果輸出效率低等問題[6]。
研究方法
2.1構建Spark大數據分析開源計算平臺
Hadoop MapReduce技術廣泛應用于籃球運動大數據平臺,但由于MapReduce需要將任務產生的中間結果寫回磁盤,需要從網絡中的各個節點進行數據拷貝,耗費大量的時間在網絡磁盤輸出過程中。因此Hadoop MapReduce技術實現大數據分析與計算的運算速度有限,只適合離線的數據計算任務,從而制約了籃球運動數據實時分析與計算。為解決此問題,美國加州伯克利AMPLAB提出基于Hadoop MapReduce開源接口的并行計算框架Spark。Spark框架直接在內存中保存中間運行數據結果,因此進一步提高了大數據挖掘與分析中的數據迭代算法計算效率。如圖1所示,Spark平臺支持多場景的通用大數據計算,用于解決批處理與交互查詢等核心問題,數據的存儲在生產環境中由Hadoop分布式文件系統HDFS承擔。Spark可以從多數據源讀取數據,并且擁有不斷發展的機器學習庫和圖計算庫供開發者使用。
2.1.1彈性分布數據集RDD
為避免計算的中間結果會被重復使用,Spark提供了基于RDD cache機制和checkpoint機制來支持容錯。通過將RDD數據集的操作結果緩沖到內存中,并直接從內存中輸入下一次操作,從而省去了大量Map Reduce磁盤操作,提升了機器學習中迭代算法與交互式數據挖掘的計算效率。本文以文件形式從Hadoop文件系統生成RDD,通過RDD的to DebugString來查看其遞歸的依賴信息,核心代碼如下:
// 創建RDD
def RDDtextFile(path: String, minSplits: Int = defaultMinSplits): RDD[String] = {
hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable],
classOf[Text], minSplits) .map(pair => pair2.toString) }
// 創建HadoopRDD
new HadoopRDD(this, conf, inputFormatClass, keyClass, valueClass, minSplits)
2.1.2 pyspark接口應用
依據計算需要,Spark內核會繪制一張計算路徑有向無環圖(DAG)。基于DAG圖,Spark內核將計算過程劃分成任務集stage,然后將stage任務提交到計算節點實施計算。基于Spark框架下Python編程接口pyspark實現python與java的互操作,核心代碼如下:
from pyspark import SparkContext
sc = SparkContext("local", "MyPySparkJob Name", pyFiles=['MyPySparkFile.py', 'MyPySparklib.zip', 'app.egg'])
words = sc.textFile("/user/MyPySparkshare/MyPySparkdict/words")
words.filter(lambda w: w.startswith("spar")).take(5)
2.2.籃球運動數據獲取
2.2.1使用統計網站數據
獲取Basketball Reference.com網站數據[6],包括:每支隊伍平均每場比賽的表現統計;每支隊伍的對手平均每場比賽的表現統計;綜合統2019-2020年NBA常規賽以及季后賽的每場比賽的比賽數據。使用的是以下三個數據表格。
Team Per Game Stats:每支隊伍平均每場比賽的表現統計,包括排名、參與場數、平均比賽時間、投球命中次數(三分球、二分球、罰球)、投籃次數、投球命中率、籃板球總數、助攻、搶斷、封蓋、失誤、犯規、得分。
Opponent Per Game Stats:所遇到的對手平均每場比賽的統計信息,所包含的統計數據與 Team Per Game Stats 中相同,只是代表的是該球隊對應的對手的統計信息。
Miscellaneous Stats:綜合統計數據,包括排名、隊員的平均年齡、勝利次數、失敗次數、基于畢達哥拉斯理論計算的贏的概率、基于畢達哥拉斯理論計算的輸的概率、(添加)贏球次數的平均間隔、評判對手選擇與其球隊或是其他球隊的難易程度對比(0為平均線,可以為正負數)、每100個比賽回合中的進攻比例、每100個比賽回合中的防守比例、48min內大概會進行多少個回合、罰球次數所占投籃次數的比例、三分球投籃占投籃次數的比例、二分球、三分球和罰球的總共命中率、有效的投籃百分比(含二分球、三分球)、每100場比賽中失誤的比例、球隊中平均每個人的進攻籃板的比例、罰球所占投籃的比例、對手投籃命中比例、對手的失誤比例、球隊平均每個球員的防守籃板比例、對手的罰球次數占投籃次數的比例。
2.2.2基于Scrapy抓取框架與AJAX技術
AJAX(Asynchronous JavaScript And XML),即使用JS語言與服務器進行異步交互,傳輸數據格式為XML。AJAX除了支持異步交互,另一個特點就是瀏覽器頁面的局部刷新,由于不需要重載整個頁面,不僅提高了性能,還提升了用戶體驗。JSON對象是JS對象的子集,它包含JS中的6種數據類型:number、string、Boolean、array、null、object。JSON字符串格式簡單且字符量小,與XML相比在網絡傳輸方面更具優勢。目前,JSON已經成為各大網站交換數據的標準格式。
基于Python中json模塊,通過json.dumps()方法,可以將python中的基本數據類型序列化為一種標準格式的字符串,進而可以存儲或通過網絡傳輸。通過json.loads()方法,又可以將這些標準格式的字符串反序列化為原數據類型。給服務器發送用戶輸入的數據,服務器將驗證的結果用JSON格式的字符串發回響應,前端用JS來解析JSON數據。
Python語言體系使用Scrapy框架技術來抓取web站點與提取數據,實現數據挖掘與數據監測。我們采用AJAX技術獲取球員鏈接的網頁,再基于Scrapy框架進行網絡數據抓取,獲得球員數據,導出CSV文件代碼如下:
Import requests
Url=”https://cba.hupu.com/teams/shanghai”
Del getHtml(url)
Try:
R=request.get(url)
raise_for_status()
encoding=R.apparent_encoding
Return R.text
Except:
Return ‘’
2.3基于Logistic Distribution與ELo算法實現成績預測
2.3.1 ELO評分算法
ELO等級分制度是由匈牙利裔美國物理學家Elo創建的一個衡量各類對弈活動選手水平的評分方法,是當今對弈水平評估的公認權威方法,很多競技運動都會采取 Elo 等級分制度對選手進行等級劃分,如足球、籃球與棒球比賽。根據Logistic Distribution計算 PK 雙方(A 和 B)對各自的勝率期望值計算公式。R_A表示A當前的積分,R_B表示B當前的積分,E_A表示A當前的勝率期望值,E_B表示B當前的勝率期望值,計算公式如下:
E_(A=1/(1+〖10〗^(((R_B-R_A))?400) ))
E_(B=1/(1+〖10〗^(((R_A-R_B))?400) ))
S_A表示實際勝負值(勝為1,平為0.5,負為0),如果S_A與A當前的勝率期望值E_A不相同,則A的Elo評分需要重新計算為R_A^new,計算公式如下:
R_A^new=R_A^old+K(S_A-R_A^old)
其中 K 值是一個常量系數,K值的大小直接關系到一局競技活動的結束,通常水平越高的比賽中其K值應越小,從而避免少數幾場比賽就能改變頂級隊伍的積分排名。為讓積分盡可能保持標準正態分布,將歷史積分值R_A^old分為三個區間,K分別取值16、24、32。
2.3.2 特征向量提取與回歸模型建立
獲取數據后,利用每支隊伍過去的比賽情況和Elo等級分來判斷每支比賽隊伍的可勝概率。在評價到每支隊伍過去的比賽情況時,將使用到Team Per Game Stats、Opponent Per Game Stats和Miscellaneous Stats(以下簡稱為 T、O和M表)這3個表格的數據,作為代表比賽中某支隊伍的比賽特征。由兩支隊伍的以往比賽統計情況和兩個隊伍各自的Elo等級分構成。使用 Python 的pandas、numpy、scipy和sklearn庫Logistic Regression方法建立回歸模型,計算每支比賽隊伍的Elo socre,利用這些基本統計數據評價每支隊伍過去的比賽情況,預測結果將顯示勝算較大一方的隊伍能夠贏另外一方的概率。研究思路如下。
(1)數據初始化,設置回歸訓練時所需用到的參數變量,從T、O和M表格中讀入數據,去除一些無關數據并將這三個表格通過Team屬性列進行連接。
(2)獲取每支隊伍的Elo Score等級分函數,當在開始沒有等級分時,將其賦予初始base_elo值。
(3)計算每支隊伍的Elo等級分,假設獲勝方提高的Elo等級分與失敗方降低的Elo等級分數值相等。為了體現主場優勢,主場隊伍的Elo等級分在原有基礎上增加100。
(4)基于數據內容前三項和Elo等級分建立每場比賽的數據集。
(5)在main 函數中調用這些數據處理函數,使用sklearn中的LogisticRegression函數建立回歸模型。
(6)利用訓練好的模型對比賽結果進行預測,利用模型對一場新的比賽進行勝負判斷,并返回其勝利的概率。
(7)在CSV文件中保存預測結果。
研究結果與分析
3.1 球隊贏分概率預測
使用Python語言中pandas、numpy、scipy和sklearn庫,計算每支NBA比賽隊伍的Elo socre,利用這些基本統計數據評價每支隊伍過去的比賽情況,并且根據國際等級劃分方法Elo Score對隊伍現在的戰斗等級進行評分,最終結合這些不同隊伍的特征判斷在一場比賽中,哪支隊伍能夠占到優勢。預測結果將顯示勝算較大一方的隊伍能夠贏另外一方的概率,如表1所示。
結論
在下一步的研究工作中,為避免計算代價異常增大的突變,將基于Spark框架,進一步探索緩存與廣播技術,提升計算并行度,并通過預處理降低預定義類的訓練依賴性。本文的研究中給出勝算較大一方的隊伍能夠贏另外一方的概率,由于性能評價數據量有限,為實現更加準確和系統的判斷,需要從統計數據網站中獲取更加全面和系統的數據,并結合不同的回歸、決策機器學習模型,搭建一個更加全面、預測準確率更高的模型。為此,建議中國職業籃球聯賽(CBA)能順應大數據時代的發展趨勢,利用先進的數據采集與統計設備,健全我國籃球運動數據統計類型,加強競技運動高階數據的統計[7],為球隊組建、教練用人和人才培養提供科學的指導。
參考文獻
[1]馬振嘉.人工智能在籃球運動中的運用分析[J].延安大學學報:自然科學版,2021,40(1):109-112.
[2]康冬陽,王曉蓉.大數據時代背景下洛陽市高校籃球隊建設的促進研究[J].體育科技,2020,41(6):117-118
[3]高國賢,練碧貞,任弘.大數據時代我國籃球運動員選材理論范式危機及路徑轉換[J].沈陽體育學院學報,2020,39(2):101-107.
[4]張銘鑫,王新雷,練碧貞,等.“全數據”驅動下籃球教練員科學決策的案例分析——以2018-2019賽季CBA聯賽廣東男籃為例[J].成都體育學院學報,2020,46(6):100-106.
[5]楊瑩,易卓.大數據時代下籃球運動的發展——以銅仁市為例[J].體育世界(學術版),2020(3):31-32.
[6]單曙光.籃球大數據[M].北京:世界圖書出版公司,2017.99-120.
[7]蔣雪辰,左小五,陳勝,等.基于因子分析和K-Means算法對NBA得分后衛的功能性分析[J].體育研究與教育,2020,35(5):73-79.