这个python案例显示被射门次数对比?

wen python案例 2

本文目录导读:

这个python案例显示被射门次数对比?

  1. 完整的Python案例:被射门次数对比
  2. 关键功能说明:

我理解您想了解一个关于“被射门次数对比”的Python案例,这是一个足球数据分析中常见的可视化需求,让我为您提供一个完整的示例:

完整的Python案例:被射门次数对比

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False    # 用于显示负号
# 示例数据:不同球队的被射门次数
data = {
    '球队': ['曼城', '阿森纳', '利物浦', '切尔西', '曼联', '热刺', '纽卡斯尔', '布莱顿'],
    '被射门次数': [95, 102, 110, 125, 118, 130, 142, 138]
}
# 创建DataFrame
df = pd.DataFrame(data)
# 创建图表
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
fig.suptitle('各球队被射门次数对比分析', fontsize=16, fontweight='bold')
# 1. 柱状图
ax1 = axes[0, 0]
bars = ax1.bar(df['球队'], df['被射门次数'], color=['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7', '#DDA0DD', '#98D8C8', '#F7DC6F'])
ax1.set_title('柱状图对比', fontsize=12)
ax1.set_xlabel('球队')
ax1.set_ylabel('被射门次数')
ax1.set_xticklabels(df['球队'], rotation=45, ha='right')
# 添加数值标签
for bar in bars:
    height = bar.get_height()
    ax1.text(bar.get_x() + bar.get_width()/2., height + 1, f'{int(height)}', ha='center', va='bottom')
# 2. 水平条形图
ax2 = axes[0, 1]
sorted_df = df.sort_values('被射门次数', ascending=True)
y_pos = np.arange(len(sorted_df))
bars2 = ax2.barh(y_pos, sorted_df['被射门次数'], color='steelblue')
ax2.set_yticks(y_pos)
ax2.set_yticklabels(sorted_df['球队'])
ax2.set_title('水平条形图(按从低到高排序)', fontsize=12)
ax2.set_xlabel('被射门次数')
# 添加数值标签
for i, (v, label) in enumerate(zip(sorted_df['被射门次数'], sorted_df['球队'])):
    ax2.text(v + 2, i, str(v), va='center', fontsize=10)
# 3. 折线图
ax3 = axes[1, 0]
ax3.plot(df['球队'], df['被射门次数'], 'o-', color='crimson', linewidth=2, markersize=8)
ax3.fill_between(range(len(df)), df['被射门次数'], alpha=0.1, color='crimson')
ax3.set_title('折线趋势图', fontsize=12)
ax3.set_xlabel('球队')
ax3.set_ylabel('被射门次数')
ax3.set_xticklabels(df['球队'], rotation=45, ha='right')
# 添加数据点标签
for x, y in enumerate(df['被射门次数']):
    ax3.text(x, y + 2, str(y), ha='center', fontsize=10)
# 4. 饼图(显示比例)
ax4 = axes[1, 1]
colors = plt.cm.Set3(np.linspace(0, 1, len(df)))
wedges, texts, autotexts = ax4.pie(df['被射门次数'], labels=df['球队'], autopct='%1.1f%%', 
                                   colors=colors, explode=[0.02]*len(df), shadow=True, startangle=90)
ax4.set_title('所占比例饼图', fontsize=12)
# 添加统计信息
total_shots = df['被射门次数'].sum()
average_shots = df['被射门次数'].mean()
max_shots = df['被射门次数'].max()
min_shots = df['被射门次数'].min()
max_team = df.loc[df['被射门次数'].idxmax(), '球队']
min_team = df.loc[df['被射门次数'].idxmin(), '球队']
# 在底部添加统计摘要
stats_text = (f'总被射门次数: {total_shots} | '
               f'平均: {average_shots:.1f} | '
               f'最高: {max_shots} ({max_team}) | '
               f'最低: {min_shots} ({min_team})')
fig.text(0.5, 0.02, stats_text, ha='center', fontsize=12, 
         bbox=dict(boxstyle='round', facecolor='lightgray', alpha=0.8))
plt.tight_layout()
plt.subplots_adjust(bottom=0.1)  # 为统计文本留出空间
plt.show()
# 输出详细数据
print("\n=== 被射门次数详细数据 ===")
print(df.to_string(index=False))
print(f"\n统计摘要:")
print(f"- 总被射门次数: {total_shots}")
print(f"- 平均每次: {average_shots:.2f}")
print(f"- 最容易被射门: {max_team} ({max_shots}次)")
print(f"- 最不易被射门: {min_team} ({min_shots}次)")
# 计算排名
df['排名'] = df['被射门次数'].rank(method='min', ascending=True).astype(int)
print("\n球队排名(从少到多):")
print(df[['球队', '被射门次数', '排名']].sort_values('排名').to_string(index=False))

关键功能说明:

  1. 四种可视化类型

    • 柱状图:直观对比各队数据
    • 水平条形图:按数值排序展示
    • 折线图:显示数据趋势
    • 饼图:显示各队占比
  2. 核心分析功能

    • 自动计算总数、平均值
    • 找出最高/最低值球队
    • 自动排名
  3. 图表优化

    • 添加数值标签
    • 中文字体支持
    • 美观的颜色方案
    • 统计摘要显示

运行此代码将生成一个包含四个不同角度可视化的对比图表,非常适合用于足球数据分析报告或比赛复盘。

如果您有特定的球队数据或想调整图表样式,请告诉我,我可以帮您修改代码!

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