世界杯数据可视化分析

news2024/12/22 21:19:04

 

目录

1.数据来源

2.字段解释

世界杯成绩信息表:WorldCupsSummary

世界杯比赛比分汇总表:WorldCupMatches.csv

世界杯球员信息表:WorldCupPlayers.csv

3.数据分析及可视化


世界杯已经告一段落,作为一个学习大数据的学生,就像借此来做做分析玩,本次数据来源于天池大赛官网,大家可以去天池大赛官网自己下载,也可以通过我的网盘,链接放下面了。

1.数据来源

天池大赛官网链接:

https://tianchi.aliyun.com/competition/entrance/532045/information

百度网盘下载链接:

 python源代码也放入进去了(现在只有一个表的分析,后面会更新剩下两个表的分析)

https://pan.baidu.com/s/1GuiqtTLCwdR-yfobdhnX6w?pwd=zytt  提取码:zytt 
 

2.字段解释

世界杯成绩信息表:WorldCupsSummary

包含了所有21届世界杯赛事(1930-2018)的比赛主办国、前四名队伍、总参赛队伍、总进球数、现场观众人数等汇总信息,包括如下字段:

  • Year: 举办年份
  • HostCountry: 举办国家
  • Winner: 冠军队伍
  • Second: 亚军队伍
  • Third: 季军队伍
  • Fourth: 第四名队伍
  • GoalsScored: 总进球数
  • QualifiedTeams: 总参赛队伍数
  • MatchesPlayed: 总比赛场数
  • Attendance: 现场观众总人数
  • HostContinent: 举办国所在洲
  • WinnerContinent: 冠军国家队所在洲

世界杯比赛比分汇总表:WorldCupMatches.csv

包含了所有21届世界杯赛事(1930-2014)单场比赛的信息,包括比赛时间、比赛主客队、比赛进球数、比赛裁判等信息。包括如下字段:

  • Year: 比赛(所属世界杯)举办年份
  • Datetime: 比赛具体日期
  • Stage: 比赛所属阶段,包括 小组赛(GroupX)、16进8(Quarter-Final)、半决赛(Semi-Final)、决赛(Final)等
  • Stadium: 比赛体育场
  • City: 比赛举办城市
  • Home Team Name: 主队名
  • Away Team Name: 客队名
  • Home Team Goals: 主队进球数
  • Away Team Goals: 客队进球数
  • Attendance: 现场观众数
  • Half-time Home Goals: 上半场主队进球数
  • Half-time Away Goals: 上半场客队进球数
  • Referee: 主裁
  • Assistant 1: 助理裁判1
  • Assistant 2: 助理裁判2
  • RoundID: 比赛所处阶段ID,和Stage字段对应
  • MatchID: 比赛ID
  • Home Team Initials: 主队名字缩写
  • Away Team Initials: 客队名字缩写

世界杯球员信息表:WorldCupPlayers.csv

  • RoundID: 比赛所处阶段ID,同比赛信息表的RoundID字段
  • MatchID: 比赛ID
  • Team Initials: 队伍名
  • Coach Name: 教练名
  • Line-up: 首发/替补
  • Shirt Number: 球衣号码
  • Player Name: 队员名
  • Position: 比赛角色,包括:C=Captain, GK=Goalkeeper
  • Event: 比赛事件,包括进球、红/黄牌等

3.数据分析及可视化

在这里,我是对一个表一个表分析可视化来的,首先对世界杯成绩信息表:WorldCupsSummary进行分析。

我们先导入所需要用到的库

import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.charts import Line
from pyecharts.charts import Map

然后导入数据

#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)
df=pd.read_csv('WorldCupsSummary.csv',index_col=0)#将第一列作为索引列,即将时间作为索引

首先,我先分析进入半决赛的国家次数,夺冠次数,获得亚军次数,获得季军次数,获得第四名次数,由于给的数据都比较规则,不存在什么缺失值和异常值,故这里没怎么进行数据处理,但是在国家这里,国家名称存在着问题,如Germany FR 与Germany,这里需要对其进行合并,最终代码如下

#国家获得冠军数量
groupbyed=df.groupby(['Winner']).groups
for i in groupbyed :
    groupbyed[i]=len(groupbyed[i])
groupbyed['Germany']=groupbyed['Germany FR']+groupbyed['Germany']#合并Germany与Germany FR
del groupbyed['Germany FR']
groupbyed=pd.DataFrame([groupbyed]).T
groupbyed.columns=['nums']

#获得亚军数量
Second=df.groupby('Second').groups
for i in Second :
    Second[i]=len(Second[i])
Second['Germany']=Second['Germany FR']+Second['Germany']
del Second['Germany FR']
Second=pd.DataFrame([Second]).T
Second.columns=['nums']


#获得季军数
Third=df.groupby('Third').groups
for i in Third :
    Third[i]=len(Third[i])
Third['Germany']=Third['Germany FR']+Third['Germany']
del Third['Germany FR']
Third=pd.DataFrame([Third]).T
Third.columns=['nums']

#第四名数
Fourth=df.groupby('Fourth').groups
for i in Fourth :
    Fourth[i]=len(Fourth[i])
Fourth['Germany']=Fourth['Germany FR']
del Fourth['Germany FR']
Fourth=pd.DataFrame([Fourth]).T
Fourth.columns=['nums']

groupbyed.reset_index(inplace=True)
Second.reset_index(inplace=True)
Third.reset_index(inplace=True)
Fourth.reset_index(inplace=True)
groupbyed=pd.merge(groupbyed,Second,how='outer',on='index')
groupbyed=pd.merge(groupbyed,Third,how='outer',on='index')
groupbyed=pd.merge(groupbyed,Fourth,how='outer',on='index')
groupbyed.columns=['国家','冠军数','亚军数','季军数','第四名数']
groupbyed.fillna(0,inplace=True)
groupbyed['总数']=groupbyed['冠军数']+groupbyed['亚军数']+groupbyed['季军数']+groupbyed['第四名数']
groupbyed.sort_values(by='总数',inplace=True,ascending=False)
print(groupbyed)
c = (
    Bar(init_opts=opts.InitOpts(width='1500px'))
    .add_xaxis(list(groupbyed['国家']))
    .add_yaxis("冠军数", list(groupbyed['冠军数']),category_gap='15%')
    .add_yaxis("亚军数", list(groupbyed['亚军数']),category_gap='15%')
    .add_yaxis("季军数", list(groupbyed['季军数']),category_gap='15%')
    .add_yaxis("第四名数", list(groupbyed['第四名数']),category_gap='15%')
    .add_yaxis('总数',list(groupbyed['总数']),category_gap='15%')
    .set_global_opts(title_opts=opts.TitleOpts(title="按照获奖总数排序",pos_left='20%'),
                     xaxis_opts=opts.AxisOpts(name='国家',axispointer_opts={'interval':'0'},axislabel_opts=opts.LabelOpts(rotate=35,font_size=12)),
                     yaxis_opts=opts.AxisOpts(name='数量'),
                     legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(font_size=15)))
    .render("前四名.html")
)

从上述可看出,进入半决赛最多的是德国队,其次就是巴西队、意大利队等,想不到韩国也进过半决赛,懂得都懂。

 然后我们分析一下举办年份,按照四年一届世界杯,看看中间是否有过缺席

#统计未举办年份
Year=list(df.index)
count={}
for i in range(1930,2019,4):
    count[str(i)]=Year.count(i)
count=pd.DataFrame([count]).T
count.columns=['是否举办']
print(count[count['是否举办']==0])

 发现1942年和1946年未举办,估计这是由于正在打二战所导致的

然后我们统计分析一波,总进球数,总比赛场数,总参赛队伍数,并简单计算一下场均进球数

GoalsScored=df.loc[:,'GoalsScored']
changjun=np.array(GoalsScored)/np.array(df.loc[:,'MatchesPlayed'])
changjun=[round(i,1) for i in changjun]
# print(changjun)
bar = (
    Bar(init_opts=opts.InitOpts(width='1500px'))
    .add_xaxis(list(GoalsScored.index))
    .add_yaxis("总进球数", GoalsScored.tolist(),category_gap='15%',z=0)
    .add_yaxis('总参赛队伍数',list(df.loc[:,'QualifiedTeams']),category_gap='15%',z=0)
    .add_yaxis("总比赛场数",list(df.loc[:,'MatchesPlayed']),category_gap='15%',z=0)
    .set_global_opts(
                     xaxis_opts=opts.AxisOpts(axispointer_opts={'interval':'0'},axislabel_opts=opts.LabelOpts(rotate=35,font_size=12),name='Time'),
                     yaxis_opts=opts.AxisOpts(name='Numbers'),
                     legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(font_size=15))))
line=(
    Line(init_opts=opts.InitOpts(width='1500px'))
        .add_xaxis(GoalsScored.index.tolist())
        .add_yaxis("场均进球数",y_axis=changjun,is_smooth=True,is_symbol_show=True)
        .set_global_opts(title_opts=opts.TitleOpts(title="折线图-基本示例"))
)
bar.overlap(line)
bar.render('场均进球.html')

 可看出参赛队伍从1930年的13支增加到了18年的32支,这么多支队伍,中国都进不去啧啧啧,参赛队伍的增加,导致了总进球数和比赛场次的增加,但54年和58年像是个意外,队伍不多,进的球还不少,难不成刚二战结束,踢球都带有民族情绪,而场均进球数,从1930年到2018年呈下降趋势,这可能与早期足球参赛队伍少,比赛场次少有关吧,数量少了,偶然性就大嘛,而54年的场均进球数最高,平均每场都得进5、6个,搞得我还去百度了一下54年世界杯发生啥了,踢的这么激烈。

接着咱们看看世界杯现场观众数量的变化

people=[round(i,2) for i in df.loc[:,'Attendance']/10000]
c = (
    Line(init_opts=opts.InitOpts(width='1150px'))
    .add_xaxis(df.index.tolist())
    .add_yaxis("现场观众总人数", people, is_smooth=True,
               markpoint_opts=opts.MarkPointOpts(data=[opts.MarkLineItem(type_='max',symbol_size = [80,50],name='max'),opts.MarkLineItem(type_='min',symbol_size = [80,50],name='min')]))
    .set_global_opts(
                     tooltip_opts=opts.TooltipOpts(
                         is_show=True, trigger="axis", axis_pointer_type="cross"
                     ),
                     xaxis_opts=opts.AxisOpts(
                         name='Time',
                         type_="category",
                         axispointer_opts=opts.AxisPointerOpts(is_show=False, type_="shadow"),
                     ),
                     yaxis_opts=opts.AxisOpts(
                         name='numbers(10000)'
                     ))
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False)
                     )
    .render("现场观众总人数.html")
)

 

 世界杯现场观众数整体是上升的,从最初只有60万人到2018年有303万人现场观看,上涨了近5倍,其中在1934年现场人数最少,只有36万人左右,可能是要打仗了吧=-=,而在1994年,现场人数最多,达到了358万人,是在美国所举办=-=。但我估计今年卡塔尔世界杯可能会破新高。

然后我们分析一下哪些国家举办国世界杯的吧,这里队日本和韩国的数据要处理一下,他们联合举办,就当他们都举办过的吧=-=,当然这里的德国和联邦德国依旧合并,而这里的USA需要更改为United States,England 也需要更改,不然Map画不出来=-=。

HostCountry=df.groupby(df.loc[:,'HostCountry']).groups
for i in HostCountry:
    HostCountry[i]=len(HostCountry[i])
HostCountry['Korea']=1
HostCountry['Japan']=1
del HostCountry['Korea/Japan']
HostCountry['United States']=HostCountry['USA']
del HostCountry['USA']
HostCountry['United Kingdom']=HostCountry['England']
del HostCountry['England']
HostCountry=[[i,HostCountry[i]] for i in HostCountry]

c=(
    Map(init_opts=opts.InitOpts(width='1150px'))
        .add(
            series_name="举办国家",
            data_pair=HostCountry,
            maptype="world",
        )
        # 全局配置项
        .set_global_opts(
            # 设置标题
            title_opts=opts.TitleOpts(title="世界地图"),
            # 设置标准显示
            visualmap_opts=opts.VisualMapOpts(max_=2, is_piecewise=False),
        )
        # 系列配置项
        .set_series_opts(
            # 标签名称显示,默认为True
            label_opts=opts.LabelOpts(is_show=False, color="blue"),showLegendSymbol=False
        )
        # 生成本地html文件
        .render("世界地图.html")
        )

只能说有的国家都举办二轮了,有的国家连一轮都没举办过 ,当然这和地区经济也有关,可以看在亚洲举办的次数最少,在欧洲举办的次数是最多的,像墨西哥,巴西,法国等都举办了两次了。

然后再看看夺冠国家的分布吧,这里英国的名字需要自己修改一下,不如又识别不了

Winner=df.groupby(['Winner']).groups
for i in Winner :
    Winner[i]=len(Winner[i])
Winner['Germany']=Winner['Germany FR']+Winner['Germany']
del Winner['Germany FR']
Winner['United Kingdom']=Winner['England']
del Winner['England']
Winner=[[i,Winner[i]] for i in Winner]
# Winner.columns=['nums']
c=(
    Map(init_opts=opts.InitOpts(width='1150px'))
        .add(
            series_name="夺冠国家",
            data_pair=Winner,
            maptype="world",
        )
        # 全局配置项
        .set_global_opts(
            # 设置标题
            title_opts=opts.TitleOpts(title="世界地图"),
            # 设置标准显示
            visualmap_opts=opts.VisualMapOpts(max_=5, is_piecewise=True),
        )
        # 系列配置项
        .set_series_opts(
            # 标签名称显示,默认为True
            label_opts=opts.LabelOpts(is_show=False, color="blue"),showLegendSymbol=False
        )
        # 生成本地html文件
        .render("夺冠国家分布.html")
        )

 可以看出,巴西强呀,拿过五次冠军,德国也不弱呀,也拿了四次,整体来看,还是欧洲实力强劲,欧洲总共拿了12次冠军,剩下的就是南美洲拿了,其他洲呢呜呜呜,搞得像是个南美与欧洲的游戏似的。

然后这里只分析了第一个表,后面还有两个表的数据没有分析,我后面会更新在后面,现在先把前面的写了,怕后面忘了哇哈哈哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS即将停止维护,拥抱阿里“龙蜥“(Anolis OS),VMware安装Anolis OS与介绍

一、前言 大家在自己电脑来进行服务器的一些操作时,基本都是使用CentOS 7或者是CentOS 8,但是2021年底CentOS 8宣布停止了维护;CentOS 7 在2024年6月30日也会停止维护! 所以我们是时候换一个操作系统了,经过十几年的…

[319]. 灯泡开关

[319]. 灯泡开关题目算法设计:完全平方数题目 传送门:https://leetcode.cn/problems/bulb-switcher/ 算法设计:完全平方数 问题是有多少灯是亮的。 那怎么样灯才会亮呢? 点偶数次相当于没点,开了又关。只有点奇…

标准库中的string类

深爱学习的你,在很多场景下一定经常和字符串打交道! 字符串是以‘\0’结尾的字符合集,C语言中提供了一些库函数来处理字符串,让大家在写代码的过程中方便了许多: 字符串函数_Bug程序员小张的博客-CSDN博客字符串函数https://blog…

基于Simulink的带通BPSK信号调制解调实验报告(含代码和slx文件)

重要声明:为防止爬虫和盗版贩卖,文章中的核心代码和数据集可凭【CSDN订阅截图或公z号付费截图】私信免费领取,一律不认其他渠道付费截图! 摘要 数字相位调制又称为相移键控(Phase Shift Keying,PSK),是一种十分重要的基本数字调制技术,是一种用载波相位表示输入信号…

磨金石教育摄影技能干货分享|有哪些风格独特的摄影作品

1 奋勇向前照片中退却的海浪与冲上岸的海浪交汇拍打,形成大量的白色泡沫。于是画面被平均分成两部分,分割线由左上延伸到右下,一条明显的对角线。也让画面形成对称式的构图,所以照片看着既平衡又美观。作者给照片起名为《奋勇向前…

Docker安装MySQL、MySQL主从复制、双主双从

文章目录Docker安装MySQL新建容器配置,记得 重启加载配置!测试MySQL 主从复制原理新增两个mysql,一主一从在主机上在从机上MySQL双主双从必看!创建容器在两个主机上在两个从机上问题解决Navicat无法连接MySQL的问题WARNING: IPv4 forwarding is disabled…

计算机网络概况

1 前言计算机网络是指将位于不同地理位置,但具有独立功能的多台设备,通过通信设备和线路连接起来,在网络操作系统,网络管理软件、网络通信协议的协调管理下,实现资源共享和信息传递的计算机系统。简单来说,…

智慧农业灌溉系统-数字农业-农业物联网机井灌溉节水新模式

平升电子智慧农业灌溉系统/农业物联网机井灌溉系统,可实现井电双控(以电控水)、以电折水、以阀控水等各种形式的地下取水井用水计量监测控制需求,助推农业水价改革实施、高效节水灌溉和地下水超采综合治理,促进节水型社…

Python数学建模问题总结(2)数据可视化Cookbook指南·上

概括总结:一、可视化问题1.不会可视化图标;2.可视化效果不好看;3.数据可视化成果无法得到很好的推广使用。二、可视化原则准确的、有帮助的、可扩展的。三、类型1.随时间变化;2.类别比较图表;3.排名列表:有…

proc文件系统下各参数解析

文章目录一、proc文件系统1.1 /proc/[pid]1.1.1 /proc/[pid]/arch_status1.1.2 /proc/[pid]/attr1.1.2.1 /proc/[pid]/attr/current1.1.2.2 /proc/[pid]/attr/exec1.1.2.3 /proc/[pid]/attr/fscreate1.1.2.4 /proc/[pid]/attr/keycreate1.1.2.5 /proc/[pid]/attr/prev1.1.2.6 /…

【操作系统】 第一章 操作系统概述

文章目录第一章 知识体系1.1 操作系统的基本概念1.1.1 操作系统的概念1.1.2 操作系统的特征1.1.3 操作系统的目标和功能1.2 操作系统的发展历程1.3 操作系统的运行环境1.3.1 处理器的运行模式1.3.2 中断和异常的概念1.3.3 系统调用1.4 操作系统结构1.5 操作系统引导1.6 虚拟机第…

C++进阶 红黑树封装map和set

作者:小萌新 专栏:C进阶 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:使用红黑树封装出map和set 红黑树封装map和set红黑树源代码红黑树模板参数的控制红黑树结点当中存储的数据模板参数仿函数的增加正向迭…

react基础Day04-React原理揭秘React路由基础

React原理揭秘 目标 能够说出React组件的更新机制能够对组件进行性能优化能够说出虚拟DOM和DIff算法 组件更新机制 setState() 的两个作用 修改state更新组件 过程:父组件重新渲染时,也会重新渲染子组件,但只会渲染当前组件子树&#xff…

[Android Studio]查看和修改Android API SDK的配置

🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 📋笔记目…

高并发系统设计 -- 缓存与数据库一致性问题详细讲解

CAP理论 首先来谈一下数据的一致性这个话题,所谓的一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中的数据的值是一致的。 强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读…

steam搬砖项目,信息差赚钱,内含全部讲解

Steam平台就是一个全球的游戏平台,搬砖主要是搬的一款火遍全球的游戏CSGO的装备和饰品。CS听说过吧,这款游戏就是CS的一个系列。(通俗易懂的理解就是,从国外steam游戏平台购买装备,再挂到国内网易buff平台上进行售卖。…

【TypeScript】TS进阶-装饰器(九)

🐱个人主页:不叫猫先生 🙋‍♂️作者简介:前端领域新星创作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏:vue3从入门到…

ADI demo PL工程的编译-以adrv9371x_zc706为例子之使用Cygwin

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ADI demo PL工程的编译-以adrv9371x_zc706为例子之使用Cygwin前言Cygwin 安装工程编译总结前言 之前一篇ADI demo工程的编译是ADI不推荐的方法,而且确实在后面NO…

【Django项目开发】django的信号机制(八)

文章目录1、什么是信号2、代码实现3、要想上面定义的信号机制生效,需要在apps.py中加载信号机制1、什么是信号 通俗来说,信号就是通信双方约定的一种信息通知方式,双方通过信号来确定发生了什么事情,然后决定自己应该做什么。 Django 中的信号用于在框架执行操作时解耦。当某…

2.1总线概述

文章目录一、总线简图二、概念与分类1.总线定义2.总线特点(1)分时(2)共享3.总线特性4.总线的分类(1)按数据传输格式①串行总线②并行总线(2)按总线功能①片内总线②系统总线③通信总…