基于python的科比职业生涯命中率分析
科比职业生涯命中率分析
数据集来自于:https://www.kaggle.com
本文章探索的问题:
- 总命中率以及每场比赛的命中率
- 各节命中率及各赛季命中率
- 2分球和3分球命中率
- 各个位置的命中率
- 主客场命中率
- 得分方式命中率
- 得分方式的使用概率
- 各个位置的出手概率
导入包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 解决中文乱码问题
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
%config InlineBackend.figure_format='svg'
读取数据
# 读取数据
data = pd.read_csv('data.csv')
# 预览数据
data.head()
data.info()
- shot_made_flag字段存在缺失,删除
- game_event_id、lat、lon、team_id、team_name、seconds_remaining、minutes_remaining、matchup无用删除
预处理
- 删除存在缺失值的样本
- 删除无用字段
- 增加主客场字段
kobe = data.drop(['game_event_id', 'lat', 'lon', 'team_id', 'team_name', 'seconds_remaining', 'minutes_remaining', 'matchup'], axis=1)
# 0代表客场,1代表主场
kobe['home'] = data['matchup'].apply(lambda x: 0 if x[4]=='@' else 1)
kobe['period_seconds_remaining'] = 60 * data['minutes_remaining'] + data['seconds_remaining']
kobe.dropna(inplace=True)
kobe['game_date'] = kobe.game_date.apply(lambda x: pd.to_datetime(x))
总命中率以及每场比赛的命中率
# 总命中率
kobe.shot_made_flag.mean()
# 每场比赛的命中率
x = kobe.pivot_table(index='game_id', values='shot_made_flag', aggfunc='mean')
# 可视化命中率变化
plt.plot(range(len(x.values)), x.values)
plt.title('科比每场命中率变化示意图')
从该图可以看出,科比每场比赛的命中率总体在0.3-0.6波动。
各节/各赛季命中率
# 职业生涯各节命中率
kobe.pivot_table(index='period', values='shot_made_flag', aggfunc='mean')
# 职业生涯各赛季命中率
season = kobe.pivot_table(index='season', values='shot_made_flag', aggfunc='mean')
fig, ax = plt.subplots()
for label in ax.xaxis.get_ticklabels():label.set_rotation(90)
plt.plot(season.index, season.values)
plt.title('科比职业生涯各赛季命中率示意图')
plt.xlabel('赛季')
plt.ylabel('命中率')
# 职业生涯各赛季各节命中率
p_1 = kobe[kobe['period'] == 1].pivot_table(index='season', values='shot_made_flag', aggfunc='mean') # 第一节
p_2 = kobe[kobe['period'] == 2].pivot_table(index='season', values='shot_made_flag', aggfunc='mean') # 第二节
p_3 = kobe[kobe['period'] == 3].pivot_table(index='season', values='shot_made_flag', aggfunc='mean') # 第三节
p_4 = kobe[kobe['period'] == 4].pivot_table(index='season', values='shot_made_flag', aggfunc='mean') # 第四节
fig, ax = plt.subplots()
plt.plot(p_1)
plt.plot(p_2)
plt.plot(p_3)
plt.plot(p_4)
for label in ax.xaxis.get_ticklabels():label.set_rotation(90)
plt.title('科比职业生涯各节命中率示意图')
plt.legend(('period 1', 'period 2', 'period 3', 'period 4'), loc='best')
plt.xlabel('赛季')
plt.ylabel('命中率')
2分球和3分球命中率
kobe.pivot_table(index='shot_type', values='shot_made_flag', aggfunc='mean')
- 2分球命中率为47.7%,3分球命中率为32.9%
各个位置的命中率
kobe.pivot_table(index='shot_zone_area', values='shot_made_flag', aggfunc='mean')
kobe.pivot_table(index='shot_zone_basic', values='shot_made_flag', aggfunc='mean')
kobe.pivot_table(index='shot_zone_range', values='shot_made_flag', aggfunc='mean')
主客场命中率
kobe.pivot_table(index='home', values='shot_made_flag', aggfunc='mean')
- 主场45.6%,客场43.6%
得分方式命中率(粗分类)
kobe.pivot_table(index='combined_shot_type', values='shot_made_flag', aggfunc='mean')
得分方式的使用概率
# 利用to_frame()将Series对象转为DataFrame对象,并重命名columns
shot_attempt = kobe.groupby(['combined_shot_type', 'action_type']).count().shot_id.to_frame('attempt')
shot_attempt['percentage'] = shot_attempt.attempt / shot_attempt.attempt.sum()
shot_attempt.groupby('combined_shot_type').sum().percentage
shot_attempt.percentage.nlargest(5)
# 可视化科比得分方式的使用概率
tmp = shot_attempt.percentage.nlargest(9).to_frame()
tmp.index = tmp.index.map(lambda x: x[1])
tmp.loc['rest'] = 1 - tmp['percentage'].sum()
plt.pie(tmp, labels=tmp.index, autopct='%.0f%%')
plt.show()
各个位置的出手概率
shot_attempt = kobe.groupby(['shot_zone_area', 'shot_zone_basic', 'shot_zone_range'])['shot_id'].count().to_frame('attempt')
shot_attempt['percentage'] = shot_attempt.attempt / shot_attempt.attempt.sum()
tmp_1 = shot_attempt.groupby('shot_zone_area').sum()
plt.pie(tmp_1['percentage'], labels=tmp_1.index, autopct='%.0f%%')
plt.show()
tmp_2 = shot_attempt.groupby('shot_zone_basic').sum()
plt.pie(tmp_2['percentage'], labels=tmp_2.index, autopct='%.0f%%')
plt.show()
tmp_3 = shot_attempt.groupby('shot_zone_range').sum()
plt.pie(tmp_3['percentage'], labels=tmp_3.index, autopct='%.0f%%')
plt.show()
基于python的科比职业生涯命中率分析相关推荐
- python毕业设计开题报告-基于python爬虫的影评情感分析研究开题报告
论文(设计)题目 基于python爬虫的影评情感分析研究开题报告 选题的背景.意义及研究现状: 研究现状: 文本情感分析又称倾向性分析.情感挖掘,主观分析或评论挖掘,是对带有情感色彩的评论文本内容进行 ...
- 基于python的城市旅游数据采集分析系统
温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从某旅游网站爬取各城市的景点旅游数据,根据旅游网的数据综合分析每个城市的热度. ...
- 基于python的Nginx日志管理分析系统
温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 本项目利用 pandas + sklearn 对 Nginx 的日志数据进行统计分析,并利用 fla ...
- 基于 Python 的招聘信息可视化分析系统
温馨提示:文末有 CSDN 平台官方提供的博主 Wechat / QQ 名片 :) 1. 项目简介 本项目利用 Python 从某招聘网站抓取海量招聘数据,进行数据清洗和格式化后存储到关系型数据库中( ...
- python气象绘图速成_基于Python气象数据处理与可视化分析
基于 Python 气象数据处理与可视化分析 张鑫 ; 曹蕾 ; 韩基良 [期刊名称] <气象灾害防御> [年 ( 卷 ), 期] 2020(027)001 [摘要] 全国综合气象信息共享 ...
- 基于Python实现个人手机定位分析
TransBigData是一个为交通时空大数据处理.分析和可视化而开发的Python包.本文就来用它实现个人手机定位分析,感兴趣的小伙伴可以了解一下 但其实交通时空大数据并不仅仅局限于交通工具产生的数 ...
- 基于python的电影数据可视化分析与推荐系统
温馨提示:文末有 CSDN 平台官方提供的博主 Wechat / QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从国外某电影网站和国内某电影评论网站采集电影数据,并对电影数据进行可视化分析, ...
- matlab机械臂工作空间代码_【ROS-Moveit!】机械臂控制探索(3)——基于python的API示例代码分析...
本文参考Moveit!官方文档. 系统:ubuntu 18.04 / 16.04 ROS:Melodic / Kinetic 概述 基于python的运动组API是最简单的MoveIt!用户接口.其中 ...
- python网络爬虫_python小知识,基于Python 的网络爬虫技术分析
在现阶段大数据的时代中,想要实现对数据的获取和分析,要先具备足够的数据源,网络爬虫技术就为其数据获取提供了良好的条件,且还能够实现对数据源的目的性采集. 在网络爬虫技术应用中,Python 脚本语言的 ...
- python数字识别kaggle论文_基于Python语言Kaggle的数据集分析
界 基于 Python 语言 Kaggle 的数 据集 分析 段 聪 聪 柴 世 一 * 渊 河 南 大 学 计 算 机 与 信 息 工 程 学 院 袁 河 南 开 封 475004 冤 揖 摘 要 ...
最新文章
- 浅说Java中的反射机制(一)
- HDU 5693 D Game 区间dp
- .Net高级技术——程序集
- Android安装包apk文件在某些版本操作系统上安装解析包出错问题的解决办法
- (一)低功耗设计目的与功耗的类型
- ssb门限_画出滤波法ssb信号调制器模型,并说明低通和高通滤波器分别得到哪个边带信号...
- 爬虫小工具合集|不会编程也能爬数据
- 计算机老师任课教师寄语,任课老师寄语大全
- android 内容提供其,Android内容提供者
- spring mvc项目在IDEA下使用jrebel热部署报错!!
- 移动开发—Less基础与安装
- vs生成命令和属性的宏
- LeetCode--042--接雨水(java版)
- c语言万能头文件用不,万能头文件不能用?
- 【D-S证据理论】学习笔记
- 使用第三方插件Curvy为unity场景快速生成运动轨迹与赛道
- linux权限不够【操作方案】
- 计算机专业英语课程整体设计,计算机专业英语的课程整体.doc
- 强化学习之混合动作空间
- Nginx企业级配置
热门文章
- 数据结构考研:随机存取、顺序存取、随机存储和顺序存储的区别/详细解释(计算机/软件工程/王道论坛)
- 基于Ubuntu的linux环境制作嵌入式SD/TF启动卡
- UniWebView 3 使用心得
- mysql基础入门(参照b站黑马程序员整理)
- win11改成win7界面的设置方法
- 8021x 获取IP信息失败,请检查锐捷认证客户端当前配置是否符合所在网络的要求,检查完毕后尝试重新认证...
- 自己动手写嵌入式操作系统
- 23个适合logo设计的常用英文字体
- Webtrends收购实时分析公司Reinvigorate
- 精通JavaScript系列目录