🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述


一、引言

北京时间2025年11月15日,第十五届全运会11人制足球比赛圆满落幕。湖北队获得男子U20组冠军,辽宁队获得男子U18组冠军,北京队获得男子U16组冠军,江苏队获得女子成人组冠军,上海队获得女子U18、U16组两个冠军。根据德转网站中国区管理员朱艺的统计数据显示,上海代表团在历届全运会足球项目中以12枚金牌高居榜首,展现了其在足球领域的传统优势。本文将通过数据可视化技术,深入分析历届全运会足球项目的奖牌分布格局。

二、数据准备

import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Bar, Pie, Page, Grid, Line, Scatter
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode

# 创建数据
teams = [
    "上海队", "辽宁队", "江苏队", "山东队", "广东队", "北京队", "浙江队", 
    "湖北队", "河北队", "陕西队", "河南队", "解放军队", "奥运联队", "西安队",
    "天津队", "四川队", "新疆队", "哈尔滨队", "重庆队", "大连队", "湖南队"
]

gold = [12, 7, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]
silver = [6, 4, 2, 1, 7, 4, 3, 2, 2, 1, 1, 0, 0, 0, 2, 1, 1, 1, 1, 0, 0]
bronze = [4, 6, 3, 3, 6, 1, 2, 1, 0, 2, 0, 3, 0, 0, 4, 2, 1, 0, 0, 1, 1]

# 计算总奖牌数
total_medals = [g + s + b for g, s, b in zip(gold, silver, bronze)]

# 创建DataFrame
df_football = pd.DataFrame({
    '队伍': teams,
    '金牌': gold,
    '银牌': silver,
    '铜牌': bronze,
    '总奖牌': total_medals
})

# 按金牌数排序
df_football = df_football.sort_values('金牌', ascending=False)

三、数据可视化

3.1 金牌数量排名条形图

def create_gold_medal_bar_chart(df):
    """创建金牌数量排名条形图"""
    # 取有金牌的队伍
    df_with_gold = df[df['金牌'] > 0].sort_values('金牌', ascending=True)
    
    bar = (
        Bar()
        .add_xaxis(df_with_gold['队伍'].tolist())
        .add_yaxis(
            "金牌数量",
            df_with_gold['金牌'].tolist()
        )
        .reversal_axis()
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="历届全运会足球项目金牌数量排名",
                subtitle="上海队12金遥遥领先,辽宁7金位列第二"
            )
        )
    )
    return bar

3.2 三色奖牌堆叠柱状图

def create_medal_stacked_bar_chart(df):
    """创建三色奖牌堆叠柱状图"""
    # 取奖牌总数前15的队伍
    df_top15 = df.head(15).sort_values('总奖牌', ascending=True)
    
    bar = (
        Bar()
        .add_xaxis(df_top15['队伍'].tolist())
        .add_yaxis(
            "金牌",
            df_top15['金牌'].tolist(),
            stack="stack1"
        )
        .add_yaxis(
            "银牌",
            df_top15['银牌'].tolist(),
            stack="stack1"
        )
        .add_yaxis(
            "铜牌",
            df_top15['铜牌'].tolist(),
            stack="stack1"
        )
        .reversal_axis()
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="历届全运会足球项目奖牌分布(堆叠图)",
                subtitle="上海队奖牌总数22枚遥遥领先"
        )
    )
    return bar

3.3 奖牌分布梯队饼图

def create_medal_tier_pie_chart(df):
    """创建奖牌分布梯队饼图"""
    # 计算各梯队数量
    tier_1 = len(df[df['金牌'] >= 10])  # 超强梯队
    tier_2 = len(df[(df['金牌'] >= 5) & (df['金牌'] < 10)])  # 强队梯队
    tier_3 = len(df[(df['金牌'] >= 1) & (df['金牌'] < 5)])  # 有金梯队
    tier_4 = len(df[(df['总奖牌'] > 0) & (df['金牌'] == 0)])  # 无金有牌梯队
    tier_0 = len(df[df['总奖牌'] == 0])  # 无奖牌梯队
    
    tier_data = [
        ("超强梯队(10金以上)", tier_1),
        ("强队梯队(5-9金)", tier_2),
        ("有金梯队(1-4金)", tier_3),
        ("无金有牌梯队", tier_4),
        ("无奖牌梯队", tier_0)
    ]
    
    pie = (
        Pie()
        .add(
            series_name="实力梯队",
            data_pair=tier_data,
            radius=["35%", "75%"],
            center=["50%", "50%"],
            rosetype="radius"
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="各队伍实力梯队分布分析"
        )
    )
    return pie

3.4 足球实力词云图

def create_football_wordcloud(df):
    """创建足球实力词云图"""
    # 创建词云数据
    word_data = []
    
    # 根据金牌数生成词云数据
    for _, row in df.iterrows():
        if row['金牌'] > 0:
            # 金牌队伍权重更高
            weight = row['金牌'] * 100 + row['银牌'] * 50 + row['铜牌'] * 25
            word_data.append((row['队伍'], weight))
        elif row['银牌'] > 0 or row['铜牌'] > 0:
            # 有银牌或铜牌的队伍
            weight = row['银牌'] * 40 + row['铜牌'] * 20
            word_data.append((row['队伍'], weight))
        else:
            # 无奖牌队伍权重较低
            word_data.append((row['队伍'], 10))
    
    # 添加足球相关关键词
    football_keywords = [
        ("足球", 200), ("全运会", 180), ("冠军", 150), ("青训", 120),
        ("U20", 100), ("U18", 100), ("U16", 100), ("女子足球", 90),
        ("男子足球", 90), ("奖牌", 80), ("突破", 70), ("传统强队", 70),
        ("新生力量", 60), ("足球改革", 60), ("体育强省", 50), ("竞技水平", 50),
        ("人才培养", 45), ("足球发展", 45), ("比赛质量", 40), ("区域均衡", 40)
    ]
    
    word_data.extend(football_keywords)
    
    wordcloud = (
        WordCloud()
        .add(
            series_name="足球实力",
            data_pair=word_data
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="全运会足球项目实力词云分析",
                subtitle="字号越大代表实力越强/关注度越高"
            ),
            tooltip_opts=opts.TooltipOpts(
                is_show=True,
                formatter="{b}: {c}"
            )
        )
        
    )
    return wordcloud

3.5 奖牌效率散点图

def create_medal_efficiency_scatter(df):
    """创建奖牌效率散点图"""
    # 计算奖牌效率(金牌/总奖牌)
    df_with_medals = df[df['总奖牌'] > 0].copy()
    df_with_medals['金牌效率'] = (df_with_medals['金牌'] / df_with_medals['总奖牌'] * 100).round(1)
    
    scatter_data = []
    for _, row in df_with_medals.iterrows():
        scatter_data.append({
            'name': row['队伍'],
            'value': [row['总奖牌'], row['金牌效率'], row['金牌']]
        })
    
    scatter_data.sort(key=lambda x: x['value'][0])  # 按总奖牌数排序
    
    scatter = (
        Scatter()
        .add_xaxis([x['value'][0] for x in scatter_data])
        .add_yaxis(
            "金牌效率",
            [x['value'][1] for x in scatter_data],
            symbol_size=20
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="奖牌数量与金牌效率关系分析",
                subtitle="横轴:总奖牌数 | 纵轴:金牌效率(%)"
            )
        )
    )
    return scatter

四、综合大屏展示

def create_football_medal_dashboard():
    """创建足球奖牌数据综合可视化大屏"""
    page = Page(
        page_title="历届全运会足球项目奖牌分布可视化分析大屏",
        layout=Page.DraggablePageLayout
    )
    
    # 添加各个图表
    page.add(
        create_gold_medal_bar_chart(df_football),
        create_medal_stacked_bar_chart(df_football),
        create_medal_tier_pie_chart(df_football),
        create_medal_ratio_rose_chart(df_football),
        create_medal_efficiency_scatter(df_football)
    )
    
    return page

# 生成可视化大屏
if __name__ == "__main__":
    dashboard = create_football_medal_dashboard()
    dashboard.render("all_time_football_medal_dashboard.html")
    
    # 输出关键统计数据
    print("\n=== 历届全运会足球项目奖牌关键统计 ===")
    print(f"数据来源:德转中国区管理员朱艺统计")
    print(f"统计队伍数量: {len(teams)}支")
    print(f"金牌总数: {sum(gold)}枚")
    print(f"银牌总数: {sum(silver)}枚")
    print(f"铜牌总数: {sum(bronze)}枚")
    print(f"奖牌总数: {sum(total_medals)}枚")
    print(f"获得金牌队伍: {len([x for x in gold if x > 0])}支")
    print(f"获得奖牌队伍: {len([x for x in total_medals if x > 0])}支")
    print(f"金牌王: {df_football.iloc[0]['队伍']} ({df_football.iloc[0]['金牌']}金)")
    print(f"奖牌王: {df_football.iloc[0]['队伍']} ({df_football.iloc[0]['总奖牌']}枚)")

五、数据分析结论

5.1 关键发现

  1. 上海足球霸主地位

    • 以12枚金牌、22枚总奖牌遥遥领先
    • 在女子U18、U16组别展现强大实力
  2. 传统强队格局稳定

    • 辽宁、江苏、山东、广东稳居前列
    • 北京、浙江等队伍具备竞争力
  3. 新势力崛起

    • 湖北队在第十五届实现金牌突破
    • 多个省份实现奖牌零的突破

5.2 梯队特征分析

  • 超强梯队:上海队独一档,金牌数超过10枚
  • 强队梯队:辽宁队7金,具备挑战实力
  • 有金梯队:8支队伍获得1-4枚金牌,竞争激烈
  • 发展梯队:7支队伍获得奖牌但无金牌,展现进步

5.3 区域分布特点

  • 东部沿海优势明显:上海、辽宁、江苏、山东、广东包揽前五
  • 中部地区稳步发展:湖北、河南等省份实现突破
  • 西部地区潜力巨大:新疆、四川等队伍开始获得奖牌

六、未来展望

随着中国足球改革的深入推进,全运会足球项目的竞争格局正在发生变化。传统强队需要保持优势,新兴力量正在崛起。第十五届全运会中湖北等队的突破,预示着未来足球版图可能迎来新的变化。

发展建议

  • 加强青训体系建设
  • 推动区域均衡发展
  • 提高比赛质量和竞争水平

相信在各方的共同努力下,中国足球将在全运会舞台上展现更加精彩的表现!


  注: 博主目前收集了6900+份相关数据集,有想要的可以领取部分数据,关注下方公众号或添加微信:

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐