基于python的奥运会历史数据分析【120年】_冬奥会数据分析与预测python(1)

文件noc_regions.csv中包含3个字段,具体信息如下:

在这里插入图片描述

4.数据来源

数据集源自于kaggle平台用户分享,
基于证书 CC0: Public Domain 发布,
具体信息内容源自
https://www.sports-reference.com/

在这里插入图片描述

二、数据集可探索、研究的方向

可以从以下几个方面来探索奥林匹克运动会的演变历程:

  • 历年来 男女参赛运动员的表现如何?
  • 那不同地区?
  • 不同运动项目?
  • 不同比赛项目?
三、可视化分析
1.🏆各国累计奖牌数
import pandas as pd
from pyecharts.charts import \*
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
 
athlete_data = pd.read_csv('./data/athlete\_events.csv')
noc_region = pd.read_csv('./data/noc\_regions.csv')
 
# 关联代表国家
data = pd.merge(athlete_data, noc_region, on='NOC', how='left')
print(data.head())
 
medal_data = data.groupby(['Year', 'Season', 'region', 'Medal'])['Event'].nunique().reset_index()
medal_data.columns = ['Year', 'Season', 'region', 'Medal', 'Nums']
medal_data = medal_data.sort_values(by="Year", ascending=True)
 
 
def medal\_stat(year, season='Summer'):
    t_data = medal_data[(medal_data['Year'] <= year) & (medal_data['Season'] == season)]
    t_data = t_data.groupby(['region', 'Medal'])['Nums'].sum().reset_index()
    t_data = t_data.set_index(['region', 'Medal']).unstack().reset_index().fillna(0, inplace=False)
    t_data = sorted(
        [(row['region'][0], int(row['Nums']['Gold']), int(row['Nums']['Silver']), int(row['Nums']['Bronze']))
         for _, row in t_data.iterrows()], key=lambda x: x[1] + x[2] + x[3], reverse=True)[:20]
    return t_data
 
 
year_list = sorted(list(set(medal_data['Year'].to_list())), reverse=True)
 
tl = Timeline(init_opts=opts.InitOpts(theme='dark', width='1000px', height='1000px'))
tl.add_schema(is_timeline_show=True, is_rewind_play=True, is_inverse=False,
              label_opts=opts.LabelOpts(is_show=False))
 
for year in year_list:
    t_data = medal_stat(year)[::-1]
    bar = (
        Bar(init_opts=opts.InitOpts())
        .add_xaxis([x[0] for x in t_data])
        .add_yaxis("铜牌🥉", [x[3] for x in t_data],
                   stack='stack1',
                   itemstyle_opts=opts.ItemStyleOpts(border_color='rgb(220,220,220)', color='rgb(218,165,32)'))
        .add_yaxis("银牌🥈", [x[2] for x in t_data],
                   stack='stack1',
                   itemstyle_opts=opts.ItemStyleOpts(border_color='rgb(220,220,220)', color='rgb(192,192,192)'))
        .add_yaxis("金牌🏅️", [x[1] for x in t_data],
                   stack='stack1',
                   itemstyle_opts=opts.ItemStyleOpts(border_color='rgb(220,220,220)', color='rgb(255,215,0)'))
        .set_series_opts(label_opts=opts.LabelOpts(is_show=True,
                                                   position='insideRight',
                                                   font_style='italic'), )
        .set_global_opts(
            title_opts=opts.TitleOpts(title="各国累计奖牌数(夏季奥运会)"),
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
            legend_opts=opts.LegendOpts(is_show=True),
            graphic_opts=[opts.GraphicGroup(graphic_item=opts.GraphicItem(
                rotation=JsCode("Math.PI / 4"),
                bounding="raw",
                right=110,
                bottom=110,
                z=100),
                children=[
                    opts.GraphicRect(
                        graphic_item=opts.GraphicItem(
                            left="center", top="center", z=100
                        ),
                        graphic_shape_opts=opts.GraphicShapeOpts(
                            width=400, height=50
                        ),
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="rgba(0,0,0,0.3)"
                        ),
                    ),
                    opts.GraphicText(
                        graphic_item=opts.GraphicItem(
                            left="center", top="center", z=100
                        ),
                        graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                            text=year,
                            font="bold 26px Microsoft YaHei",
                            graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                                fill="#fff"
                            ),
                        ),
                    ),
                ],
            )
            ], )
        .reversal_axis())
    tl.add(bar, year)
 
tl.render(r".\htmlRender\01\_各国累计奖牌数(夏季奥运会).html")

在这里插入图片描述

import pandas as pd
from pyecharts.charts import \*
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
 
athlete_data = pd.read_csv('./data/athlete\_events.csv')
noc_region = pd.read_csv('./data/noc\_regions.csv')
 
# 关联代表国家
data = pd.merge(athlete_data, noc_region, on='NOC', how='left')
print(data.head())
 
medal_data = data.groupby(['Year', 'Season', 'region', 'Medal'])['Event'].nunique().reset_index()
medal_data.columns = ['Year', 'Season', 'region', 'Medal', 'Nums']
medal_data = medal_data.sort_values(by="Year", ascending=True)
 
 
def medal\_stat(year, season='Summer'):
    t_data = medal_data[(medal_data['Year'] <= year) & (medal_data['Season'] == season)]
    t_data = t_data.groupby(['region', 'Medal'])['Nums'].sum().reset_index()
    t_data = t_data.set_index(['region', 'Medal']).unstack().reset_index().fillna(0, inplace=False)
    t_data = sorted(
        [(row['region'][0], int(row['Nums']['Gold']), int(row['Nums']['Silver']), int(row['Nums']['Bronze']))
         for _, row in t_data.iterrows()], key=lambda x: x[1] + x[2] + x[3], reverse=True)[:20]
    return t_data
 
 
year_list = sorted(list(set(medal_data['Year'].to_list())), reverse=True)
 
tl = Timeline(init_opts=opts.InitOpts(theme='dark', width='1000px', height='1000px'))
tl.add_schema(is_timeline_show=True, is_rewind_play=True, is_inverse=False,
              label_opts=opts.LabelOpts(is_show=False))
 
year_list = sorted(list(set(medal_data['Year'][medal_data.Season == 'Winter'].to_list())), reverse=True)
 
tl = Timeline(init_opts=opts.InitOpts(theme='dark', width='1000px', height='1000px'))
tl.add_schema(is_timeline_show=True, is_rewind_play=True, is_inverse=False,
              label_opts=opts.LabelOpts(is_show=False))
 
for year in year_list:
    t_data = medal_stat(year, 'Winter')[::-1]
    bar = (
        Bar(init_opts=opts.InitOpts(theme='dark'))
        .add_xaxis([x[0] for x in t_data])
        .add_yaxis("铜牌🥉", [x[3] for x in t_data],
                   stack='stack1',
                   itemstyle_opts=opts.ItemStyleOpts(border_color='rgb(220,220,220)', color='rgb(218,165,32)'))
        .add_yaxis("银牌🥈", [x[2] for x in t_data],
                   stack='stack1',
                   itemstyle_opts=opts.ItemStyleOpts(border_color='rgb(220,220,220)', color='rgb(192,192,192)'))
        .add_yaxis("金牌🏅️", [x[1] for x in t_data],
                   stack='stack1',
                   itemstyle_opts=opts.ItemStyleOpts(border_color='rgb(220,220,220)', color='rgb(255,215,0)'))
        .set_series_opts(label_opts=opts.LabelOpts(is_show=True,
                                                   position='insideRight',
                                                   font_style='italic'), )
        .set_global_opts(
            title_opts=opts.TitleOpts(title="各国累计奖牌数(冬季奥运会)"),
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
            legend_opts=opts.LegendOpts(is_show=True),
            graphic_opts=[opts.GraphicGroup(graphic_item=opts.GraphicItem(
                rotation=JsCode("Math.PI / 4"),
                bounding="raw",
                right=110,
                bottom=110,
                z=100),
                children=[
                    opts.GraphicRect(
                        graphic_item=opts.GraphicItem(
                            left="center", top="center", z=100
                        ),
                        graphic_shape_opts=opts.GraphicShapeOpts(
                            width=400, height=50
                        ),
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="rgba(0,0,0,0.3)"
                        ),
                    ),
                    opts.GraphicText(
### 一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。



![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)



### 二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。



![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)



### 三、入门学习视频



我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。



![](https://img-blog.csdnimg.cn/afc935d834c5452090670f48eda180e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5aqb56eD56eD,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值