如何判断Wyscout数据集中射门事件是否为进球
Wyscout数据集射门进球标记正确获取方法
你对Wyscout的事件字段结构理解有误:进球不属于射门事件下的subEvent层级,subEventName字段只会记录射门的类型,比如头球射门、定位球射门、禁区内射门这类分类,不会直接标记是否进球。
所有进球、射正、射偏这类事件状态标记,都存在事件的tags字段中,进球对应的标签ID为101。
修正代码
你之前的代码没有读取和解析tags字段,所以找不到进球标记,参考以下代码处理:
import pandas as pd import ast df = pd.read_csv('events_England.csv') # csv读取后tags字段是字符串格式的列表,先转成Python原生列表 df['tags'] = df['tags'].apply(ast.literal_eval) shots = df[df['eventName']=='Shot'].copy() # 新增二进制进球标识字段:判断标签列表中是否存在ID为101的进球标签 shots['is_goal'] = shots['tags'].apply(lambda tag_list: any(tag['id'] == 101 for tag in tag_list)) # 提取需要的字段,此时已经带上进球标识 data = shots[['subEventName', 'pos_orig_x', 'pos_orig_y', 'pos_dest_y', 'pos_dest_x', 'is_goal']]
补充说明
- 如果你的数据集是旧版Wyscout导出格式,
tags字段可能直接存储标签ID列表,没有嵌套字典,那判断逻辑改成lambda tag_list: 101 in tag_list即可,可以先打印1-2行tags字段的内容确认结构。 - 其他常用射门相关标签ID可以按需取用:
102对应射正、103对应射偏、104对应被封堵射门,都不需要从subEventName字段匹配。
内容的提问来源于stack exchange,提问作者Anas Souabni
相关产品推荐
相关产品推荐

