【已更新】2024美赛C题代码教学思路数据处理数学建模分析Momentum in Tennis

问题一完整的代码已给出,预计2号晚上或者3号凌晨全部给出。

代码逻辑如下:
C题第一问要求我们开发一个模型,捕捉得分时的比赛流程,并将其应用于一场或多场比赛。你的模型应该确定哪名球员在比赛的特定时间表现得更好,以及他们的表现有多好。那么换句话说,就是评价球员在比赛期间的一个实时的状态,
因此对于这个问题求解的关键在于如何从给出的数据中提取特征,而不是侧重于套用模型进行评价
在于我们需要根据提供的数据,分析出选手在场上的心态,体能的实时状态,随后根据提取出的选手特征对选手的表现进行评价,最后的结果会抽象成为一个数值用于表现选手在某一时刻下的表现得分,根据得分的差别反应选手的表现好坏程度

部分代码可视化图如下:

【腾讯文档】2024美赛C题详情docs.qq.com/doc/DVVp3WFVmTERTTlhC

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

核心代码如下:

数据预处理部分:

数据预处理

Convert elapsed_time to timedelta

match_data[‘elapsed_time_td’] = pd.to_timedelta(match_data[‘elapsed_time’])

Calculate the time difference in seconds within each match_id group

match_data[‘time_diff’] = match_data.groupby(‘match_id’)[‘elapsed_time_td’].diff().dt.total_seconds()

Fill NaN values with the first elapsed_time value in each group, converted to seconds

match_data[‘time_diff’] = match_data.groupby(‘match_id’)[‘time_diff’].fillna(
match_data[‘elapsed_time_td’].dt.total_seconds()
)

Show the updated dataframe to verify changes

match_data[[‘match_id’, ‘elapsed_time’, ‘time_diff’]].head()

Group by [‘match_id’, ‘set_no’, ‘game_no’] and collect the corresponding ‘p1_points_won’, ‘p2_points_won’ into lists

grouped_data = match_data.groupby([‘match_id’, ‘set_no’, ‘game_no’])[[‘p1_points_won’, ‘p2_points_won’]].apply(lambda x: x.values.tolist()).reset_index(name=‘points_won_list’)

Convert the grouped data to a list of lists as requested

points_won_lists = grouped_data[‘points_won_list’].tolist()

Convert the ‘p1_points_won’, ‘p2_points_won’ values into their differences

points_diff_lists = [[p1 - p2 for p1, p2 in match] for match in points_won_lists]

Display the first few elements to verify the transformation

points_diff_lists[:5]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

def Calculate_Performance(df):
df[‘p1’] = df[‘time_diff’]/100 + df[‘p1_sets’]*0.5 + df[‘p1_games’]*0.1 + df[‘p1_ace’] + df[‘p1_winner’]*0.5 - df[‘p1_unf_err’]*0.5
df[‘p2’] = df[‘time_diff’]/100 + df[‘p2_sets’]*0.5 + df[‘p2_games’]*0.1 + df[‘p2_ace’] + df[‘p2_winner’]*0.5 - df[‘p2_unf_err’]*0.5

for index in range(len(df)):if index == 0:if df.at[index, 'point_victor'] == 1:df.at[index, 'p1'] += 0.5else:df.at[index, 'p2'] += 0.5continueif df.at[index, 'point_victor'] == 1:if df.at[index-1, 'point_victor'] == 1:df.at[index, 'p1'] += 0.5 * 1.2else:df.at[index, 'p1'] += 0.5else:if df.at[index-1, 'point_victor'] == 1:df.at[index, 'p2'] += 0.5else:df.at[index, 'p2'] += 0.5 * 1.2return df['p1'], df['p2']

调用函数并获取结果

p1_scores, p2_scores = Calculate_Performance(match_data[match_data[‘match_id’]==‘2023-wimbledon-1301’])
p1_scores, p2_scores

在这里插入图片描述

问题分析
问题围绕2023年温网男单决赛中,20岁的西班牙新星卡洛斯·阿尔卡拉兹击败36岁的诺瓦克·德约科维奇的比赛。德约科维奇自2013年以来首次在温布尔登输球,结束了他在大满贯赛事中的杰出表现。这场比赛被认为是一场精彩的较量,经历了多次势头的转换,这些势头转换通常被归因于“动量”。在体育运动中,团队或球员可能会在比赛/比赛中感觉到自己有动量,或“力量/力量”,但很难衡量这种现象。此外,还不清楚比赛中的各种事件是如何产生或改变势头的。

提供了2023年温布尔登网球公开赛前两轮之后所有男子比赛的每一分数据。您可以自行选择包含其他玩家信息或其他数据,但必须完整记录来源。

也就是说,我们需要通过对已有的数据进行处理,找到其中包含动量特征的因素,构建一个模型去衡量这些因素是否使得我们选手的表示更加生猛,下面是我们的一个具体思路。

数据预处理
确保每个比赛的数据完整性,包括比赛时间、比分、发球情况等。
转换时间格式,统一比分表示方法。
将数据转换成可处理的数值数据,如在玩家的得分中,包含了AD这一项,这不利于我们后续的数据处理,可以将其转换成50

特征提取
目标是找到可以为运动员积累获胜“动量”的特征,可以从以下角度考虑是否存在连胜的“动量”。
比分变化:记录每一分后的总比分变化。
发球优势:统计每位运动员的发球局中赢得的分数比例。
破发点:记录每位运动员赢得和失去的破发点数量。
连续得分:运动员连续得分的次数,反映比赛势头。
回球成功率:根据返回深度和速度评估回球成功率。
运动员移动距离:反映体能和比赛中的活跃度。

模型设计
使用逻辑回归或随机森林等机器学习方法来评估每位运动员的表现。模型的输入是上述特征,输出是每位运动员的表现评分。

模型应用
选择具体的比赛数据应用模型,比较不同运动员的表现评分。

结果分析
根据模型的评分结果,分析哪位运动员在比赛中表现更好及其显示出的优势。

接下来,我们将开始实现这些步骤。首先进行数据预处理和特征提取。我们将从提供的比赛数据中提取关键特征。左图展示了比赛中每个得分点后选手之间比分差异的变化。这可以帮助我们理解比赛的势头和选手间的竞争状态。右图展示了比赛过程中两位选手总移动距离的变化,反映了选手的体能消耗和场上活跃度。
在这里插入图片描述

下图通过计算选手1在其发球局中赢得的分数比例,我们绘制了一个折线图来展示选手在不同round下的总共的移动距离以及得分比例。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/673298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI-数学-高中-24-三角函数一般形式的各参数含义

原作者视频:三角函数】12三角函数一般形式的各参数含义(易)_哔哩哔哩_bilibili 1.函数中的A标识符:表示曲线中间平衡位置的振幅,值域为正负A:[-A,A]。 2.函数中的B标识符:决定曲线纵向上下平移…

Name or service not known问题解决和分析过程解析

目 录 一、问题描述 二、问题查处过程 (一)为何不能识别到bogon (二)为何会出现bogon (三)能不能更改bogon (四)能识别其他host的名字 三、问题分析 四、问题解决 …

git 克隆拉取代码出现私钥权限问题。

问题反馈: rootdd:~/android/boost-1.74-for-android-r20b# git clone https://github.com/liulilittle/boost-1.74-for-android-r20b.git Cloning into boost-1.74-for-android-r20b... WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0777 for /root/…

C++多态,父类有virtual, 子类继承时, 会拷贝父类的虚函数表吗

在 C 中,在父类中声明的虚函数会在子类中被继承,并且子类中所生成的对象如果重写了父类中的虚函数,其虚函数表将被更新以指向重写后的函数地址。因此,子类不需要再次拷贝一份父类的虚函数表,可以直接继承父类的虚函数表…

基于 SpringBoot 和 Vue.js 的权限管理系统部署教程

大家后,我是 jonssonyan 在上一篇文章我介绍了我的新项目——基于 SpringBoot 和 Vue.js 的权限管理系统,本文主要介绍该系统的部署 部署教程 这里使用 Docker 进行部署,Docker 基于容器技术,它可以占用更少的资源,…

C#面:Error 和 Exception 的区别

在C#中,Error 和 Exception 是两个不同的概念。 Error(错误): 是指在程序运行过程中发生的严重问题,它表示了一个不可恢复的错误,通常是由于系统级别的问题导致的。例如,内存溢出、栈溢出、死…

【Android】代码混淆简单介绍

1.代码混淆的目的 1.1增加代码的安全性和保护知识产权。当开发人员编写的代码被编译成可执行文件后,存在被反编译的风险。通过进行代码混淆,可以使得反编译后的代码难以理解和分析,从而增加攻击者逆向工程的难度。 1.2代码混淆通过对代码进…

C++进阶--C++11包装器

目录 一、function包装器1.1 function包装器的概念1.2 function包装器实例化(统一类型)1.4 function包装器的意义 二、bind包装器2.1 bind包装器的概念2.1.1 bind包装器2.1.2 调用bind的一般形式 2.2 bind包装器绑定固定参数2.2.1 无意义的绑定2.2.2 绑定…

Redis系列——Lua脚本和redis事务的应用

介绍 Lua脚本 背景 Redis是一种抽象数据类型的特定领域语言,由各种命令组成。大多数命令专门用于操作不通的数据类型。每次发送命令均需要执行至此网络请求。所以Redis提供了一个编程接口,支持服务器执行用户自定义的任意脚本。有助于减少网络流量&am…

linux文件的IO函数

open函数: 作用:打开或者新建一个文件 原型: int open(const char*pathname,int flags); int open(const char*pathname,int flags,mode_t mode); 参数: pathname:路径 flags:1-> O_RONLY 只读打开 2 -> O_WONLY只写打开 3->…

83 CTF夺旗-Python考点SSTI反序列化字符串

这里写目录标题 CTF各大题型简介演示案例:CTF夺旗-Python-支付逻辑&JWT&反序列化CTF夺旗-Python-Flask&jinja2&SSTl模版注入CTF夺旗-Python-格式化字符串漏洞&读取对象 涉及资源: 我们这篇文章主要讲的是CTF在web渗透测试方向的3个考点 CTF各大…

elementui常用组件-个人版(间断更新)

Dialog 对话框 el-dialog <el-dialogtitle"提示":visible.sync"dialogVisible"width"30%":before-close"handleClose"><span>这是一段信息</span><span slot"footer" class"dialog-footer"…

代码随想录算法训练营|day25

第七章 回溯算法 216.组合总和III17.电话号码的字母组合代码随想录文章详解总结 216.组合总和III 回溯&#xff1a;i宽度约束&#xff0c;sum深度约束 func combinationSum3(k int, n int) [][]int {res : [][]int{}path : []int{}var help func(startIndex, sum, k, n int)h…

开源一套直播平台

博主开源一套直播平台,私信博主可获取源码 直播平台系统界面介绍

微信小程序(三十六)事件传参

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.传参步骤 2.传参接收解构步骤 源码&#xff1a; index.wxml <button type"primary" bind:tap"onclick" mark:index"{{0}}" mark:remb"{{1}}" class"But&quo…

产品经理--分享在项目中产品与研发之间会遇到的问题 在面试这一岗位时,面试官常问的问题之一,且分享两大原则来回答面试官这一问题

目录 一.STAR原则 1.1 简介 1.2 如何使用 1.3 举例说明 二.PDCA原则 2.1 简介 2.2 如何使用 2.3 运用场景 2.4 举例说明 三.产品与研发的沟通痛点 3.1 沟通痛点的原因 3.2 分享案例 前言 本篇会详细阐明作为一个产品经理会在项目遇到的问题&#xff0c;如&#xff1a;产…

力扣_字符串4—编辑距离

题目 给你两个单词 w o r d 1 word1 word1 和 w o r d 2 word2 word2&#xff0c; 请返回将 w o r d 1 word1 word1 转换成 w o r d 2 word2 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 方法—动…

记录 | python 源码编译报错subprocess.CalledProcessError Command lsb_release

subprocess.CalledProcessError: Command (lsb_release, -a) returned non-zero exit status 1. 解决方法 find / -name lsb_releaserm -rf /usr/bin/lsb_release

张艺谋《主角》选角引发热议,周迅、赵丽颖、杨紫或成候选。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 近日&#xff0c;张艺谋执导的首部电视剧《主角》女主选角成为…

6.electron之上下文隔离,预加载JS脚本

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…