NBA 球员数据分析
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython.core.pylabtools import figsize
data = pd.read_csv('./nba_2017_nba_players_with_salary.csv')
print(data) # 图1
shape_num = data.shape # (342, 38)
print(shape_num) # (342, 38)
describe_data = data.describe()
print(describe_data) # 图2
# 数据分析
# 数据相关性分析
data_cor = data.loc[:, ['RPM', 'AGE', 'SALARY_MILLIONS', 'ORB', 'TRB', 'AST', 'STL', 'BLK', 'TOV', 'PF', 'POINTS', 'GP', 'MPG', 'ORPM', 'DRPM']]
print(data_cor) # 图3
# 获取两列数据之间的相关性
corr = data_cor.corr()
plt.figure(figsize(20, 8), dpi=100)
sns.heatmap(corr, square=True, linewidths=0.1, annot=True) # linewidths=0.1 方块之间的分隔线,annot=True 方框中的数据
plt.show() # 图4
group_and_sort = data.loc[:, ["PLAYER", "RPM", "AGE", "SALARY_MILLIONS"]].sort_values(by="SALARY_MILLIONS", ascending=False)
print(group_and_sort) # 图5
# seaborn 常用的三个数据可视化方法
# 单变量
# 利用seaborn中的distplot绘图来分别看一下球员薪水、效率值、年龄这三个信息的分布情况
sns.set_style("darkgrid")
plt.figure(figsize=(10, 10))
plt.subplot(3, 1, 1)
sns.displot(data["SALARY_MILLIONS"]) # 图6
plt.ylabel("RPM")
plt.subplot(3, 1, 3)
sns.displot(data["AGE"]) # 图7
plt.ylabel("AGE")
# 使用joinplot查看年龄和薪水之间的关系
dat1 = data.loc[:, ['RPM', 'SALARY_MILLIONS', 'AGE', 'POINTS']]
sns.jointplot(x=dat1.SALARY_MILLIONS, y=dat1.AGE, kind='kde', height=8)
plt.show() # 图8
# 双变量
sns.jointplot(x=data.AGE, y=data.SALARY_MILLIONS, kind="hex")
plt.show() # 图9
# 多变量
multi_data = data.loc[:, ['RPM', 'SALARY_MILLIONS', 'AGE', 'POINTS']]
print(multi_data) # 图10
sns.pairplot(multi_data)
plt.show() # 图11
图1
图2
图3
图4
图5
图6
图7
图8
图9
图10
图11
衍生变量的一些可视化实践-以年龄为例
def age_cut(df):
if df.AGE<=24:
return "young"
elif df.AGE>=30:
return "old"
else:
return "best"
# 使用apply对年龄进行划分
data["age_cut"] = data.apply(lambda x:age_cut(x), axis=1)
print(data) # 图12
data["cut"] = 1
print(data) # 图13
# 基于年龄段对球员薪水和效率值进行分析
sns.set_style("darkgrid")
plt.figure(figsize=(10, 10),dpi=100)
plt.title("RPM and Salary")
x1 = data.loc[data.age_cut == "old"].SALARY_MILLIONS
y1 = data.loc[data.age_cut == "old"].RPM
plt.plot(x1, y1, "^")
x2 = data.loc[data.age_cut == "young"].SALARY_MILLIONS
y2 = data.loc[data.age_cut == "young"
plt.plot(x2, y2, "^")
plt.show() # 图14
multi_data2 = data.loc[:,['RPM', 'POINTS', 'TRB', 'AST', 'STL', 'BLK', 'age_cut']]
sns.pairplot(multi_data2,hue="age_cut")
plt.show() # 图15
图12
图13
图14
图15