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