侯汝沖 蘭海翔 盧涵宇 胡正江 薛安琪


摘要:隨著人工智能的發展,Python網絡爬蟲技術應用越來越廣。本文利用Python網絡爬蟲技術進行NBA球隊數據的爬取,主要是采用requests及beautifulsoup包進行網絡爬蟲,利用pandas,matplotlib,numpy等模塊對爬取的球隊的籃板,搶斷等數據進行分析篩選以及可視化處理,用聚類算法數據分析并將數據存儲為csv格式文件,同時也探討了數據挖掘在最佳球員歸屬,薪資匹配,球員搭檔以及選秀模板等應用問題。
關鍵詞:NBA; Python; csv;聚類算法;球隊勝負
中圖分類號: TP208? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2019)25-0199-03
Abstract: With the development of artificial intelligence, Python network crawler technology is applied more and more widely. This paper uses Python network crawler technology to crawl NBA team data, mainly using requests and BeautifulSoup package for network crawler, using pandas, matplotlib, numpy and other modules to crawl team rebounds, steals and other data analysis, screening and visualization processing, using clustering algorithm data analysis and will The data is stored in CSV format file. At the same time, the application of data mining in the attribution of the best players, salary matching, players'partners and draft templates is discussed.
Key words: NBA; Python; csv; clustering algorithm; team victory or defeat
NBA是美國職業籃球聯賽(National Basketball Association)的簡稱,于1946年6月6日在紐約成立,是美國四大職業體育聯盟之一。然而,對于球隊的管理層來說,球員開薪資以及球隊的收入問題隨著NBA數據的日益復雜化就成了一個很棘手的問題,他們需要去考慮球員的技術能力的搭配,以及薪資的匹配問題。因此,球隊很需要現行的數據挖掘技術去分析球員、球隊數據,球員的搭配等諸多問題。或者說NBA的各項數據技術指標進行挖掘分析具有很大的需求與應用價值。
1 網絡爬蟲技術
網絡爬蟲是通過編程語言的實現對網站發出請求,并且用迭代或者遞歸的函數去對網絡上的數據,圖像,文字以及其他內容進行抓取。我們對NBA近十個賽季獲勝球隊的數據進行統計,如果手工瀏覽,那你就需要瀏覽大概上千張網頁。這樣就造成了很大的工作量。使用網絡爬蟲之后,就可以使用語言對網站發出請求,使用迭代或者是遞歸的函數對NBA歷史數據進行下載,讓計算機去完成數據的收集工作,提高了我們的收集數據的效率。
1.1網絡爬蟲實現步驟
本文主要采用Python進行網絡爬蟲,基于Python的網絡爬蟲一般包括幾個步驟,第一步進行對網站發出請求,第二步是下載數據,第三步是對數據進行篩選,第四步就是輸出數據。使用Python進行網絡爬蟲的基本框圖如圖1所示。
Python中提供了很多的網絡爬蟲工具,從最初的urllib,正則表達式,到后來有urllib2,慢慢地出現爬蟲框架scrapy以及requests及beautiful的爬蟲數據包。使用Python中requests包以及beautifulsoup包進行網絡爬蟲,使用以上兩個數據包進行網絡爬蟲具有效率高,速度快以及代碼復雜度低等優勢。使用requests可以很快地下載到網頁數據,然后beautifulsoup進行網頁數據篩選,beautifulsoup最適合對文本及表格數據進行篩選,他可以大大降低篩選的難度
1.2本文的網絡爬蟲介紹
本文的實驗數據來源是虎撲體育官方網站,主要對NBA過去兩個賽季的球隊對陣中的統計數據進行爬取。如投籃、命中率、籃板、助攻、搶斷、得分等數據,并且將爬取的數據存儲為csv格式,待后續處理。
2 聚類算法原理
2.1 KMeans算法原理
在聚類算法中,KMeans算法是使用最為廣泛的一種算法,它的功能主要是把n個對象按照他們的屬性將其分為k個聚類并且讓這些類滿足:同一個類型的對象相似度較高而不同的對象相似度較低。它的算法的核心就是計算樣本點到中心的歐幾里得距離(如式1),
2.2? KMeans++算法原理
K-Means++算法選擇初始聚類中心的思想是:初始的聚類中心之間的相互距離要盡可能遠。KMeans++算法可以說是在KMeans算法的基礎上做了一些升級,但是其原理是與KMeans算法相同的,其算法步驟如下:
(1)隨機挑選一個點作為第一個聚類中心;
(2)對于每一個點x,計算和其最近的一個聚類中心的距離D(x),將所有距離求和得到Sum(D(x));
(3)然后,再取一個隨機值,用權重的方式來取計算下一個“種子點”。這個算法的實現是,先取一個能落在Sum(D(x))中的隨機值Random,然后用Random -= D(x),直到其<=0,此時的點就是下一個“種子點”(其思想是,D(x)較大的點,被選取作為聚類中心的概率較大);
(4)重復2和3,直到K個聚類中心被選出來;利用這K個初始聚類中心進行K-Means算法。
2.3? KMeans與KMeans++算法的優缺點
KMeans算法的有點便是簡單快捷易理解,但是KMeans算法也存在很大的弊病就是需要事先去給定k個聚類中心,這樣一來人們就很難認為的去劃分這些聚類中心,其次就是他很可能導致極大的誤差,或者說是不同的聚類中心會得到完全不同的聚類結果。
KMeans++算法算法理論上克服了KMeans算法需要事先給定聚類中心個數的缺點,他可以自己確定隨機k個聚類心。
3 應用研究與結果分析
3.1? 球隊的投籃、罰球及三分命中率對比賽勝負的影響分析
本次采用KMeans算法的分析結果如圖2-圖4所示.
3.3? 籃板,前場板與場板對比賽勝負的影響分析
采用KMeans算法對以上三項數據的分析結果如圖8-圖11所示。
4 結論
根據以上數據輸出結果顯示,投籃、三分與罰球命中率對于比賽的影響是,當球隊的投籃命中率接近38%,三分命中率接近38%,罰球命中率接近70%的數據時,球隊的得分僅為78.3,然而當以上數據接近49%,49%,78%時,球隊的得分118.6,當三項數據接近44%,44%,75%時,球隊的得分為100.7分,綜合以上數據分析,根據官方數據統計,當球隊的當場得分接近120分時,球隊的贏球率為86.8%,當球隊的得分到達100分附近時,球隊的勝率為44.6%,但是當球隊的得分低于80的時候,贏球的勝率僅為0.9%。綜上所述,球隊命中率更高,球隊更可能贏得比賽。籃板對于比賽勝負的影響不是特別明顯,因此,從目前已有的數據可以得出結論:籃板不是影響比賽勝負的關鍵因素。當籃板,搶斷與助攻放在一起分析時候,助攻是影響比賽勝負的關鍵因素,當球隊的助攻達到28時,總得分高達120分,根據上面的數據顯示,球隊勝率到達86.8%,此外,籃板與搶斷對于勝負的影響很低,但綜合來說還是數據更高的勝率更高。
參考文獻:
[1] 王繼重.基于Hadoop和Mahout的kmeans算法的設計與實現[J].大連海事大學,2016(3).
[2] 周敦飏.基于星型模型的球隊數據挖掘應用研究[J].華中科技大學,2012(5).
[3] 馬遙.計算機數據挖掘技術在CBA聯賽中的應用理論研究[J].鄭州大學,2014(3).
[4] 柏宇軒.kmeans應用與特征選擇[J]. 電子技術與軟件工程,2018(1).
[5] 侯敬儒.基于spark的并行KMeans聚類模型研究[J].計算機與數字工程,2018(3).
[6] 張亞娟. OFDM系統同步技術研究[D].大連理工大學,2004(6).
[7] 王璠.中國體育事業統計數據的挖掘與分析[J].西安體育學院,2011(5)
[8] ywjun的學習筆記.Python KMeans使用[J]. CSDN博客,2018(8).
[9] lanse_zhicheng. K-means和K-means++算法代碼實現(Python)[J].CSDN博客,2019(1).
[10] cx愛小芹芹. python爬蟲+數據分析之NBA球員LBJ13個賽季的數據分析.[M].CSDN,2016.
【通聯編輯:光文玲】