设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 5571|回复: 0
打印 上一主题 下一主题

缅怀科比:8 vs 24

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2020-1-29 21:05:42 |只看该作者 |倒序浏览
这是一个两年前的项目,本是我们训练营里的一道题。现开放给大家。
In Memory Of KOBE

项目代码地址:
https://gitee.com/crossin/analysis/tree/master/NBA_Programming
演示地址:
https://nbviewer.jupyter.org/urls/gitee.com/crossin/analysis/raw/master/NBA_Programming/8_vs_24.ipynb


湖人队官网宣布,将在2017年12月19日同时退役科比的8号与24号球衣,科比这位96届最传奇的巨星也将彻底地告别这个舞台。值得一提的是,这是NBA联盟历史上一支球队首次为一位球员退役两个号码的球衣,之前最具传奇色彩的是乔丹的退役,除了母队公牛队之外,效力过的奇才队也为他退役了球衣。那么在你的心目中,身披8号球衣与24号球衣的科比,哪一位更加出色呢?请通过数据分析,给出你的理由。

此次项目没有标准的解法,仅给出大致思路与参考代码。如果有其他想法,只要有合理的逻辑和数据支撑即可。



大致思路

可以尝试回答以下问题,来对比8号与24号两个时期的科比的表现

  • 哪一位的进攻能力更强?

  • 哪一位在防守端的作用更大?

  • 哪一位更愿意与队友分享球权?

  • 两位在打法选择上有什么不同吗?

  • 两位都是“不好相处”的类型吗?哪一位更愿意与主教练合作?

  • 两位的进阶数据上有什么差别?




数据说明
  • 项目所需的数据文件可以在这个仓库中找到

  • 此次项目不指定所需要的数据文件,根据需求自行选择即可

  • 数据文件简介


[td]
文件名
简介
player_season.csv球员常规赛单场比赛数据
player_playoff.csv球员季后赛单场比赛数据
player_salary.csv球员薪金数据
coach_season.csv教练常规赛平均数据
coach_playoff.csv教练季后赛平均数据
team_season.csv球队常规赛单场比赛数据
team_playoff.csv球队季后赛单场比赛数据
avg.csv球员场均数据
tot.csv球员总计数据
single.csv球员单场最佳数据
advanced_basic.csv球员进阶数据
advanced_shooting.csv球员投篮进阶数据


可能会用到的第三方库相关方法
  • pivot_table()


透视表。熟悉Excel的人应该对这个名词不会陌生。这个方法,根据一个或者多个键对数据进行聚合,并根据行和列上的分组键将数据分配到各个矩形区域中。除了DataFrame本身具有这个方法外,也具有顶级的函数pandas.pivot_table(),除了调用方式不一样,作用基本上是相同的。


In [5]: df = DataFrame({'key1': list("aaabbcdd"), 'key2': list("ABBCCCCD"), 'number': list(range(8))})

In [7]: df
Out[7]:
  key1 key2  number
0    a    A       0
1    a    B       1
2    a    B       2
3    b    C       3
4    b    C       4
5    c    C       5
6    d    C       6
7    d    D       7

In [6]: df.pivot_table(index=['key1', 'key2'])
Out[6]:
           number
key1 key2
a    A        0.0
     B        1.5
b    C        3.5
c    C        5.0
d    C        6.0
     D        7.0

如同上面所介绍的,我们提取了key1和key2列作为所生成的透视表的index,这样就很可以很清楚地看到每一层关系下的数据。


In [10]: df.pivot_table(['number'], index=['key2'])
Out[10]:
      number
key2
A        0.0
B        1.5
C        4.5
D        7.0

而上例中,我们只选用了原DataFrame的部分数据,就再次生成了一张新的透视表,这运用在开发中是非常便利的功能,我们只需要选取我们关心的columns就可以进行分析,而不需要对一张可能非常巨大的原始数据表进行操作。


In [11]: df.pivot_table(['number'], index=['key2'], margins=True)
Out[11]:
      number
key2
A        0.0
B        1.5
C        4.5
D        7.0
All      3.5

利用margins参数可以设定是否需要在获得的透视表的最后一行生成一行统计项。


In [13]: df.pivot_table(index=['key1', 'key2'], aggfunc=lambda x: x - 10)
Out[13]:
             number
key1 key2
a    A          -10
     B     [-9, -8]
b    C     [-7, -6]
c    C           -5
d    C           -4
     D           -3
     
In [16]: df.pivot_table(index=['key1', 'key2'], aggfunc=np.sum)
Out[16]:
           number
key1 key2
a    A          0
     B          3
b    C          7
c    C          5
d    C          6
     D          7

In [17]: df.pivot_table(index=['key1', 'key2'], aggfunc=np.mean)
Out[17]:
           number
key1 key2
a    A        0.0
     B        1.5
b    C        3.5
c    C        5.0
d    C        6.0
     D        7.0

上例中,展示了aggfuc这个在pivot_table中的重要参数的使用。可以传入普通的函数,得到的是每一个分组的结果集合,也可以传入带有“聚集”性质的函数,所得到的结果就是一个聚集值。


以上是关于透视表方法的简单介绍,如果想要进一步了解该方法的使用方式,具体参数的用法,请查阅官方文档

欢迎小伙伴们自由发挥,给出自己的解答。而我们也给出了一份自己的分析,详情请见下方的链接。


#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-21 21:01 , Processed in 0.022788 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部