数据隐私中nfl_格式化NFL数据以使用Python进行数据科学

2024-03-20 10:30

本文主要是介绍数据隐私中nfl_格式化NFL数据以使用Python进行数据科学,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据隐私中nfl

无论您最近使用哪种媒体内容(播客,文章,推文等),都可能会遇到一些对数据的引用。 无论是备份谈话要点还是对数据无处不在进行元视图,对数据及其分析的需求都很高。

作为程序员,我发现数据科学比巫术更能比巫术更精确。 我渴望获得原始数据并从中收集有用和具体的东西的能力。 多么有用的人才!

这让我开始思考数据科学家和程序员之间的区别。 数据科学家不只是可以编码的统计学家吗? 环顾四周,您会看到许多旨在帮助开发人员成为数据科学家的工具。 AWS拥​​有一整套的机器学习课程 ,专门针对将开发人员转变为专家。 Visual Studio具有内置的Python项目,只需单击一个按钮,即可创建用于分类问题的完整模板。 数十名程序员正在编写旨在使任何人都容易上手的数据科学的工具。

我以为我会清楚地吸引到数据(或黑暗)方面来招聘程序员,并通过一个有趣的项目给它一个机会:训练一个机器学习模型,以使用国家橄榄球联盟(NFL)数据集预测比赛情况。

搭建环境

虚拟环境 。 这很重要,因为如果没有环境,我将无处工作。 幸运的是,Opensource.com拥有一些很棒的资源来安装和配置安装程序。

您在这里看到的任何代码,我都可以查阅现有文档。 如果程序员熟悉一件事,那就是在浏览国外(有时非常稀疏)的文档。

获取数据

与任何现代问题一样,第一步是确保您拥有质量数据。 幸运的是,我遇到了2017年用于NFL大数据碗的一组NFL跟踪数据 。 甚至NFL也在尽力吸引数据领域中最耀眼的星星。

我需要了解的所有架构都在README中。 该练习将训练一个机器学习模型,以使用plays.csv 数据文件预测跑步(持球人保持足球状态并向低处奔跑)和传球(将球传给接收球员)。 在本练习中,我不会使用玩家跟踪数据,但是以后进行探索可能会很有趣。

首先,我需要通过将数据导入数据框来访问我的数据。 Pandas库是一个开放源代码的Python库,它提供用于轻松分析数据结构的算法。 样本NFL数据中的结构碰巧是一个二维数组(或更简单的说就是一个表),数据科学家通常将其称为数据框。 处理数据框的Pandas函数是pandas.DataFrame 。 我还将导入其他一些库,供以后使用。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib. pyplot as plt
import xgboost as xgb

from sklearn import metrics

df = pd. read_csv ( 'data/plays.csv' )

print ( len ( df ) )
print ( df. head ( ) )

格式化数据

NFL数据转储未明确指示哪些播放是奔跑(也称为急速)和哪些是传球。 因此,我必须通过一些精明的足球和推理来对进攻性比赛类型进行分类。

现在,我可以在isSTPLAY列中摆脱特殊团队的比赛。 特种球队既不是进攻也不是防守,因此与我的目标无关。

#drop st plays
df = df [ ~ df [ 'isSTPlay' ] ]
print ( len ( df ) )

略过playDescription列,我看到四分卫跪下的一些比赛,这实际上结束了一场比赛。 这通常被称为“胜利阵型”,因为这样做的目的是耗尽时间。 这些与正常的跑步比赛有很大的不同,所以我也可以放下它们。

#drop kneels
df = df [ ~ df [ 'playDescription' ] . str . contains ( "kneels" ) ]
print ( len ( df ) )

数据以正常进行游戏的季度为单位报告时间(以及每个季度的游戏时钟时间)。 就尝试预测序列而言,这是否最直观? 解决这个问题的一种方法是考虑时间间隔之间游戏玩法的差异。

当一支球队在第一节还剩一分钟的球时,是否会像在第二节还剩一分钟的球一样? 可能不是。 在两半结束时,只要花一分钟,它的作用是否相同? 所有其他条件保持不变,在大多数情况下答案可能是肯定的。

我将四分之一GameClock列从四分之一转换为一半,以秒而不是分钟表示。 我还将根据四分之一数值创建一个列。 有一些第五季度值,我认为这是加班费。 由于加班规则与正常游戏规则不同,因此我可以删除它们。

#drop overtime
df = df [ ~ ( df [ 'quarter' ] == 5 ) ]
print ( len ( df ) )

#convert time/quarters
def translate_game_clock ( row ) :
raw_game_clock = row [ 'GameClock' ]
quarter = row [ 'quarter' ]
minutes , seconds_raw = raw_game_clock. partition ( ':' ) [ :: 2 ]

seconds = seconds_raw. partition ( ':' ) [ 0 ]

total_seconds_left_in_quarter = int ( seconds ) + ( int ( minutes ) * 60 )

if quarter == 3 or quarter == 1 :
return total_seconds_left_in_quarter + 900
elif quarter == 4 or quarter == 2 :
return total_seconds_left_in_quarter

if 'GameClock' in list ( df. columns ) :
df [ 'secondsLeftInHalf' ] = df. apply ( translate_game_clock , axis = 1 )

if 'quarter' in list ( df. columns ) :
df [ 'half' ] = df [ 'quarter' ] . map ( lambda q: 2 if q > 2 else 1 )

yardlineNumber列也需要转换。 当前数据将码列列出为从1到50的值。同样,这也无济于事,因为团队不会在自己的20码列和其对手的20码列上采取相同的行动。 我将其转换为代表从1到99的值,其中,一码线最接近控球区的终点区域,而99码线最接近对手的终点区。

def yards_to_endzone ( row ) :
if row [ 'possessionTeam' ] == row [ 'yardlineSide' ] :
return 100 - row [ 'yardlineNumber' ]
else :
return row [ 'yardlineNumber' ]

df [ 'yardsToEndzone' ] = df. apply ( yards_to_endzone , axis = 1 )

如果我可以将人员数据转换成某种格式以供机器学习算法使用,则人员数据将非常有用。人员可以在给定的时间识别不同类型的技能职位。 目前在persons.offense中显示的字符串值不利于输入,因此我将把每个人员的位置转换为自己的列,以指示比赛中场上出现的数字。 国防人员稍后可能会感兴趣,以查看它是否对预测有任何结果。 现在,我只会坚持进攻。

def transform_off_personnel ( row ) :

rb_count = 0
te_count = 0
wr_count = 0
ol_count = 0
dl_count = 0
db_count = 0

if not pd. isna ( row [ 'personnel.offense' ] ) :
personnel = row [ 'personnel.offense' ] . split ( ', ' )
for p in personnel:
if p [ 2 : 4 ] == 'RB' :
rb_count = int ( p [ 0 ] )
elif p [ 2 : 4 ] == 'TE' :
te_count = int ( p [ 0 ] )
elif p [ 2 : 4 ] == 'WR' :
wr_count = int ( p [ 0 ] )
elif p [ 2 : 4 ] == 'OL' :
ol_count = int ( p [ 0 ] )
elif p [ 2 : 4 ] == 'DL' :
dl_count = int ( p [ 0 ] )
elif p [ 2 : 4 ] == 'DB' :
db_count = int ( p [ 0 ] )

return pd. Series ( [ rb_count , te_count , wr_count , ol_count , dl_count , db_count ] )

df [ [ 'rb_count' , 'te_count' , 'wr_count' , 'ol_count' , 'dl_count' , 'db_count' ] ] = df. apply ( transform_off_personnel , axis = 1 )

现在,进攻人员值由单独的列表示。

Result of reformatting offense personnel

编队描述了球员在球场上的位置,这在预测比赛结果方面似乎也具有价值。 再一次,我将字符串值转换为整数。

df [ 'offenseFormation' ] = df [ 'offenseFormation' ] . map ( lambda f : 'EMPTY' if pd. isna ( f ) else f )

def formation ( row ) :
form = row [ 'offenseFormation' ] . strip ( )
if form == 'SHOTGUN' :
return 0
elif form == 'SINGLEBACK' :
return 1
elif form == 'EMPTY' :
return 2
elif form == 'I_FORM' :
return 3
elif form == 'PISTOL' :
return 4
elif form == 'JUMBO' :
return 5
elif form == 'WILDCAT' :
return 6
elif form == 'ACE' :
return 7
else :
return - 1

df [ 'numericFormation' ] = df. apply ( formation , axis = 1 )

print ( df. yardlineNumber . unique ( ) )

最后,是时候对播放类型进行分类了。 PassResult列具有四个不同的值:I,C,S和null,分别表示不完整的传球,完整的传球,麻袋(分类为传球)和空值。 由于我已经淘汰了所有特殊的团队比赛,因此我可以假设空值是连续比赛。 因此,我将播放结果转换为一个名为play_type的列,该列由0表示运行或1表示通过。 这将是我希望算法预测的列(或标签 ,如数据科学家所说)。

def play_type ( row ) :
if row [ 'PassResult' ] == 'I' or row [ 'PassResult' ] == 'C' or row [ 'PassResult' ] == 'S' :
return 'Passing'
else :
return 'Rushing'

df [ 'play_type' ] = df. apply ( play_type , axis = 1 )
df [ 'numericPlayType' ] = df [ 'play_type' ] . map ( lambda p: 1 if p == 'Passing' else 0 )

休息一下

现在该开始预测事情了吗? 到目前为止,我的大部分工作一直在试图理解数据及其需要采用的格式,甚至在我开始进行任何预测之前。 其他人需要一分钟吗?

在第二部分中,我将对数据进行一些分析和可视化,然后将其输入到机器学习算法中,然后对模型的结果进行评分,以查看它们的准确性。 敬请关注!

翻译自: https://opensource.com/article/19/10/formatting-nfl-data-python

数据隐私中nfl

这篇关于数据隐私中nfl_格式化NFL数据以使用Python进行数据科学的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/829172

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件