4行代碼Python就能實(shí)現(xiàn)NBA投籃數(shù)據(jù)可視化!

NBA剛剛結(jié)束,怎樣對(duì)球員投籃數(shù)據(jù)做可視化?
我發(fā)現(xiàn)了大佬造的輪子,只需4行代碼就能實(shí)現(xiàn)。
GitHub地址:
https://github.com/theccalderon/shot_chart
在PyCharm上直接安裝shot-chart庫,記得版本選1.0.0的。
最新版本是1.1.0,得分和未得分沒有明顯區(qū)分開,所以選擇安裝1.0.0版本。
大伙也可以兩個(gè)版本都下載安裝,看有什么差異。
from?shot_chart.core?import?*
#?2019-2020賽季
shots_2019?=?make_df(untar_data(URLs.SHOTS_2019))
同樣的這位大佬也是把數(shù)據(jù)放在網(wǎng)絡(luò)上,需要通過數(shù)據(jù)請求才能獲取到。
此處通過查看源代碼(core.py),發(fā)現(xiàn)數(shù)據(jù)的請求地址。

地址如下,從2000-2001賽季到2019-2020賽季。
#?2000-2001賽季常規(guī)賽數(shù)據(jù)
https://nba-shot-charts.s3.amazonaws.com/shots-2000.tgz
.......................................................
#?2019-2020賽季常規(guī)賽數(shù)據(jù)
https://nba-shot-charts.s3.amazonaws.com/shots-2019.tgz
直接在瀏覽器上訪問地址,下載壓縮包,解壓得到CSV文件。


果然是2019-2020年NBA常規(guī)賽的球員投籃數(shù)據(jù)。
統(tǒng)統(tǒng)下載下來,這樣就可以直接本地調(diào)用,不用擔(dān)心被墻掉。

數(shù)據(jù)讀取代碼修改為如下,其實(shí)就是pandas讀取。
from?shot_chart.core?import?*
#?2019-2020賽季
shots_2019?=?make_df('shots-2019.csv')
2020賽季NBA的球隊(duì)名單,調(diào)用函數(shù)list_teams。
from?shot_chart.core?import?*
#?2019-2020賽季
shots_2019?=?make_df('shots-2019.csv')
#?球隊(duì)名單
print(list_teams(shots_2019))
得到結(jié)果如下。

可惜了LA Clippers(快船)和Milwaukee(雄鹿)。
兩大奪冠熱門球隊(duì),被掘金和熱火干翻船了。
今年湖人的奪冠班底,調(diào)用函數(shù)list_team_players。
from?shot_chart.core?import?*
#?2019-2020賽季
shots_2019?=?make_df('shots-2019.csv')
#?湖人奪冠班底
print(list_team_players(shots_2019,?'LA?Lakers'))
得到結(jié)果如下。

還附帶了出手次數(shù),詹姆斯、戴維斯、庫茲馬、波普、格林排前五。
臥龍鳳雛(格林、波普)得一,可安天下。
昨天發(fā)揮爆表,小F給好評(píng)~
湖人2020年常規(guī)賽全隊(duì)的投籃情況,調(diào)用函數(shù)TeamShots。
from?shot_chart.core?import?*
#?2019-2020賽季
shots_2019?=?make_df('shots-2019.csv')
#?湖人隊(duì)2019-2020賽季投籃情況
Lakers?=?TeamShots(shots_2019,?"LA?Lakers")
Lakers.plot_shots()

果然是4行代碼呀~
左邊的圖綠色表示投籃得分,紅色表示投籃未得分。
右邊的圖橫坐標(biāo)表示距離,縱坐標(biāo)表示次數(shù),綠色表示出手命中次數(shù),橙色表示投籃出手次數(shù)。
FG投籃命中率,eFG真實(shí)投籃命中率。
真實(shí)投籃命中率=全場得分/[2×全場出手次數(shù)+0.44×罰球出手次數(shù)]
來看一下三旬老漢(老詹)的投籃情況吧。
from?shot_chart.core?import?*
#?2019-2020賽季
shots_2019?=?make_df('shots-2019.csv')
#?勒布朗-詹姆斯2019-2020賽季常規(guī)賽投籃可視化
james?=?PlayerShots(shots_2019,?"LeBron?James")
james.plot_shots()

可以看出,籃下是詹姆斯的主要得分點(diǎn)。
03年至20年,小皇帝到詹皇的投籃數(shù)據(jù)可視化。
from?shot_chart.core?import?*
import?pandas?as?pd
#?獲取圖表列名
shots_2000?=?make_df('shots-2000.csv')
columns_list?=?[column?for?column?in?shots_2000]
#?新建一個(gè)空的dataframe
shots_all?=?pd.DataFrame(columns=columns_list)
#?獲取2000-2020常規(guī)賽總數(shù)據(jù)
for?i?in?range(2001,?2020):
????#?文件名
????file_name?=?'shots-'?+?str(i)?+?'.csv'
????shots?=?make_df(file_name)
????#?縱向拼接
????shots_all?=?pd.concat([shots_all,?shots],?ignore_index=True)
#?輸出
#?print(shots_all)
#?詹姆斯03-20常規(guī)賽投籃可視化
james?=?PlayerShots(shots_all,?"LeBron?James")
james.plot_shots()

發(fā)現(xiàn)圖標(biāo)有點(diǎn)大,可以對(duì)core.py文件修改。

在plt.scatter中添加參數(shù)s,設(shè)置大小為3。

突然發(fā)現(xiàn)詹皇原來也如此全面,三分、籃下、中投,就沒有短板。
24號(hào)與23號(hào)之間的傳承,曼巴永存。
#?科比00-17常規(guī)賽投籃可視化
Kobe?=?PlayerShots(shots_all,?"Kobe?Bryant")
Kobe.plot_shots()

24,就是24小時(shí)都全力以赴。
再看看今年隨隊(duì)奪冠的霍師傅(霍華德)。
#?霍華德04-20常規(guī)賽投籃可視化
howard?=?PlayerShots(shots_all,?"Dwight?Howard")
howard.plot_shots()

絕大多數(shù)都是內(nèi)線投籃,外線屈指可數(shù)。
曾經(jīng)的快樂獸,單換詹姆斯的存在,后來卻開啟了流浪生涯淪為替補(bǔ)。
最后在湖人浪子回頭,當(dāng)起了藍(lán)領(lǐng),拿到了屬于自己的總冠軍。
心中有一種莫名的感動(dòng),致敬我們的青春!!!
萬水千山總是情,點(diǎn)個(gè)? ?? 行不行。
-END-
