You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas和Matplotlib分析绘制运动员年龄与奥运获奖率的相关性

用Pandas和Matplotlib分析运动员年龄与奥运获奖相关性

需求概述

基于包含运动员姓名、年龄、奖牌(金牌/银牌/铜牌/NA)的数据集,完成以下操作:

  • 统计各年龄组的运动员总数
  • 计算每个年龄组中获得任意奖牌(Medal字段非空)的运动员占比
  • 绘制以年龄为X轴、获奖百分比为Y轴的可视化图表

实现步骤

1. 导入依赖库

先导入所需工具库:

import pandas as pd
import matplotlib.pyplot as plt

2. 加载示例数据

可以直接构造示例数据集,也可以从CSV/Excel文件读取:

# 构造示例数据
data = pd.DataFrame({
    'Name': ['Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6', 'Name7', 'Name8', 'Name9', 'Name10', 'Name11'],
    'Age': [20, 21, 20, 22, 22, 21, 20, 19, 20, 20, 21],
    'Medal': ['Silver', pd.NA, pd.NA, 'Bronze', pd.NA, pd.NA, 'Gold', 'Silver', 'Gold', pd.NA, 'Silver']
})

3. 数据处理与百分比计算

通过分组统计完成核心计算:

# 新增列标记是否获奖
data['Has_Medal'] = data['Medal'].notnull()

# 按年龄分组,统计总人数和获奖人数
age_stats = data.groupby('Age').agg(
    total_athletes=('Name', 'count'),
    medal_winners=('Has_Medal', 'sum')
)

# 计算获奖百分比(保留整数)
age_stats['win_percentage'] = round((age_stats['medal_winners'] / age_stats['total_athletes']) * 100, 0)

运行后得到的统计结果与预期一致:

Agetotal_athletesmedal_winnerswin_percentage
1911100.0
205360.0
213133.0
222150.0

4. 绘制可视化图表

用Matplotlib生成柱状图(可按需替换为折线图):

# 设置图表风格
plt.style.use('seaborn-v0_8')

# 创建图表
plt.figure(figsize=(8, 5))
plt.bar(age_stats.index, age_stats['win_percentage'], color='#1f77b4')

# 添加标签和标题
plt.xlabel('运动员年龄', fontsize=12)
plt.ylabel('获奖百分比 (%)', fontsize=12)
plt.title('各年龄组运动员奥运获奖占比', fontsize=14)

# 在柱子上标注百分比数值
for x, y in zip(age_stats.index, age_stats['win_percentage']):
    plt.text(x, y + 1, f'{int(y)}%', ha='center', fontsize=10)

# 设置Y轴范围,确保数值标签完全显示
plt.ylim(0, 110)

# 显示图表
plt.show()

关键说明

  • 用groupby('Age').agg()可一次性完成多指标统计,效率更高
  • Medal.notnull()直接判定是否获奖,无需区分奖牌类型
  • 可视化时添加数值标签能让图表更直观,调整Y轴范围可避免标签被遮挡

内容的提问来源于stack exchange,提问作者Toshik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:05:31