2016年4月12日星期三,科比在洛杉矶湖人队的最后一场比赛中砍下60 分,标志着他从NBA退役。利用20年来科比的进球和失误的数据,你能预测哪些投篮会落在篮框里吗?本实训主要实现:科比投篮数据可视化,包括射击精准度、赛季准确性、不同投篮距离的命中率、剩余时间是否影响准确率、不同对手的命中率、比赛节数与命中率之间的关系。

1.载入数据,函数库等
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
2. 读入数据
data = pd.read_csv("/data/shixunfiles/21979737119eb4fafd62cae509c0c571_1602468291676.csv")
3.显示大小
print("数据集大小:",data.shape)
4.数据集详细信息
print(data.info())
'''
'''
yes=0
no=0
for i in data[pd.notnull(data['shot_made_flag'])]['shot_made_flag']:if i==1.0:yes+=1else:no+=1plt.bar([0,1], [yes,no])
plt.xticks([0,1])
plt.show()
5.保存数据
data_no = data[pd.isnull(data['shot_made_flag'])]
data = data[pd.notnull(data['shot_made_flag'])]
print(data.shape)
6.创造画布并将数据显示
plt.figure(figsize = (10,10))plt.subplot(1,2,1)
#alpha为不透明度,loc_x,loc_y为科比投篮的位置
plt.scatter(data.loc_x,data.loc_y,color ='g',alpha = 0.05)
plt.title('loc_x and loc_y')plt.subplot(1,2,2)
#lat为纬度,lon为经度
plt.scatter(data.lon,data.lat,color ='b',alpha = 0.05)
plt.title('lat and lon')plt.show()data['remain_time'] = data['minutes_remaining']*60 + data['seconds_remaining']
data['remain_time'][:5]import matplotlib.cm as cm
plt.figure(figsize=(20,10))# data.groupyby(feature),是将数据根据feature里的类进行分类
def scatterbygroupby(feature):alpha = 0.1gb = data.groupby(feature)cl = cm.rainbow(np.linspace(0,1,len(gb)))for g,c in zip(gb,cl):plt.scatter(g[1].loc_x,g[1].loc_y,color = c,alpha = alpha)
# 画图对比三种投篮位置
plt.subplot(1,3,1)
scatterbygroupby('shot_zone_basic')
plt.title('shot_zone_basic')plt.subplot(1,3,2)
scatterbygroupby('shot_zone_range')
plt.title('shot_zone_range')plt.subplot(1,3,3)
scatterbygroupby('shot_zone_area')
plt.title('shot_zone_area')
plt.show()
7.去掉如比赛id,投篮id等无关特征
drops = ['combined_shot_type','shot_id', 'team_id', 'team_name', 'shot_zone_area', 'shot_zone_range', 'shot_zone_basic', \'matchup', 'lon', 'lat', 'seconds_remaining', 'minutes_remaining', \'shot_distance', 'game_event_id', 'game_id', 'game_date','season']
for drop in drops:data = data.drop(drop, 1)
data.head()
a = ['action_type', 'shot_type', 'opponent']
for i in a:#使用one-hot编码,将a中的特征里的属性值都当作新的特征附在数据的列上,特征名为前缀prefix加上该属性名data = pd.concat([data, pd.get_dummies(data[i], prefix=i)], 1)data = data.drop(i, 1) #0-行,1-列
data.head()
data.to_csv("./data_processed.csv", encoding="utf-8-sig", mode="w", header=True, index=False)
data = pd.read_csv("data_processed.csv")
data_label = data['shot_made_flag']
#读入数据
data = pd.read_csv("data_processed.csv")
#显示大小
print("数据集大小:",data.shape)
# 数据集详细信息
print(data.info())
data_feature = data.drop('shot_made_flag',1)
data_label = data['shot_made_flag']
data_label.shape
data_label = np.array(data_label)
data_label.shape
8.进行数据标准化
#### 上述cell的答案
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data_feature = scaler.fit_transform(data_feature)
data_feature = pd.DataFrame(data_feature)
data_feature.head()
data_feature.to_csv("./data_feature_standard.csv", encoding="utf-8-sig", mode="w", header=True, index=False)
data_feature = pd.read_csv("data_feature_standard.csv")
#### 载入数据和标签
knn_data = data_feature
knn_label = data_label
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(knn_data,knn_label, random_state=2020, test_size=0.25)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
score = knn.score(X_train, y_train)
print('训练数据集的准确率:{:.3}%'.format(score*100))
score = knn.score(X_test, y_test)
print('测试数据集的准确率:{:.3}%'.format(score*100))
# 运行时间较长,请耐心等待
# 交叉验证
from sklearn.model_selection import cross_val_score
from time import time
import datetime
k_range = range(1,21,2)
cv_scores = []
time0 = time()
# 遍历1到21的分类数,得到每个分类数下的分数
for n in k_range:print(n)knn = KNeighborsClassifier(n_neighbors=n)scores = cross_val_score(knn,X_train,y_train,cv=10,scoring='accuracy')cv_scores.append(scores.mean())
print('计算所用时长:%s' % (datetime.datetime.fromtimestamp(time()-time0).strftime("%M:%S:%f")))
print('最高准确率:',max(cv_scores),',对应的k值为:',k_range[cv_scores.index(max(cv_scores))])
plt.plot(k_range,cv_scores)
plt.xlabel('K')
plt.ylabel('Accuracy')
plt.show()
# 进一步
k_range = range(17,23,2)
cv_scores = []
time0 = time()
for n in k_range:print(n)knn = KNeighborsClassifier(n_neighbors=n)scores = cross_val_score(knn,X_train,y_train,cv=10,scoring='accuracy')cv_scores.append(scores.mean())
print('计算所用时长:%s' % (datetime.datetime.fromtimestamp(time()-time0).strftime("%M:%S:%f")))
print('最高准确率:',max(cv_scores),',对应的k值为:',k_range[cv_scores.index(max(cv_scores))])
plt.plot(k_range,cv_scores)
plt.xlabel('K')
plt.ylabel('Accuracy')
plt.show()
9.测试集评估
knn = KNeighborsClassifier(n_neighbors=19)
knn.fit(X_train, y_train)
score = knn.score(X_train, y_train)
print('训练数据集的准确率:{:.3}%'.format(score*100))
score = knn.score(X_test, y_test)
print('测试数据集的准确率:{:.3}%'.format(score*100))
# ROC
from sklearn.metrics import roc_curve, auc, roc_auc_score
from sklearn.preprocessing import label_binarize
# y_test_hot = label_binarize(y_test, classes=(0, 1))
knn_y_score = knn.predict_proba(X_test)
knn_fpr, knn_tpr, _ = roc_curve(y_test,knn_y_score[:,1], pos_label=1)
plt.plot(knn_fpr, knn_tpr,label='micro-average ROC curve',color='g', linewidth=4)
plt.plot([0, 1], [0, 1], 'k--', lw=2,c='r')
plt.title('knn roc')
plt.show()
cnn_data = np.asarray(data_feature)
cnn_label = np.asarray(data_label)
cnn_data.shape
x_train = cnn_data[:20000]
y_train = cnn_label[:20000]
x_test = cnn_data[20000:]
y_test = cnn_label[20000:]
from keras import models
from keras import layers
model = models.Sequential()
## 输入层,激活函数为relu
model.add(layers.Dense(16,activation='relu',input_shape=(95,)))
## 中间层,激活函数为relu
model.add(layers.Dense(16,activation='relu'))
## 输出层,维数为1
model.add(layers.Dense(1,activation='sigmoid'))
model.summary()
model.compile(optimizer = 'rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
x_val = x_train[:7000]
partial_x_train = x_train[7000:]y_val = y_train[:7000]
······
10.设置中间层不同的节点数,不同的迭代次数取最好的训练结果参数
for num1 in nums1:for num2 in nums2:for epoch in epochs:model = models.Sequential()model.add(layers.Dense(num1,activation='relu',input_shape=(95,)))model.add(layers.Dense(num2,activation='relu'))model.add(layers.Dense(1,activation='sigmoid'))model.compile(optimizer = 'rmsprop',loss='binary_crossentropy',metrics=['accuracy'])history = model.fit(x_train,y_train,epochs=epoch,batch_size=512)results = model.evaluate(x_test,y_test)if best_result<results[1]:best_result = results[1]best_param = []best_param.append(num1)best_param.append(num2)best_param.append(epoch)
print('最高的准确率:',best_result)
print('最好的参数:',best_param)
model = models.Sequential()
model.add(layers.Dense(16,activation='relu',input_shape=(95,)))
model.add(layers.Dense(32,activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))
model.compile(optimizer = 'rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
history = model.fit(x_train,y_train,epochs=14,batch_size=512)
results = model.evaluate(x_test,y_test)
resultsmodel.save('cnn_model.h5')
# 载入
from keras.models import load_model
model = load_model('cnn_model.h5')
# 绘制混淆矩阵
from sklearn.metrics import confusion_matrix
y_pred = model.predict(x_test)
y_pred = y_pred.reshape(-1)
for i,pred in enumerate(y_pred):if pred>0.5:y_pred[i]=1.0else:y_pred[i]=0.0
print(y_pred.shape)
print(y_test.shape)# ROC
from sklearn.metrics import confusion_matrix
from sklearn.metrics import roc_curve, auc, roc_auc_score
model_y_score = model.predict_proba(x_test)
model_y_score = model_y_score.reshape(-1)
model_fpr, model_tpr, _ = roc_curve(y_test,model_y_score, pos_label=1)
plt.plot(model_fpr, model_tpr,label='micro-average ROC curve',color='g', linewidth=4)
plt.plot([0, 1], [0, 1], 'k--', lw=2,c='r')
plt.title('model roc')
plt.show()# AUC
model_auc = auc(model_fpr, model_tpr)
model_auc

Python-科比投篮预测相关推荐

  1. 【头歌】科比投篮预测——可视化与探索性数据分析(一)

    第1关:投篮位置 import matplotlib.pyplot as plt import pandas as pd pd.set_option('display.max_columns', 10 ...

  2. 科比投篮预测——可视化与探索性数据分析(一)

    第1关:投篮位置 本关任务:从数据中,我们无法看出特征lat,lon和loc_x,loc_y的区别,所以我们绘制一个一行两列的两个散点图,表示loc_x,loc_y,lat,lon的关系. impor ...

  3. 科比投篮预测——可视化与探索性数据分析(二)

    第1关:射击精准度 本关任务:绘制一个散点图,表示不同进攻方式与命中率之间的关系,具体图形示例请查看测试说明. import pandas as pd import matplotlib.pyplot ...

  4. 科比投篮预测,可视化与探索性数据分析(二)

    第一关: import pandas as pd import matplotlib.pyplot as plt pd.set_option('display.max_columns', 1000) ...

  5. 数据分享 | LSTM神经网络架构和原理及其在Python中的预测应用(附视频)

    本文约2800字,建议阅读10+分钟 本文与你分享如何使用长短期记忆网络(LSTM)来拟合一个不稳定的时间序列. 长短期记忆网络--通常称为"LSTM"--是一种特殊的RNN递归神 ...

  6. 用python做时间序列预测一:初识概念

    用python做时间序列预测一:初识概念 利用时间序列预测方法,我们可以基于历史的情况来预测未来的情况.比如共享单车每日租车数,食堂每日就餐人数等等,都是基于各自历史的情况来预测的. 什么是时间序列? ...

  7. Python二手房价格预测(二)——数据处理及数据可视化

    系列文章目录 数据获取部分:Python二手房价格预测(一)--数据获取 文章目录 系列文章目录 一.数据清洗 二.数据可视化 总结 一.数据清洗 1.先导入需要的库: import pandas a ...

  8. Python ELM模型预测美国10个商店3049个商品销售量 ANN人工神经网络

    问题描述 美国有10个商店,每个商店有3049个商品,统计了1914天内各个商品的价格和销售数量,以及每天的属性(节日,打折活动等),通过构建非时序模型预测1914天-1941天各个商品销售数量,使用 ...

  9. Python时间序列LSTM预测系列教程(6)-单变量

    单变量LSTM预测模型(6) 教程原文连接 前置教程: Python时间序列LSTM预测系列教程(1)-单变量 Python时间序列LSTM预测系列教程(2)-单变量 Python时间序列LSTM预测 ...

  10. Python二手车价格预测(二)—— 模型训练及可视化

    系列文章目录 一.Python数据分析-二手车数据获取用于机器学习二手车价格预测 二.Python二手车价格预测(一)-- 数据处理 文章目录 系列文章目录 前言 一.明确任务 二.模型训练 1.引入 ...

最新文章

  1. [BZOJ] 1634: [Usaco2007 Jan]Protecting the Flowers 护花
  2. c++入门之浅入浅出类——分享给很多想形象理解的人
  3. 揭秘微信「扫一扫」识物为什么这么快?
  4. Facebook开源计算机视觉目标检测平台Detectron
  5. aix 卸载mysql_AIX 删除数据库及集群软件
  6. 非名校学生如何进入一二线互联网公司
  7. numpy 矩阵 秩_一文读懂 NumPy 及应用
  8. vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb
  9. Java API For WebSocket(七)Java EE环境
  10. 三菱伺服自动调谐_三菱MR-J3-60B-RJ004 更为先进的实时自动调谐通过设定响应值,全闭环控制型驱动器 MR-J3-60B-RJ004 - 广州凌控...
  11. java 睡眠时间_java中sleep()的用法(毫秒)
  12. 360随身WiFi取消登录与欢迎界面
  13. md5 java实现与在线工具结果不符_「md5在线解密」使用MD5在线加解密工具,对汉字进行加密,得到不同的结果 - seo实验室...
  14. 电脑登陆出现此工作站和主域间的信任关系失败
  15. iOS 判断系统版本
  16. Day 256/300 前端如何启动PHP后端项目
  17. 虚幻引擎的像素流技术:边缘计算与RTC架构的设计思路
  18. 开启了Kerberos的Kafka客户端配置
  19. In the last ten years (Superman?)
  20. 你了解Java应用开发中的注入攻击吗?

热门文章

  1. 多种语言打印Hello World
  2. 网页精美动效/动画制作 按钮鼠标悬浮动效基础 01《炫彩网页 iVX 无代码动效/动画制作》
  3. Ubuntu下安装UDK
  4. 北通G3游戏手柄开箱体验,原来手游高手都是这么成就的
  5. 元宇宙需要“基建狂魔”
  6. php网页qq客服代码,qq客服代码,网页QQ在线客服代码
  7. msdia140.dll 已加载,但对DllRegisterServer 的调用失败, 错误代码: 0x80070005
  8. 服务器集成显卡性能,主流显卡参数和性能对比
  9. Transformer——理论篇
  10. McAfee Endpoint Security 10.6卸载