唐宇迪《python数据分析与机器学习实战》学习笔记
28Python库分析科比生涯数据 基本的一个操作流程,没有多深入
一、数据预处理
先来看一下数据,每个样本有25个属性,包括:
A:action_type(用什么方式投的篮)
B:combined_shot_type(结合什么方式投篮)
C:game_event_id(游戏事件ID)
D:game_id(游戏ID)
E:la(投篮的经度)
F:loc_x (投篮的x坐标)
G:loc_y(投篮的y坐标)
H:lon(投篮的纬度)
I:minutes_remaining(离比赛结束还有多少分钟)
J:period(第几场)
K:playoffs(是不是季后赛)
L:season(赛季)
M:seconds_remaining(离比赛结束还有多少秒)
N:shot_distance(投篮离篮筐的的距离)
O:shot_made_flag (是不是进球了)这里就是label
P:shot_type(2分球还是3分球区域)
Q:shot_zone_area(投篮区域表示方式一)
R:shot_zone_basic(投篮区域的表示方式二)
S:shot_zone_range(投篮区域的表示方式三)
T:team_id(队伍ID)
U:team_name(队伍名字)
V:game_date(比赛时间)
W:matchup(比赛双方队伍)
X:opponent(自己所在队伍名字)
Y:shot_id(镜头ID)
label为O列:0没进,1进了,还有些缺失值这里需要去除。
导入模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import KFold
导入数据
filename= "data.csv"
raw = pd.read_csv(filename)
print (raw.shape)
(30697, 25)
缺失值处理
kobe = raw[pd.notnull(raw['shot_made_flag'])]#notnull如果不是空值就保留
print (kobe.shape)
(25697, 25)
特征样本点分布观察
alpha = 0.02
plt.figure(figsize=(10,10))
# loc_x 和 loc_y,投篮位置
plt.subplot(121)
plt.scatter(kobe.loc_x, kobe.loc_y, color='R', alpha=alpha)
plt.title('loc_x and loc_y')
# lat 和 lon,经度纬度
plt.subplot(122)
plt.scatter(kobe.lon, kobe.lat, color='B', alpha=alpha)
plt.title('lat and lon')
发现两个特征表达的投篮位置都一样,所以接下来可以任意一个。
这里保留前者xy,为了方便表达将其转换为极坐标
raw['dist'] = np.sqrt(raw['loc_x']**2 + raw['loc_y']**2)#距离计算
loc_x_zero = raw['loc_x'] == 0 #角度计算
#print (loc_x_zero)
raw['angle'] = np.array([0]*len(raw))
raw['angle'][~loc_x_zero] = np.arctan(raw['loc_y'][~loc_x_zero] / raw['loc_x'][~loc_x_zero])
raw['angle'][loc_x_zero] = np.pi / 2
还有多少分钟,多少秒结束,这两列也可以结合在一起:
raw['remaining_time'] = raw['minutes_remaining'] * 60 + raw['seconds_remaining']
快速观察数据:有些特征包含的属性太多,这里可以通过以下操作看一下包括哪些:</