2018世界杯

前言

在网上找到了个用Python分析2018世界杯夺冠热门的项目,感觉很有意思准备拿来练练手。

因为目前还没有学到图形可视化部分,所以这部分内容会完全借鉴网上的教程。

分析目的

通过数据分析找出哪些队伍是这次世界杯的夺冠热门球队

开发环境

Python 3.7

SublimeText2

初步分析数据情况

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from pandas import DataFrame,Series

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

print(df.head())

由于sublimetext上打印数据显示不全,所以打印数据放在ipython中了

In [39]: df.head()

Out[39]:

date home_team away_team home_score away_score tournament city country neutral

0 1872-11-30 Scotland England 0 0 Friendly Glasgow Scotland False

1 1873-03-08 England Scotland 4 2 Friendly London England False

2 1874-03-07 Scotland England 2 1 Friendly Glasgow Scotland False

3 1875-03-06 England Scotland 2 2 Friendly London England False

4 1876-03-04 Scotland England 3 0 Friendly Glasgow Scotland False

目前包含有9种数据:日期、主队名、客队名、主队进球数、客队进球数、比赛类型、所在城市、所在国家、是否中立。

但是想要知道夺冠热门球队,光这些数据还不够。

分析思路

因为我们这次分析的是世界杯的夺冠热门,首先需要排除掉像友谊赛,亚洲杯等比赛数据。

这批数据是从1873年至2014年的比赛数据,所以一个国家队肯定换过好多批阵容了,早年强的队伍近期不一定强,需要以时间段对它们进行分析。

想要分析黑马球队,需要一个球队的胜率以及进球数。目前数据中缺少胜利队伍的变量,需要我们加进去。

获取世界杯相关数据

# 通过在比赛类型中抓取包含'FIFA'字符来获取世界杯数据

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

# 其中世界杯类型的数据也蛮乱的,‘FIFA World Cup’以及‘FIFA World Cup qualification’都有,只提取‘FIFA World Cup’部分

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

print(df_FIFA.head())

整理数据

要分析球队的获胜场数,需要添加一个获胜队伍的字段。

为了方便分割年份,添加一个‘届数’的字段。

统一时间数据格式

# 在做数据修改以前,先做拷贝

df_FIFA_COPY = df.copy()

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

df_FIFA_COPY['session'] = df_FIFA_COPY['date'].dt.year

# 添加分差值,方便后面确定获胜队伍

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

df_FIFA_COPY['win_team'] = ''

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

上面部分添加了年份这个参数,添加了获胜队伍的参数还未填入数据,还确定了分差值。

确认获胜队伍,填入win_team参数中

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

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

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

print(df_FIFA_COPY.head())

结果如下:

date home_team away_team ... session diff_score win_team

1277 1930-07-13 Belgium USA ... 1930 -3 USA

1278 1930-07-13 France Mexico ... 1930 3 France

1279 1930-07-14 Brazil Yugoslavia ... 1930 -1 Yugoslavia

1280 1930-07-14 Peru Romania ... 1930 -2 Romania

1281 1930-07-15 Argentina France ... 1930 1 Argentina

现在已经获得了获胜队伍的数据,接下来通过对获胜队伍这个参数的统计来分析出前20强队伍:

获取获胜场数最多的前20强比赛队伍

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

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

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

显示柱形图

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

plt.show()

1.png

柱状图中已经明确显示了前20强的队伍,其中巴西、德国、意大利、阿根廷、西班牙、法国等最为突出,他们的胜场占比非常的高。

再来查看下饼图情况:

#

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

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

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

# 饼图

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='')

WechatIMG37.png

通过百分比更能清晰的看到强队在整个世界杯历史中胜场比数。初步分析下来,从赢球场数来看,巴西、德国、意大利、阿根廷四支球队实力最强。

接下来在分析下各队的进球数情况

# 进球数统计

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')

plt.show()

WechatIMG38.png

从进球数的分析结果来看,德国、巴西、阿根廷、意大利这四支球队最强,结合上面的胜场数分析同样也是这四支球队排名最靠前。

开篇准备的分析思路里第一条和第三条已经完成了。

分析1872年以来按胜场数排名的32强数据情况

df_top32 = df_FIFA_COPY.copy()

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')

WechatIMG40.png

再看看从1978年至今的胜场排名前32队伍数据

df_since1978 = df_FIFA_COPY.loc[df_FIFA_COPY['session'] >= 1978]

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

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

s_32 = s_32[:32]

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 1978')

plt.show()

WechatIMG41.png

然后是自1978年以来的进球数排名前32队伍相关数据:

df_score_home = df_since1978[['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=s_score[:32]

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

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

plt.show()

代码都差不多就不再重复解释了

WechatIMG42.png

在这两组数据中,巴西、阿根廷、德国、意大利排名稳坐前四。

再分析下从2002年以来的相关数据情况:

自2002以来胜场排名数据:

2002-winteam.png

自2002以来得分排名数据:

2002-score.png

个人分析总结:

从这两组数据中可以看到,德国队在胜场和得分数上有很大的优势。虽然个人不大懂如何分析球队,但是光看这个数据觉得德国队在2018世界杯的赢面还是蛮大的。而排名第二、三的巴西、阿根廷、意大利在数据上明显差了德国队一截。

最终结论:2018世界杯冠军应该在前四强德国、巴西、意大利、阿根廷中产出。此次数据分析当做练习来用,而且2018年世界杯老早已经过了。

技术总结

在这里主要涉及到了一些基础功能点:

读取csv文件

数据整理:去除了和世界杯无关的数据、添加新变量获胜队伍win_team,diff_score分差值、

按关键字对数据排序

matplotlib库的初步使用,生成柱形图和饼图

数据分割与截取

python分析比赛_实战项目练习 ---- 【2018世界杯】用python分析夺冠球队相关推荐

  1. python十个运维实战项目_干货 | 这4个Python实战项目,让你瞬间读懂Python!

    Python是一种极具可读性和通用性的编程语言.Python这个名字的灵感来自于英国喜剧团体Monty Python,它的开发团队有一个重要的基础目标,就是使语言使用起来很有趣.Python易于设置, ...

  2. Python爬虫入门学习实战项目(一)

    静态数据的采集 第一个项目我们来抓取拉勾网的招聘信息,话不多说直接开始吧! 1.首先我们导入相关库: import requests from lxml import etree import pan ...

  3. 小白到学会python要多久_零基础小白多久能学会python

    学习任何一门编程语言,都是为了去实现一个个项目,来解决实际的问题.无论项目是大还是小,都关联着许多知识与技能. 例如要写一个「文件资源管理器」的应用,就需要MVC设计模式.组件化构建.对象集合及操作. ...

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

    比赛已经开始,我们不妨用 Python 来对参赛队伍的实力情况进行分析,并大胆的预测下本届世界杯的夺冠热门球队吧! 通过数据分析,可以发现很多有趣的结果,比如: 找出哪些队伍是首次进入世界杯的黑马队伍 ...

  5. python分析比赛_世界杯:用Python分析热门夺冠球队-(附源代码)

    2018年,火热的世界杯即将拉开序幕.在比赛开始之前,我们不妨用 Python 来对参赛队伍的实力情况进行分析,并大胆的预测下本届世界杯的夺冠热门球队. 通过数据分析,可以发现很多有趣的结果,比如: ...

  6. python分析比赛_最强观战指南 | Python分析热门夺冠球队(附源代码)

    2018年,火热的世界杯即将拉开序幕.在比赛开始之前,我们不妨用 Python 来对参赛队伍的实力情况进行分析,并大胆的预测下本届世界杯的夺冠热门球队. 通过数据分析,可以发现很多有趣的结果,比如: ...

  7. 学python编程能做什么项目_十个Python练手的实战项目,学会这些Python就基本没问题了...

    python项目练习一:即时标记 这是<python基础教程>后面的实践,照着写写,一方面是来熟悉python的代码方式,另一方面是练习使用python中的基本的以及非基本的语法,做到熟能 ...

  8. python爬上市公司信息_实战项目 1:5 行代码爬取国内所有上市公司信息

    实战项目 1:5 行代码爬取国内所有上市公司信息 Python入门爬虫与数据分析 在正式开始这门专栏课的学习之前,我们先来看一个简单的爬虫案例.兴趣是最好的老师,当你对爬虫产生兴趣的时候,才会更有动力 ...

  9. python 播放本地音乐_实战项目—python实现本地音乐播放器

    随着网络的发展,我们已经很少将音乐下载到本地,而是直接在线听歌,方便而又直接.也许你用的音乐播放器是这个 也许是这个 这都不是重点,今天我们要用python自己打造一款音乐播放器. 具体思路 使用py ...

最新文章

  1. jeecg富文本编辑器增加字体(仿宋)
  2. 级联人脸检测--Detecting Faces Using Inside Cascaded Contextual CNN
  3. Python函数传参方式超级大汇总
  4. java 增量,Java增量运算符查询(++ i和i ++)
  5. 2010世界杯主题曲夏奇拉献唱《Waka Waka》
  6. XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager,
  7. Vue3 Composition API(一)——setup、reactive、ref、readonly
  8. cdh 差异_“Sahara/CDHPlugin”的版本间的差异
  9. excel python自动化_excel表自动化-python
  10. [windows]mstsc远程报:这可能是由于CredSSP 加密Oracle修正的解决方法
  11. 洛谷 P2578 [ZJOI2005]九数码游戏【bfs+康托展开】
  12. 如何用tomcat发布自己的Java项目
  13. php中sql语句有啥用,php中sql语句
  14. 这样 PDF 的技术简历,HR根本不想看,谈何到面试官手中?
  15. 1:72 美M26龙式重型坦克拖车
  16. WPF 做的时钟表盘 加上天气预报
  17. 【论文笔记】2022-CVPR-深度估计
  18. session是什么
  19. wordpress备份和还原和迁移
  20. html在线印章,纯前端Html+JavaScript+canvas生成公章

热门文章

  1. GS1条形码为什么那么贵?有什么便宜的办法吗?
  2. AML与PIO整合问题
  3. 富文本转化为普通文本
  4. 3D打印机喷头堵塞维修
  5. compact mysql_PHP compact() 函数
  6. win10系统更新服务器失败怎么回事,Win10总是更新失败怎么办?Windows更新出现更新失败的解决方法...
  7. 如何设置谷歌浏览器背景图片
  8. 数学建模05-元胞自动机
  9. 如何进行日内趋势量化交易系统的设计?这篇文章可以给你启发!
  10. Lambda expression are not supported at language level '5'