python编程比赛_用Python编程分析4W场球赛后,2018世界杯冠军竟是…

比赛已经开始,我们不妨用 Python 来对参赛队伍的实力情况进行分析,并大胆的预测下本届世界杯的夺冠热门球队吧!

46c8043134b64dd4d2cc4a34b7c94455.png

通过数据分析,可以发现很多有趣的结果,比如:

找出哪些队伍是首次进入世界杯的黑马队伍

找出2018年32强中之前已经进入过世界杯,但在世界杯上没有赢得过一场比赛的队伍

当然,我们本次的主要任务是要通过数据分析来预测2018年世界杯的夺冠热门队伍。

本次分析的数据来源于 Kaggle, 包含从 1872 年到今年的数据,包括世界杯比赛、世界杯预选赛、亚洲杯、欧洲杯、国家之间的友谊赛等比赛,一共大约 40000 场比赛的情况。

本次的环境为:

window 7 系统

python 3.6

Jupyter Notebook

pandas version 0.22.0

先来看看数据的情况:

importpandasaspd

importmatplotlib.pyplotasplt

%matplotlib inline

plt.style.use('ggplot')

df = pd.read_csv('results.csv')

df.head()

该数据集包含的数据列的信息如下:

日期

主队名称

客队名称

主队进球数 (不含点球)

客队进球数 (不含点球)

比赛的类型

比赛所在城市

比赛所在国家

是否中立

结果如下:

be5d64d438c598e76a9d94ace98cf364.png

1、 获取所有世界杯比赛的数据

df_FIFA_all = df[df['tournament'].str.contains('FIFA', regex=True)]

df_FIFA = df_FIFA_all[df_FIFA_all['tournament']=='FIFA World Cup']

df_FIFA.head()

结果如下:

6756a02d567365b08ab9b403cf01601f.png

数据做一个初步整理

df_FIFA.loc[:,'date'] = pd.to_datetime(df_FIFA.loc[:,'date'])

df_FIFA['year'] = df_FIFA['date'].dt.year

df_FIFA['diff_score'] = df_FIFA['home_score']-df_FIFA['away_score']

df_FIFA['win_team'] =''

df_FIFA['diff_score'] = pd.to_numeric(df_FIFA['diff_score'])

创建一个新的列数据,包含获胜队伍的信息

# The first method to get the winners

df_FIFA.loc[df_FIFA['diff_score']>0,'win_team'] = df_FIFA.loc[df_FIFA['diff_score']>0,'home_team']

df_FIFA.loc[df_FIFA['diff_score']<0,'win_team'] = df_FIFA.loc[df_FIFA['diff_score']<0,'away_team']

df_FIFA.loc[df_FIFA['diff_score']==0,'win_team'] ='Draw'

df_FIFA.head()

# The second method to get the winners

deffind_win_team(df):

winners = []

fori, rowindf.iterrows():

ifrow['home_score'] > row['away_score']:

winners.append(row['home_team'])

elifrow['home_score'] < row['away_score']:

winners.append(row['away_team'])

else:

winners.append('Draw')

returnwinners

df_FIFA['winner'] = find_win_team(df_FIFA)

df_FIFA.head()

结果如下:

69d91416460fe9402969812300e9735e.png

2、 获取世界杯所有比赛的前20强数据情况

2.1 获取世界杯所有比赛获胜场数最多的前20强数据

s = df_FIFA.groupby('win_team')['win_team'].count()

s.sort_values(ascending=False, inplace=True)

s.drop(labels=['Draw'], inplace=True)

用pandas可视化如下:

柱状图

s.head(20).plot(kind='bar', figsize=(10,6), title='Top 20 Winners of World Cup')

48a611518163e57c2962a4bdcbd68b34.png

水平柱状图

s.sort_values(ascending=True,inplace=True)

s.tail(20).plot(kind='barh', figsize=(10,6), title='Top 20 Winners of World Cup')

4b5112462ed10e316a4ab79cdb38b065.png

饼图

s_percentage = s/s.sum()

s_percentage

s_percentage.tail(20).plot(kind='pie', figsize=(10,10), autopct='%.1f%%',

startangle=173, title='Top 20 Winners of World Cup', label='')

f522c4d3b2cf39768b8003485b1e372a.png

分析结论1:

从赢球场数来看,巴西、德国、意大利、阿根廷四支球队实力最强。

通过上面的分析,我们还可以来查看部分国家的获胜情况

s.get('China',default='NA')

s.get('Japan',default='NA')

s.get('Korea DPR',default='NA')

s.get('Korea Republic',default='NA')

s.get('Egypt',default='NA')

运行结果分别是 ‘NA’,4,1,5,‘NA’。

从结果来看,中国队,在世界杯比赛上(不含预选赛)还没有赢过。当然,本次世界杯的黑马-埃及队,之前两度进入世界杯上,但也没有赢过~~

上面分析的是赢球场数的情况,下面我们来看下进球总数情况。

2.2 各个国家队进球总数量情况

df_score_home = df_FIFA[['home_team','home_score']]

column_update = ['team','score']

df_score_home.columns = column_update

df_score_away = df_FIFA[['away_team','away_score']]

df_score_away.columns = column_update

df_score = pd.concat([df_score_home,df_score_away], ignore_index=True)

s_score = df_score.groupby('team')['score'].sum()

s_score.sort_values(ascending=False, inplace=True)

s_score.sort_values(ascending=True, inplace=True)

s_score.tail(20).plot(kind='barh', figsize=(10,6), title='Top 20 in Total Scores of World Cup')

3bd67740d893d08183e55dd4eb56fcb2.png

分析结论2:

从进球总数量来看,德国、巴西、阿根廷、意大利四支球队实力最强。

上面分析的是自1872年以来的所有球队的数据情况,下面,我们重点来分析下2018年世界杯32强的数据情况。

3、2018年世界杯32强分析

2018年世界杯的分组情况如下:

第一组:俄罗斯、德国、巴西、葡萄牙、阿根廷、比利时、波兰、法国

第二组:西班牙、秘鲁、瑞士、英格兰、哥伦比亚、墨西哥、乌拉圭、克罗地亚

第三组:丹麦、冰岛、哥斯达黎加、瑞典、突尼斯、埃及、塞内加尔、伊朗

第四组:塞尔维亚、尼日利亚、澳大利亚、日本、摩洛哥、巴拿马、韩国、沙特阿拉伯

获取32强的所有数据

首先,判断是否有队伍首次打入世界杯。

team_list = ['Russia','Germany','Brazil','Portugal','Argentina','Belgium','Poland','France',

'Spain','Peru','Switzerland','England','Colombia','Mexico','Uruguay','Croatia',

'Denmark','Iceland','Costa Rica','Sweden','Tunisia','Egypt','Senegal','Iran',

'Serbia','Nigeria','Australia','Japan','Morocco','Panama','Korea Republic','Saudi Arabia']

foriteminteam_list:

ifitemnot ins_score.index:

print(item)

out:

Iceland

Panama

通过上述分析可知,冰岛队和巴拿马队是首次打入世界杯的。

由于冰岛队和巴拿马队是首次进入世界杯,所以这里的32强数据,事实上是没有这两支队伍的历史数据的。

df_top32 = df_FIFA[(df_FIFA['home_team'].isin(team_list))&(df_FIFA['away_team'].isin(team_list))]

3.1 自1872年以来,32强数据情况

赢球场数情况

s_32 = df_top32.groupby('win_team')['win_team'].count()

s_32.sort_values(ascending=False, inplace=True)

s_32.drop(labels=['Draw'], inplace=True)

s_32.sort_values(ascending=True,inplace=True)

s_32.plot(kind='barh', figsize=(8,12), title='Top 32 of World Cup since year 1872')

49d234c1bdce0319f4454e004ca3e608.png

进球数据情况

df_score_home_32 = df_top32[['home_team','home_score']]

column_update = ['team','score']

df_score_home_32.columns = column_update

df_score_away_32 = df_top32[['away_team','away_score']]

df_score_away_32.columns = column_update

df_score_32 = pd.concat([df_score_home_32,df_score_away_32], ignore_index=True)

s_score_32 = df_score_32.groupby('team')['score'].sum()

s_score_32.sort_values(ascending=False, inplace=True)

s_score_32.sort_values(ascending=True, inplace=True)

s_score_32.plot(kind='barh', figsize=(8,12), title='Top 32 in Total Scores of World Cup since year 1872')

e05f1c4ef5134d29f111e5fd24e2bb22.png

分析结论3:自1872年以来,32强之间的世界杯比赛,从赢球场数和进球数量来看,德国、巴西、阿根廷三支球队实力最强。

自1872年到现在,已经有100多年,时间跨度较大,有些国家已发生重大变化,后续分别分析自1978年(近10届)以及2002年(近4届)以来的比赛情况。

程序代码是类似的,这里只显示可视化的结果。

3.2 自1978年以来,32强数据情况

赢球场数情况

91c9ec3450eae527446b07f13dd1e4f1.png

进球数据情况

087a749f9554d13e5e6aebe4bb956a08.png

分析结论4:自1978年以来,32强之间的世界杯比赛,从赢球场数来看,阿根廷、德国、巴西三支球队实力最强。从进球数量来看,前3强也是这三支球队,但德国队的数据优势更明显。

3.3 自2002年以来,32强数据情况

赢球场数情况

dee998eb655e8fd63300fa064a99d425.png

进球数据情况

728abd1a563318d3c079afdfd02a7d73.png

分析结论5:自2002年以来,32强之间的世界杯比赛,从赢球场数和进球数量来看,德国、阿根廷、巴西三支球队实力最强。其中,德国队的数据优势更明显。

4、综合结论

2018年世界杯的32支队伍,根据以往的世界杯比赛数据来看,预测前三强为德国、阿根廷和巴西,其中德国队应该是夺冠的最大热门。

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

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

相关文章

GlassFish 3.1.2充满了MOXy(EclipseLink JAXB)

我非常高兴地宣布&#xff0c; EclipseLink JAXB&#xff08;MOXy&#xff09;现在是GlassFish 3.1.2中的JAXB&#xff08; JSR-222 &#xff09;提供程序。 我要感谢EclipseLink和GlassFish提交者为实现这一目标付出的​​辛勤工作。 在本文中&#xff0c;我将介绍如何利用MOX…

梦断代码阅读笔记03

读完《梦断代码(Dream In Code)》样书&#xff0c;我感觉心情有点沉重&#xff0c;Chandler项目的结局&#xff0c;它失败了&#xff0c;它成了众多失败软件项目中的一个。这个结局让那个我感受到软件实在是太难了&#xff0c;我觉得当初选这个专业可能到最后只是一个码农。但是…

Java访问权限的范围

二、下面用表格来展示四种修饰符的访问权限范围&#xff1a; 同一个类 同一个包 不同包的子类 不同包的非子类 public √ √ √ √ protected √ √ √ 默认(default) √ √ private √ 转载于:https://www.cnblogs.com/jianxin-lilang/p/6…

JavaFX 2 GameTutorial第2部分

介绍 Ť他的是一系列与一个JavaFX 2游戏教程博客条目的第二批。 如果您尚未阅读第1部分&#xff0c;请参阅JavaFX 2游戏教程的简介部分。 在第1部分中&#xff0c;我提到了游戏的某些方面以及原型飞船的简单演示&#xff08;原型由简单的形状组成&#xff09;&#xff0c;该飞船…

sqlyog连接mysql教程_如何用SQLyog实现远程连接MySQL

SQLyog客户端&#xff0c;用root用户远程链接MySQL时&#xff0c;提示ldquo;访问被拒绝rdquo;&#xff0c;在网上搜索了一下原因。原来是MySQL没有授权其远程链1&#xff0c;SQLyog客户端&#xff0c;&#xff0c;用root用户远程链接MySQL时&#xff0c;提示“访问被拒绝”&…

动态SQL+变量绑定:解决ORA-01704: 字符串文字太长的问题

最近在做一个ESB项目&#xff0c;有一个trigger里面执行动态SQL的时候报错&#xff1a; ORA-01704: 字符串文字太长 经检查发现SQL里面有个字段是clob类型&#xff0c;内容长度4009&#xff0c;在oracle里面&#xff0c; 一对引号内的字符长度如果超过4000&#xff0c;就会报OR…

JavaME:Google静态地图API

无论您是需要基于位置的应用程序的地图还是只是出于娱乐目的&#xff0c;都可以使用有史以来最简单的方法&#xff1a;Google Static Maps API。 在这篇文章中&#xff0c;我们将看到如何从纬度和经度获得地图作为图像。 可以使用Location API获得纬度和经度&#xff0c;我们将…

在ASP.NET中实现OAuth2.0(一)之了解OAuth

1、什么是OAuth2.0 是一个开放授权标准&#xff0c;允许用户让第三方应用访问该用户在某一个网站或平台上的私密资源&#xff08;如照片、视频、联系人等&#xff09;&#xff0c;而无须将用户名和密码提供给第三方应用 2、OAuth2.0授权模式 授权码模式&#xff08;authorizati…

mysql日期条件如何应用_MySQL如何使用时间作为判断条件

背景&#xff1a;在开发过程中&#xff0c;我们经常需要根据时间作为判断条件来查询数据&#xff0c;例如&#xff1a;当月&#xff0c;当日&#xff0c;当前小时&#xff0c;几天内......1. 当月我们只需要使用一个mysql的month(date)函数即可实现。(注意判断年份)month(date)…

深入探讨JS中的数组排序函数sort()和reverse()

最近在研究Javascript发现了其中一些比较灵异的事情。有点让人感到无语比如&#xff1a; alert(typeof( NaN NaN));//结果为假。 alert(typeof( NaN ! NaN));//结果为真。 嘿嘿&#xff0c;当然这个不是这篇文章要讨论的!!开始我们的正文 首先&#xff0c;我们来看一下JS中sor…

带有谓词的Java中的功能样式-第1部分

您一直在听到将要席卷全球的函数式编程&#xff0c;而您仍然坚持使用普通Java&#xff1f; 不用担心&#xff0c;因为您已经可以在日常Java中添加一些功能样式。 此外&#xff0c;它很有趣&#xff0c;可以节省许多代码行并减少错误。 什么是谓词&#xff1f; 实际上&#xff…

宝塔添加多占点_宝塔面板启用WordPress多站点子域名、子目录

其实在很早以前&#xff0c;陌小雨就听说了 wordpress 的多站点功能&#xff0c;不过因为不清楚&#xff0c;所以懒得折腾&#xff0c;这不这几天闲着蛋疼&#xff0c;好好研究了下这玩意&#xff0c;用起来的感觉还是相当不错的&#xff0c;总结起来就是如果你准备开始用 word…

centos 6.5下安装文件上传下载服务

centos 6.5下安装文件上传下载服务 由于每次在CentOS中要下载一些配置文件到物理机&#xff0c;和上传一些文件到服务器&#xff0c;导致来回的开启ftp软件有点麻烦&#xff0c;这里我们可以使用文件上传下载服务&#xff0c;来解决上传和下载的问题。 1.登录服务器 2.执行命令…

Jenkins 入门系列--jenkins 介绍

第一章 Jenkins是什么&#xff1f; Jenkins 是一个可扩展的持续集成引擎。 主要用于&#xff1a; l 持续、自动地构建/测试软件项目。 l 监控一些定时执行的任务。Jenkins拥有的特性包括&#xff1a; l 易于安装-只要把jenkins.war部署到servlet容器&#xff0c;不需要数据库支…

在方法参数上使用final关键字

经过一些自己的混淆&#xff0c;最终博客方法的具体含义&#xff08;最终声明的方法参数&#xff09;将对此博客条目进行澄清。 至少可以将方法参数上的final关键字视为Java编译器的指示符&#xff0c;表明该参数不能重新分配给另一个引用。 Java参数处理始终是“按值调用” &a…

PHP MySQLi 增删改查

最近几天&#xff0c;我们一直在学习利用MySQLi访问数据库并对其中的数据进行操作。今天给大家展现一个完整的例子&#xff0c;我们来制作一个新闻发布系统&#xff0c;利用MySQLi来操作数据库&#xff0c;实现对新闻的添加、修改、删除、查询等基本功能。&#xff08;以下代码…

20162303《程序设计与数据结构》第一周学习总结

学号 2016-2017-2 《程序设计与数据结构》第1周学习总结 教材学习内容总结 本周学习了基本的JAVA知识&#xff0c;虽然比较基础&#xff0c;但是在实际过程中还是出现了许许多多的问题&#xff0c;代码一遍遍的敲错&#xff0c;又一遍遍的修改&#xff0c;刚开始甚至不会切换模…

Java EE与NoSQL的未来

自一段时间以来&#xff0c;我一直在关注NoSQL的近期发展势头&#xff0c;似乎这个流行语也引起了企业Java界的某种关注。 即EclipseLink 2.4开始支持MongoDB和Oracle NoSQL 。 将EclipseLink作为JPA参考实现&#xff0c;您可能想知道这对Java EE 7意味着什么。这里简短说明&am…

【C/C++开发】C语言实现函数可变参数

函数原型: int printf(const char *format[,argument]...) 返 回 值: 成功则返回实际输出的字符数&#xff0c;失败返回-1. 函数说明: 在printf()函数中&#xff0c;format后面的参数个数不确定&#xff0c;且类型也不确定&#xff0c;这些参数都存放在栈内.调用…

java postgresql json_java – 将PostgreSQL JSON列映射到Hibernate值类...

See PgJDBC bug #265.PostgreSQL对数据类型转换过于严格,非常严格.它不会隐式地将文本转换为类似文本的值,例如xml和json.解决此问题的严格正确方法是编写使用JDBC setObject方法的自定义Hibernate映射类型.这可能有点麻烦,所以你可能只想通过创建一个较弱的强制转换来使Postgr…