1. 程式人生 > 實用技巧 >NBA投籃資料視覺化,4行程式碼就能實現!

NBA投籃資料視覺化,4行程式碼就能實現!

36歲的老詹還沒有老,4座總冠軍+4次FMVP。

湖人總冠軍, Kobe! this is for u!

今天給大家介紹一個好東西~

只需4行程式碼就能實現。投籃資料視覺化

GitHub地址:

https://github.com/theccalderon/shot_chart

在PyCharm上直接安裝shot-chart庫,記得版本選1.0.0的。

最新版本是1.1.0,得分和未得分沒有明顯區分開,所以選擇安裝1.0.0版本。

大夥也可以兩個版本都下載安裝,看有什麼差異。

from shot_chart.core import *

# 2019-2020賽季
shots_2019 = make_df(untar_data(URLs.SHOTS_2019))

同樣的這位大佬也是把資料放在網路上,需要通過資料請求才能獲取到。

通過檢視原始碼(core.py),發現數據的請求地址。

地址如下,從2000-2001賽季到2019-2020賽季。

# 2000-2001賽季常規賽資料
https://nba-shot-charts.s3.amazonaws.com/shots-2000.tgz
.......................................................
# 2019-2020賽季常規賽資料
https://nba-shot-charts.s3.amazonaws.com/shots-2019.tgz

直接在瀏覽器上訪問地址,下載壓縮包,解壓得到CSV檔案。

果然是2019-2020年NBA常規賽的球員投籃資料。

統統下載下來,這樣就可以直接本地呼叫,不用擔心被牆掉。

注意:光理論是不夠的。這裡順便免費送大家一套2020最新python入門到高階專案實戰視訊教程,可以在我的Python交流圈下載

資料讀取程式碼修改為如下,其實就是pandas讀取

from shot_chart.core import *

# 2019-2020賽季
shots_2019 = make_df('shots-2019.csv')

2020賽季NBA的球隊名單,呼叫函式list_teams

from shot_chart.core import *

# 2019-2020賽季
shots_2019 = make_df('shots-2019.csv') # 球隊名單 print(list_teams(shots_2019))

得到結果如下。

可惜了LA Clippers(快船)和Milwaukee(雄鹿)。

兩大奪冠熱門球隊,被掘金和熱火幹翻船了。

今年湖人的奪冠班底,呼叫函式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'))

得到結果如下。

還附帶了出手次數,詹姆斯、戴維斯、庫茲馬、波普、格林排前五。

臥龍鳳雛(格林、波普)得一,可安天下。

昨天發揮爆表,必須給好評~

湖人2020年常規賽全隊的投籃情況,呼叫函式TeamShots。

from shot_chart.core import *

# 2019-2020賽季
shots_2019 = make_df('shots-2019.csv')

# 湖人隊2019-2020賽季投籃情況
Lakers = TeamShots(shots_2019, "LA Lakers")
Lakers.plot_shots()

果然是4行程式碼呀~

左邊的圖綠色表示投籃得分,紅色表示投籃未得分

右邊的圖橫座標表示距離縱座標表示次數綠色表示出手命中次數橙色表示投籃出手次數

FG投籃命中率,eFG真實投籃命中率。

真實投籃命中率=全場得分/[2×全場出手次數+0.44×罰球出手次數]

來看一下三旬老漢(老詹)的投籃情況吧。

from shot_chart.core import *

# 2019-2020賽季
shots_2019 = make_df('shots-2019.csv')

# 勒布朗-詹姆斯2019-2020賽季常規賽投籃視覺化
james = PlayerShots(shots_2019, "LeBron James")
james.plot_shots()

可以看出,籃下是詹姆斯的主要得分點。

03年至20年,小皇帝到詹皇的投籃資料視覺化。

from shot_chart.core import *
import pandas as pd

# 獲取圖表列名
shots_2000 = make_df('shots-2000.csv')
columns_list = [column for column in shots_2000]

# 新建一個空的dataframe
shots_all = pd.DataFrame(columns=columns_list)

# 獲取2000-2020常規賽總資料
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常規賽投籃視覺化
james = PlayerShots(shots_all, "LeBron James")
james.plot_shots()

發現圖示有點大,可以對core.py檔案修改。

在plt.scatter中新增引數s,設定大小為3。

突然發現詹皇原來也如此全面,三分、籃下、中投,就沒有短板。

24號與23號之間的傳承,曼巴永存。

# 科比00-17常規賽投籃視覺化
Kobe = PlayerShots(shots_all, "Kobe Bryant")
Kobe.plot_shots()

24,就是24小時都全力以赴

再看看今年隨隊奪冠的霍師傅(霍華德)。

# 霍華德04-20常規賽投籃視覺化
howard = PlayerShots(shots_all, "Dwight Howard")
howard.plot_shots()

絕大多數都是內線投籃,外線屈指可數。

曾經的快樂獸,單換詹姆斯的存在,後來卻開啟了流浪生涯淪為替補。

最後在湖人浪子回頭,當起了藍領,拿到了屬於自己的總冠軍。

心中有一種莫名的感動,致敬我們的青春!!!

20個CSV檔案點選這裡領取提取碼:1858