我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第4篇文章,点击查看活动详情
注意:本案例使用 Jupyter NotebookJupyterNotebook 进行案例演示,数据集为NBA球员信息数据集。本项目将进行完整的数据分析演示。数据集相关介绍请参考本系列文章:【数据处理】Seaborn-NBA数据分析案例(1) - 掘金 (juejin.cn)
1. 衍生变量的可视化实践
本节,我们继续使用NBA球员信息数据集案例进行更深入的数据处理。
所谓衍生变量,就是在已有的数据集里想要生成新的变量,例如:把球员按年龄分为老中青三代,可以借助定义一个函数,再利用apply的方式,生成新的变量。
1.1 自定义函数
首先,我们需要将NBA球员年龄根据岁数划分为三个类别:
- 为
- 为
- 为
具体代码如下所示:
def age_cut(df):
"""
年龄划分
"""
if df.AGE <= 24:
return "young"
elif df.AGE >= 30:
return "old"
else:
return "best"
1.2 数据切分
我们接下来需要调用上一步定义的函数,对传入数据的AGE列进行切分,然后将其添加到原数据集中,作为新的一列(age_cut)。此处我们使用了apply方法。语法如下所示:
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwargs):
-
apply()方法是用来调用一个函数(Python method),让此函数对数据对象进行批量处理。 -
func:函数或 lambda 表达式,应用于每行或者每列 -
axis:{0 or ‘index’, 1 or ‘columns’}, 默认为0- 0 or ‘index’: 表示函数处理的是每一列
- 1 or ‘columns’: 表示函数处理的是每一行
具体代码如下所示:
NBA["age_cut"] = NBA.apply(lambda x:age_cut(x), axis=1)
NBA.head()
运行结果如下图所示:
可以看出在表格最后一列新增了age_cut列。
1.3 基于年龄段对球员薪水和效率值进行分析
接下来,我们要对分类好的年龄段球员进行数据分析,也就是我们要拿到指定数据对应的相关信息。例如: 如果我们想拿到所有满足NBA.age_cut=="best"的SALARY_MILLIONS,应该怎么操作呢?
我们可以使用索引来获取到每类球员的薪水信息,代码如下所示:
# 拿到所有满足NBA.age_cut=="best"的SALARY_MILLIONS
NBA.loc[NBA.age_cut=="best"].SALARY_MILLIONS
运行结果:我们获取了所有年龄段属于best类的球员薪水值。
最后,我们将进行数据可视化,将不同类别球员的薪水信息汇总到一张图上,用散点图来展示。
具体代码如下所示:
# 基于年龄段对球员薪水和效率值进行分析
sns.set_style("darkgrid")
plt.figure(figsize=(10,10), dpi=100)
plt.title("RPM and Salary")
x1 = NBA.loc[NBA.age_cut=="old"].SALARY_MILLIONS
y1 = NBA.loc[NBA.age_cut=="old"].RPM
plt.plot(x1,y1,'^')
x2 = NBA.loc[NBA.age_cut=="best"].SALARY_MILLIONS
y2 = NBA.loc[NBA.age_cut=="best"].RPM
plt.plot(x2,y2,'.')
x3 = NBA.loc[NBA.age_cut=="young"].SALARY_MILLIONS
y3 = NBA.loc[NBA.age_cut=="young"].RPM
plt.plot(x3,y3,'.')
运行结果如下所示:下图中我们可以看出不同年龄段球员的薪资分布,我们可以通过改图判断大体趋势,方便进一步做深入的数据分析。
第二个可视化,我们希望以age_cut作为标签对球员的信息进行多变量分类显示:
mult_data2 = NBA.loc[:,['RPM','POINTS','PACE','AST','age_cut']]
sns.pairplot(mult_data2, hue='age_cut') # 以age_cut作为标签进行分类显示,以不同颜色显示
plt.savefig("./分类.png")
运行结果如下所示:以age_cut作为标签,分不同颜色进行显示。