摘要:近日各隊紛紛發布季前賽賽程,迎接新賽季。實際上,數據分析團隊對于現在的球隊已經算是標配了,無論是在球員選擇還是戰術制定上都起著重要的作用。于是,我們就借助官方數據和的繪圖函數,來看一看不同的球員都是在什么位置出手投籃的。比如林書豪就是。
作者 | Crossin先生
導讀:NBA 2018-19 賽季已經落下帷幕,猛龍擊敗勇士,成為新科冠軍球隊。近日各隊紛紛發布2019-20季前賽賽程,迎接新賽季。
我想,不如來做個 NBA 相關的數據分析案例好了。實際上,數據分析團隊對于現在的 NBA 球隊已經算是標配了,無論是在球員選擇還是戰術制定上都起著重要的作用。當下整個聯盟越來越盛行的“魔球化”打法,其實也正是基于數據分析的產物。
于是,我們就借助官方數據和 Python 的繪圖函數,來看一看不同的球員都是在什么位置出手投籃的。
01 視頻版本
這篇數據分析案例,我做了個視頻版本,對代碼做了解讀,講了運行的注意事項和一些有的沒的,供需。對于視頻制作還不是很有經驗,多包涵。(視頻里有彩蛋)
本文在案例的代碼寫完后,我把它發在了虎撲上。結果,被推薦上了首頁,25萬多次瀏覽,近800回復……感謝各位JRs賞臉!
原圖、更多球員生成的結果及完整代碼,見以下網址:
NBA出手點統計代碼:
https://gitee.com/crossin/sni...
幾十位球星生成圖:
提取碼: jbpw
02 效果展示
照例先看結果,每個點是一次投籃,藍色點是投中,紅色點是未中。挑幾個有特點的:
1. 哈登
魔球得很明顯了,長兩分這種低效率的事絕對不干
2. 西蒙斯
古典中鋒
3. 德拉贊
中投小王子
4. 字母哥
籃下都給你扣糊了!
5. 庫里
這個得放全場……
6. 科比
生涯累計圖,全方位無死角,包括籃板后負角度
下面來看具體步驟,我們以剛剛獲得本賽季冠軍戒指的林書豪作為例子。
03 獲取數據
NBA 有一個官方統計網站:stats.nba.com,上面有各種數據,可以說是一個寶藏了。
從網頁上,我沒有找到這次所需的數據。但通過一番搜索,我找到了網站的開放接口 API。相關的接口和文檔你可以從這個項目里查看:
nba_py - stats.nba.com API for python
https://github.com/seemethere...
通過以下接口,我們可以獲取某個球員在指定賽季的投籃詳細數據:
https://stats.nba.com/stats/s...
其中參數 PlayerID是查詢球員的 ID,這個 ID 可以通過在網頁上搜索球員姓名,從對應的 URL 中獲取。比如林書豪就是 202391。
https://stats.nba.com/player/...
鏈接中的兩處 2018-19是賽季參數,你可以改成其他賽季,不過我試過不能太早,大約 96 年往前就沒數據了,而且早期數據精度要差些。
其他參數可以不用管。
用 requests庫可輕松獲取結果(需加上 headers):
response = requests.get(url, headers=headers,timeout=5)
04 解析數據
返回的數據是 JSON格式,用 pandas 轉成 DataFrame 格式,方便后續處理:
data = response.json()# 獲取列名即每項投球數據的意思headers = data"resultSets"["headers"]# 獲取投球的相關數據shots = data"resultSets"["rowSet"]# 轉 DataFrameshot_df = pd.DataFrame(shots, columns=headers)
我們關心的數據就是 LOC_X、LOC_Y(出手位置)和 SHOT_MADE_FLAG(是否投中)這三列。
05 繪制投籃點
使用 matplotlib庫的散點圖繪制 scatter 方法就可以把投籃點畫出來,這個我們之前的各種案例里也用過不少次了:
made = shot_df[shot_df["SHOT_MADE_FLAG"]==1]miss = shot_df[shot_df["SHOT_MADE_FLAG"]==0]plt.scatter(miss.LOC_X, miss.LOC_Y, color="r", marker=".", alpha=0.3)plt.scatter(made.LOC_X, made.LOC_Y, color="b", marker=".", alpha=0.3)
我們通過參數設定點的大小和透明度,讓顯示更清楚。
06 繪制球場
投籃點畫出來了,不過只是這樣不夠直觀。我們再來加個球場的圖。
這個是通過 matplotlib里的 Circle、Rectangle、Arc 等方法拼出來的,沒啥特別的技術,但代碼比較繁瑣,這邊就不貼了。(只要你愿意,甚至可以用它畫出小豬佩奇)
07 添加頭像
最后,再給數據圖加上一個頭像,讓它看起來更完整。頭像地址:
https://stats.nba.com/media/p...://ak-static.cms.nba.com/wp-content/uploads/headshots/nba/latest/260x190/202391.png
文件名依然是球員的 ID,但這個地址并不是對所有球員有效,可做下異常處理。
pic = urllib.request.urlretrieve("http://stats.nba.com/media/players/230x185/202391.png")# imread 讀取的圖像可以被 matplotlib 繪制head_pic = plt.imread(pic[0])# 將球員圖片放置于右上角,并設置縮小等級以配合整個圖片img = OffsetImage(head_pic, zoom=0.6)# (x, y) 控制將球員放在你想要放的位置img.set_offset((540,640))# 添加球員圖片fig.gca().add_artist(img)
如果在你的電腦上位置不對,記得修改下 offset的值(不同系統,甚至不同編譯器都可能存在差異)。
最終效果:
獲取更多精彩內容和專業幫助,可前往:CDA數據分析研究院-12年數據科學教育品牌-引領人工智能新視界
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45187.html
摘要:如果在元素內點擊文本,就會觸發,瀏覽器會自動將焦點轉到和標簽相關的表單控件上。在用戶使用具體某種方式加入付費會員時,須閱讀并確認相關的用戶協議和使用方法。在之前,主要提供兩種元素來進行多媒體的展示,一個是標簽,另一個是標簽。 HTML Hyper Text Markup Language,超文本標記語言,不是一種編程語言,而是一種標記語言 思想:網頁中有很多數據,不同的數據可能需要不同...
摘要:本文意在創建一個得分圖,該圖同時描繪了從場上不同位置投籃得分的百分比和投籃次數,這和個人網站上的帖子類似。接下來,我們需要繪制一個包含得分圖的籃球場圖。球員照片會出現在得分圖的右下角。的解決辦法是將命中率與聯賽平均分關聯。 本文意在創建一個得分圖,該圖同時描繪了從場上不同位置投籃得分的百分比和投籃次數,這和 Austin Clemen 個人網站上的帖子 http://www.austi...
摘要:在本文中,我們將以的決策樹和隨機森林預測獲勝者。用決策樹和隨機森林預測獲勝者導入數據集并解析日期導入熊貓作為。這將幫助我們查看決策樹分類器的預測是否正確。混淆矩陣顯示了我們決策樹的正確和不正確的分類。 showImg(https://segmentfault.com/img/bVbcr26?w=750&h=383); 在本文中,我們將以Scikit-learn的決策樹和隨機森林預測NB...
摘要:可預見的未來激情賽事已經過半,阿里云視頻技術在本次世界杯中也成功落地,而這并不是結局,這是將視頻應用于體育行業以及更多其他行業的開端。 本屆世界杯互聯網直播的順利進行,離不開各大云計算廠商的支持。在這其中,阿里云是當之無愧的C位,除了優酷外,阿里云還支撐了CNTV、CCTV5客戶端,為全網70%的世界杯直播流量保駕護航。 對于世界杯這種超大觀看量級、超強影響力的重要體育賽事,阿里云一直...
閱讀 713·2023-04-25 17:54
閱讀 2972·2021-11-18 10:02
閱讀 1132·2021-09-28 09:35
閱讀 649·2021-09-22 15:18
閱讀 2847·2021-09-03 10:49
閱讀 3051·2021-08-10 09:42
閱讀 2573·2019-08-29 16:24
閱讀 1255·2019-08-29 15:08