这个python案例怎么看VAR介入的几次判罚?

wen python案例 3

本文目录导读:

这个python案例怎么看VAR介入的几次判罚?

  1. 最常见结构:事件日志中有明确的“介入”标记
  2. 进阶结构:只有“主判罚”和“复核后判罚”两列
  3. 结构化日志(JSON/嵌套数据)
  4. 如果需要可视化或统计
  5. 找不到对应字段怎么办?
  6. 关键点提示

在Python中查看VAR(视频助理裁判)介入的判罚,通常需要在足球比赛数据集自定义的事件日志中查找。

由于“VAR介入”并不是一个统一的固定词条,它在不同数据表中的字段名可能不同,以下是几种常见的查看方式和代码逻辑,你可以根据你的数据结构对号入座:

最常见结构:事件日志中有明确的“介入”标记

如果数据表中有类似 var_interventionreview 的布尔字段(True/False),或者 decision 字段中包含“VAR”字样,直接筛选即可。

import pandas as pd
# 假设 df 是存有比赛事件的数据框
df = pd.read_csv('match_events.csv')
# 方式一:如果有一个专门的布尔列(True表示VAR介入)
var_events = df[df['var_intervention'] == True]
print(f"VAR介入次数: {len(var_events)}")
print(var_events[['minute', 'team', 'player', 'original_decision', 'final_decision']])
# 方式二:如果决定类型字符串中包含“VAR”关键词
var_kw = df[df['decision'].str.contains('VAR', case=False, na=False)]
print(var_kw)

进阶结构:只有“主判罚”和“复核后判罚”两列

这种情况下,你需要找出原始判罚最终判罚不一致的记录,这些通常就是VAR介入并改判的事件。

# 假设有 original_decision(主裁最初判罚)和 final_decision(VAR复核后判罚)
overturned = df[df['original_decision'] != df['final_decision']]
print("VAR改判记录(前后不一致):")
print(overturned[['minute', 'original_decision', 'final_decision']])
# 如果原始判罚和最终判罚相同(维持原判),但你想看所有VAR检查的事件,
# 可能还需要检查是否有一个 'var_check' 列
checked = df[df['var_check'] == 1]  # 1 表示检查过

结构化日志(JSON/嵌套数据)

如果数据是嵌套结构(event_data 中包含 var 字典),则需要用 json_normalize 展开。

import json
with open('match_data.json', 'r') as f:
    data = json.load(f)
var_events = []
for event in data['events']:
    # 假设每个事件里有 'var' 键,且 'var' 键存在
    if 'var' in event and event['var'].get('intervened') == True:
        var_events.append({
            'minute': event['minute'],
            'player': event.get('player'),
            'reason': event['var'].get('reason'),  # 如 'Handball'、'Offside'
            'outcome': event['var'].get('outcome')  # 如 'Goal'、'Penalty'
        })
print(var_events)

如果需要可视化或统计

你可以按球队、比赛阶段(上半场/下半场)来聚合查看。

# 统计每个球队被VAR介入影响的总数
var_count_by_team = var_events.groupby('team')['event_id'].count()
print(var_count_by_team)
# 查看VAR介入最常发生的时间段(以5分钟为窗口)
var_events['period'] = var_events['minute'] // 5 * 5
period_counts = var_events['period'].value_counts().sort_index()
print(period_counts)

找不到对应字段怎么办?

如果上述字段都不存在,通常是数据集不包含VAR信息,或者变量名比较特殊(is_cancelledreview_type),你可以用以下命令查看所有列名来找线索:

print(df.columns.tolist())
# 或者搜索包含 'var'、'review'、'video'、'check' 的列
var_cols = [col for col in df.columns if 'var' in col.lower() or 'review' in col.lower()]
print("潜在相关列:", var_cols)

关键点提示

  • 区分“VAR介入”和“VAR静默检查”:很多数据源只记录“改判”或“介入”,部分赛事数据连“检查但没改判”也会记录(字段名通常是 VAR_CheckReviews)。
  • 判罚决定:通常判罚代码(如 GoalPenaltyNo Penalty)会存储在 decisionoutcome 列中,你可以对比 originalfinal 看是否被推翻。

如果你能提供你的数据表格的前几行数据列名列表,我可以帮你写更精确的筛选代码。

抱歉,评论功能暂时关闭!