【数据处理】Seaborn-NBA数据分析案例(3)

841 阅读3分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第4篇文章,点击查看活动详情

注意:本案例使用 Jupyter NotebookJupyterNotebook 进行案例演示,数据集为NBA球员信息数据集。本项目将进行完整的数据分析演示。数据集相关介绍请参考本系列文章:【数据处理】Seaborn-NBA数据分析案例(1) - 掘金 (juejin.cn)

1. 衍生变量的可视化实践

本节,我们继续使用NBA球员信息数据集案例进行更深入的数据处理。

所谓衍生变量,就是在已有的数据集里想要生成新的变量,例如:把球员按年龄分为老中青三代,可以借助定义一个函数,再利用apply的方式,生成新的变量。

1.1 自定义函数

首先,我们需要将NBA球员年龄根据岁数划分为三个类别:

  • AGE<=24AGE <= 24youngyoung
  • AGE>=30AGE >= 30oldold
  • 30<AGE<=2430 < AGE <= 24bestbest

具体代码如下所示:

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列。

image.png

1.3 基于年龄段对球员薪水和效率值进行分析

接下来,我们要对分类好的年龄段球员进行数据分析,也就是我们要拿到指定数据对应的相关信息。例如: 如果我们想拿到所有满足NBA.age_cut=="best"的SALARY_MILLIONS,应该怎么操作呢?

我们可以使用索引来获取到每类球员的薪水信息,代码如下所示:

# 拿到所有满足NBA.age_cut=="best"的SALARY_MILLIONS
NBA.loc[NBA.age_cut=="best"].SALARY_MILLIONS

运行结果:我们获取了所有年龄段属于best类的球员薪水值。

image.png

最后,我们将进行数据可视化,将不同类别球员的薪水信息汇总到一张图上,用散点图来展示。

具体代码如下所示:

# 基于年龄段对球员薪水和效率值进行分析
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,'.')

运行结果如下所示:下图中我们可以看出不同年龄段球员的薪资分布,我们可以通过改图判断大体趋势,方便进一步做深入的数据分析。

image.png

第二个可视化,我们希望以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作为标签,分不同颜色进行显示。

image.png