不知不觉,老大已经走了1000天了,正好这个星期的数据分析的课就是科比投篮可视化,让我一起来分享一下吧。
对照列表机翻,仅供参考
action_type 进攻方式(更具体)
combined_shot_type 进攻方式
game_event_id 比赛时间id
game_id 比赛ID
lat 投篮点
loc_x 投篮点
loc_y 投篮点
lon 投篮点
minutes_remaining 单节剩余时间(分钟)
period 表示第几节
playoffs 是否是季后赛
season 赛季
seconds_remaining 剩余时间(秒)
shot_distance 投篮距离
shot_made_flag 是否进球
shot_type 两分球或三分球
的【‘ 投篮区域
shot_zone_basic 投篮区域(更具体)
shot_zone_range 投篮范围
team_id 球队ID
team_name 球队名称
game_date 比赛日期
matchup 比赛双方
opponent 对手
shot_id 投篮ID
步骤1
导包:import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
步骤二:读取数据(使用PY,EXCEL皆可)
data1=pd.read_csv('./data.csv')
- 读取列出数据前5条
data1.head()
- 整理清洗数据(空值、异常值等)
d1=data1[data1['shot_made_flag'].notnull()]
步骤3:
- 数据可视化
参考下图绘制投篮位置散点图,加上图例标签
plt.figure(figsize=(15,30))
plt.scatter(data=f1, x='loc_x', y='loc_y')
plt.show()
还有一种是有颜色的
from turtle import color
plt.figure(figsize=(15,30))
bankshot=d1[d1['combined_shot_type']=='Bank Shot']
dunk=d1[d1['combined_shot_type']=='Dunk']
hookshot=d1[d1['combined_shot_type']=='Hook Shot']
jumpshot=d1[d1['combined_shot_type']=='Jump Shot']
layup=d1[d1['combined_shot_type']=='Layup']
tipshot=d1[d1['combined_shot_type']=='Tip Shot']
plt.scatter(bankshot.loc_x,bankshot.loc_y,color='grey')
plt.scatter(dunk.loc_x,dunk.loc_y,color='k')
plt.scatter(hookshot.loc_x,hookshot.loc_y,color='y')
plt.scatter(jumpshot.loc_x,jumpshot.loc_y,color='g')
plt.scatter(layup.loc_x,layup.loc_y,color='r')
plt.scatter(tipshot.loc_x,tipshot.loc_y,color='b')
plt.title('投篮位置')
c1=['跳投','上篮','扣篮','补篮','勾手','擦板']
plt.legend(c1)
plt.show()
这是matplotlib的方法还有一种seaborn的但是不好看
plt.figure(figsize=(40,20))
sns.relplot(data=f1, x='loc_x', y='loc_y',hue='combined_shot_type')
plt.show()
- 参考下图绘选手出手方式(次数)、投篮命中率、出售距离的柱状统计图
g1=d1.groupby(d1['combined_shot_type']).count()['action_type'].sort_values(ascending=False)
plt.bar(c1,g1)
plt.ylabel('进攻次数')
plt.xlabel('进攻方式')
plt.show()
-
m1=d1['shot_zone_basic'].value_counts().plot.barh()
b = np.array([0,1,2,3,4,5,6])
n1=['后场','左边底线三分','右边底细三分','除进攻有理区外的禁区','底线之外的三分','进攻有理区','中距区']
plt.yticks(b,('后场','左边底线三分','右边底细三分','除进攻有理区外的禁区','底线之外的三分','进攻有理区','中距区'))
plt.xlabel('投篮次数')
plt.title('科比在各区域投篮')
plt.show()
-
好了就这么多,也希望老大可以给你们力量!