本文目录导读:

我来帮你创建一个统计足球比赛中脚后跟传球成功次数的Python案例。
基础版本
def count_heel_passes(events):
"""
统计脚后跟传球成功次数
events: 比赛事件列表,每个事件是一个字典
"""
heel_pass_count = 0
for event in events:
# 判断是否为脚后跟传球且成功
if (event.get('event_type') == 'pass' and
event.get('pass_type') == 'heel' and
event.get('outcome') == 'success'):
heel_pass_count += 1
return heel_pass_count
# 示例数据
match_events = [
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'success', 'player': '梅西'},
{'event_type': 'pass', 'pass_type': 'normal', 'outcome': 'success', 'player': 'C罗'},
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'fail', 'player': '内马尔'},
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'success', 'player': '本泽马'},
{'event_type': 'pass', 'pass_type': 'long', 'outcome': 'success', 'player': '德布劳内'},
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'success', 'player': '梅西'},
{'event_type': 'shot', 'pass_type': None, 'outcome': 'goal', 'player': '姆巴佩'},
]
result = count_heel_passes(match_events)
print(f"脚后跟传球成功次数: {result}")
进阶版本(更详细的统计)
class HeelPassAnalyzer:
"""脚后跟传球分析器"""
def __init__(self):
self.passes = []
self.success_count = 0
self.fail_count = 0
self.total_count = 0
self.player_stats = {} # 球员统计
self.equipment_stats = {} # 场地/比赛阶段统计
def add_event(self, event):
"""添加一个比赛事件"""
if event.get('event_type') != 'pass':
return
if event.get('pass_type') != 'heel':
return
self.passes.append(event)
self.total_count += 1
outcome = event.get('outcome')
if outcome == 'success':
self.success_count += 1
elif outcome == 'fail':
self.fail_count += 1
# 统计球员数据
player = event.get('player', 'unknown')
if player not in self.player_stats:
self.player_stats[player] = {'success': 0, 'fail': 0}
if outcome == 'success':
self.player_stats[player]['success'] += 1
elif outcome == 'fail':
self.player_stats[player]['fail'] += 1
# 统计比赛阶段
period = event.get('period', 'unknown')
if period not in self.equipment_stats:
self.equipment_stats[period] = {'success': 0, 'fail': 0}
if outcome == 'success':
self.equipment_stats[period]['success'] += 1
elif outcome == 'fail':
self.equipment_stats[period]['fail'] += 1
def get_success_rate(self):
"""获取成功率"""
if self.total_count == 0:
return 0
return (self.success_count / self.total_count) * 100
def get_player_ranking(self):
"""获取球员排名"""
ranking = []
for player, stats in self.player_stats.items():
total = stats['success'] + stats['fail']
if total > 0:
rate = (stats['success'] / total) * 100
ranking.append({
'player': player,
'total': total,
'success': stats['success'],
'success_rate': round(rate, 1)
})
return sorted(ranking, key=lambda x: x['success_rate'], reverse=True)
def get_summary(self):
"""获取汇总信息"""
return {
'total_pass': self.total_count,
'success_count': self.success_count,
'fail_count': self.fail_count,
'success_rate': round(self.get_success_rate(), 1),
'players_used': len(self.player_stats),
'periods_analyzed': len(self.equipment_stats)
}
def load_match_data():
"""加载比赛数据(模拟)"""
# 这里可以替换为从文件或API加载真实数据
return [
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'success',
'player': '梅西', 'period': '上半场', 'minute': 12},
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'success',
'player': 'C罗', 'period': '上半场', 'minute': 15},
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'fail',
'player': '内马尔', 'period': '上半场', 'minute': 23},
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'success',
'player': '梅西', 'period': '上半场', 'minute': 45},
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'success',
'player': '本泽马', 'period': '下半场', 'minute': 55},
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'fail',
'player': '姆巴佩', 'period': '下半场', 'minute': 67},
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'success',
'player': '德布劳内', 'period': '下半场', 'minute': 78},
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'success',
'player': 'C罗', 'period': '下半场', 'minute': 85},
{'event_type': 'pass', 'pass_type': 'heel', 'outcome': 'success',
'player': '梅西', 'period': '下半场', 'minute': 90},
]
def main():
"""主函数"""
analyzer = HeelPassAnalyzer()
# 加载数据
match_events = load_match_data()
# 分析所有事件
for event in match_events:
analyzer.add_event(event)
# 输出结果
print("=" * 50)
print("脚后跟传球统计分析")
print("=" * 50)
# 基本统计
summary = analyzer.get_summary()
print(f"\n📊 基本统计:")
print(f" 总传球次数: {summary['total_pass']}")
print(f" 成功次数: {summary['success_count']}")
print(f" 失败次数: {summary['fail_count']}")
print(f" 成功率: {summary['success_rate']}%")
print(f" 参与球员数: {summary['players_used']}")
# 球员排名
print(f"\n🏆 球员排名(按成功率):")
player_ranking = analyzer.get_player_ranking()
for i, player in enumerate(player_ranking, 1):
print(f" {i}. {player['player']}: {player['success']}/{player['total']} "
f"({player['success_rate']}%)")
# 场地/时期统计
print(f"\n⏱️ 比赛阶段统计:")
for period, stats in analyzer.equipment_stats.items():
success_rate = 0
total = stats['success'] + stats['fail']
if total > 0:
success_rate = (stats['success'] / total) * 100
print(f" {period}: 成功 {stats['success']} 次, "
f"失败 {stats['fail']} 次, 成功率 {success_rate:.1f}%")
# 运行主程序
if __name__ == "__main__":
main()
进阶版本(数据可视化)
import matplotlib.pyplot as plt
import pandas as pd
from collections import Counter
def visualize_heel_passes():
"""可视化脚后跟传球数据"""
# 模拟数据
data = {
'player': ['梅西', 'C罗', '内马尔', '本泽马', '姆巴佩', '德布劳内', '哈兰德'],
'success': [8, 6, 5, 4, 3, 7, 2],
'fail': [2, 3, 4, 2, 1, 2, 1]
}
df = pd.DataFrame(data)
df['total'] = df['success'] + df['fail']
df['success_rate'] = (df['success'] / df['total'] * 100).round(1)
# 创建图表
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
# 柱状图显示成功/失败次数
x = np.arange(len(df))
width = 0.35
ax1.bar(x - width/2, df['success'], width, label='成功', color='green')
ax1.bar(x + width/2, df['fail'], width, label='失败', color='red')
ax1.set_xlabel('球员')
ax1.set_ylabel('次数')
ax1.set_title('脚后跟传球成功/失败次数')
ax1.set_xticks(x)
ax1.set_xticklabels(df['player'])
ax1.legend()
# 饼图显示成功率
colors = plt.cm.Set3(range(len(df)))
ax2.pie(df['success'], labels=df['player'], autopct='%1.1f%%',
colors=colors, startangle=90)
ax2.set_title('脚后跟传球成功分布')
plt.tight_layout()
plt.show()
使用CSV文件版本
import csv
def analyze_from_csv(file_path):
"""从CSV文件读取数据并分析"""
heel_pass_success = 0
heel_pass_total = 0
with open(file_path, 'r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
if (row['event_type'] == 'pass' and row['pass_type'] == 'heel'):
heel_pass_total += 1
if row['outcome'] == 'success':
heel_pass_success += 1
return {
'total': heel_pass_total,
'success': heel_pass_success,
'fail': heel_pass_total - heel_pass_success,
'success_rate': (heel_pass_success / heel_pass_total * 100) if heel_pass_total > 0 else 0
}
# 示例:创建CSV文件
def create_example_csv():
"""创建示例CSV文件"""
headers = ['event_type', 'pass_type', 'outcome', 'player', 'minute']
data = [
['pass', 'heel', 'success', '梅西', 12],
['pass', 'heel', 'success', 'C罗', 15],
['pass', 'normal', 'success', '内马尔', 20],
['pass', 'heel', 'fail', '本泽马', 25],
['pass', 'heel', 'success', '姆巴佩', 45],
['pass', 'long', 'success', '德布劳内', 60],
['pass', 'heel', 'success', '哈兰德', 75],
['pass', 'heel', 'success', '梅西', 85],
]
with open('match_data.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(headers)
writer.writerows(data)
if __name__ == "__main__":
# 创建示例文件并分析
create_example_csv()
result = analyze_from_csv('match_data.csv')
print(f"脚后跟传球总数: {result['total']}")
print(f"成功次数: {result['success']}")
print(f"失败次数: {result['fail']}")
print(f"成功率: {result['success_rate']:.1f}%")
主要功能说明
- 基础版本:简单统计成功次数
- 进阶版本:支持按球员、时间段等维度详细统计
- 可视化版本:生成图表展示结果
- CSV版本:从文件读取真实比赛数据
这些代码可以直接运行,你也可以根据自己的数据结构进行调整,需要我解释某个部分或者添加特定功能吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播