#世界杯征文活动 #Python #2022卡塔尔世界杯 #FIFA World Cup Qatar 2022 # 机器学习 #数据分析 用Python预测世界杯决赛

 

       今天2022年11月29日的凌晨,葡萄牙队2比0获击败乌拉圭队!葡萄牙队提前晋级16强,你熬夜看这场比赛了吗? 今天晚上11点荷兰将对战卡塔尔,NED(荷兰)有望取胜!

       现在让我们通过Python数据分析以及机器学习等方式来预测一下谁能获得最后的冠军,当然最后预测出来的结果也仅仅只是作为一种参考,并不代表最后真实的结果。

目录

1.数据集的准备

2.模块和数据集的导入 

2.1 导入数据集 

2.2 校验数据

3.探索性数据分析和特征工程

4.俄罗斯世界杯的参赛队伍 

5.逻辑回归算法

6.预测结果

7.2022年卡塔尔世界杯小组赛的预测


文中使用数据库的下载地址

1.数据集的准备

       在这里我们用到的数据集是来自kaggle的公开数据集,其中的一份数据集是2018年俄罗斯世界杯每小组各成员交手的记录,最后小编的预测基于该份数据集的基础之上,另外一份数据集则是从1870年开始到2022年截止,所有参赛球队的历史交手成绩汇总。那么我们首先导入要用到的模块以及导入数据集。

2.模块和数据集的导入 

      数据分析和可视化要用到的模块分别是pandasmatplotlib以及seaborn,而机器学习预测要用到的模块是sklearn,代码如下:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as sns 
import matplotlib.ticker as ticker 
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

2.1 导入数据集 

      接着让我们导入数据集,代码如下:

world_cup = pd.read_csv("World_Cup_2018_Dataset.csv")results = pd.read_csv("results.csv")

2.2 校验数据

       我们可以通过head()方法来查看导入数据及的前几行,校验一下数据的导入是否成功,代码如下 :

world_cup.head()

 output

      

3.探索性数据分析和特征工程

       接下来我们要做的便是探索性数据分析和特征工程了,来对数据集有一个大致的了解,同时生成一些针对最后的预测大有帮助的特征出来,例如我们针对比赛当中的比分来判断比赛是谁胜谁负,或者是平局,代码如下:

winner = []
for i in range(len(results["home_team"])):if results["home_score"][i] > results["away_score"][i]:winner.append(results["home_team"][i])elif results["home_score"][i] < results["away_score"][i]:winner.append(results["away_team"][i])else:winner.append("Draw")results["winning_team"] = winner
results["goal_difference"] = np.absolute(results["home_score"] - results["away_score"])
results.head()

output 

       紧接着我们针对某个单独的国家,统计历史过往中所有比赛的胜负率情况,例如阿根廷队,就筛选出阿根廷队的历史战绩,代码如下 :

df = results[(results["home_team"] == "Argentina") | (results["away_team"] == "Argentina")]
argen = df.iloc[:]
argen.head()

 output

图片

       那么同时我们也知道第一届世界杯举办的时间是1930年在乌拉圭举办的,那么筛选出在1930年之后的所有比赛的成绩,代码如下:

year = []
for row in argen['date']:year.append(int(row[:4]))
argen["match_year"] = year
argen_1930 = argen[argen.match_year >= 1930]
argen_1930.head()

output

      我们将比赛的结果的统计可视化,我们就能清晰地看到阿根廷球队的胜负率的情况,代码如下:

x = ["Argentina","Loss","Draw"]y = [474, 220, 173] 
sns.barplot(x, y)plt.title("win games vs loss games")
plt.xlabel("win vs loss")plt.ylabel("count")plt.show()

 output

图片

4.俄罗斯世界杯的参赛队伍 

        我们先将目标锁定在2018年俄罗斯世界杯的参赛队伍上,总共是以下这几支球队:

world_cup_russia = ["Australia", "Iran", "Japan", "Korea Republic", "Saudi Arabia", "Egypt", "Morocco",                   "Nigeria", "Senegal", "Tunisia", "Costa Rica", "Mexico", "Panama", "Argentina", "Brazil",                     "Colombia", "Peru", "Uruguay", "Belgium", "Croatia", "Denmark", "England", "France",                     "Germany", "Iceland", "Poland", "Portugal", "Russia", "Serbia", "Spain", "Sweden", "Switzerland"]

       然后我们筛选出来这32支球队的过往的比赛成绩,代码如下:

df_team_home = results[results['home_team'].isin(world_cup_russia)]
df_team_away = results[results['away_team'].isin(world_cup_russia)]
df_teams = pd.concat((df_team_home, df_team_away))
df_teams.drop_duplicates(inplace=True)df_teams.tail()

output

图片

       我们着重看的是1930年之后的比赛记录,那么我们再进行一次筛选,代码如下 :

year = []
for row in df_teams["date"]:year.append(int(row[:4]))
df_teams["match_year"] = year
df_teams_1930 = df_teams[df_teams.match_year >= 1930]
df_teams_1930.head()

output

图片

       当然我们在最后进行预测的时候,会有一些无关紧要的特征掺杂其中,我们需要将其去掉,代码如下 :

df_teams_1930 = df_teams.drop(['date', 'home_score', 'away_score', 'tournament', 'city', 'country', 'goal_difference', 'match_year'], axis=1)df_teams_1930.tail()

output

图片

       紧接着,我们需要对这些离散类型的变量进行独热编码,用到的是pandas模块当中的get_dummies()方法,代码如下:

# convert home team and away team from categorical variables to continous inputs 
# Get dummy variables
final = pd.get_dummies(df_teams_1930, prefix=['home_team', 'away_team'], columns=['home_team', 'away_team'])
final.head()

output

图片

     划分出训练集和测试集,调用的是train_test_split()方法,代码如下:

# Separate X and y sets
X = final.drop(['winning_team'], axis=1)
y = final["winning_team"]
y = y.astype('int')# Separate train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=42)

5.逻辑回归算法

       这里调用的是非常简单的逻辑回归的算法,读者朋友后续也可以尝试其他的分类算法进一步的完善一下整个预测的流程与结果,代码如下:

logreg = LogisticRegression()
logreg.fit(X_train, y_train)
score = logreg.score(X_train, y_train)
score2 = logreg.score(X_test, y_test)print("Training set accuracy: ", '%.3f'%(score))
print("Test set accuracy: ", '%.3f'%(score2))

6.预测结果

       那么最后便是将我们训练出来的模型去做一个预测了,我们先前的数据集当中有主队和客队之分,但是在世界杯的赛场上没有,这里我们就依据世界排名的先后顺序来划分一下,因此需要导入世界排名的数据集 :

# 导入新的数据集,各球队的世界排名
ranking = pd.read_csv('datasets/fifa_rankings.csv') 
# 2018年俄罗斯世界杯的对阵情况
fixtures = pd.read_csv('datasets/fixtures.csv')pred_set = []

       在数据集当中插入主队和客队排名的字段,代码如下:

# 插入两个新的字段,主队和客队排名的字段
fixtures.insert(1, 'first_position', fixtures['Home Team'].map(ranking.set_index('Team')['Position']))
fixtures.insert(2, 'second_position', fixtures['Away Team'].map(ranking.set_index('Team')['Position']))# 我们筛选出来在小组赛中的对阵情况
fixtures = fixtures.iloc[:48, :]
fixtures.head()

output

图片

    根据排名的高低来重新修正参赛球队是作为主队还是客队,代码如下 :

# Loop to add teams to new prediction dataset based on the ranking position of each team
for index, row in fixtures.iterrows():if row['first_position'] < row['second_position']:pred_set.append({'home_team': row['Home Team'], 'away_team': row['Away Team'], 'winning_team': None})else:pred_set.append({'home_team': row['Away Team'], 'away_team': row['Home Team'], 'winning_team': None})pred_set = pd.DataFrame(pred_set)
backup_pred_set = pred_setpred_set.head()

output

图片

       还是与之前一样,我们要对这些离散类型的变量进行编码,这里就不重复演示了,我们调用训练好的模型并且进行比赛结果的预测,代码如下: 

# 小组赛对决的预测 
predictions = logreg.predict(pred_set)
for i in range(fixtures.shape[0]):print(backup_pred_set.iloc[i, 1] + " and " + backup_pred_set.iloc[i, 0])if predictions[i] == 2:print("Winner: " + backup_pred_set.iloc[i, 1])elif predictions[i] == 1:print("Draw")elif predictions[i] == 0:print("Winner: " + backup_pred_set.iloc[i, 0])print('Probability of ' + backup_pred_set.iloc[i, 1] + ' winning: ', '%.3f'%(logreg.predict_proba(pred_set)[i][2]))print('Probability of Draw: ', '%.3f'%(logreg.predict_proba(pred_set)[i][1]))print('Probability of ' + backup_pred_set.iloc[i, 0] + ' winning: ', '%.3f'%(logreg.predict_proba(pred_set)[i][0]))print("")

output

图片

图片

图片

图片

 7.2022年卡塔尔世界杯小组赛的预测

       上述预测的结果针对的是2018年俄罗斯世界杯小组赛的对阵情况,那么2022年卡塔尔世界杯小组赛的预测,我们只需要将fixture数据集更新一下即可:

fixtures = pd.read_csv("datasets/fifa-world-cup-2022.csv")fixtures.head()

output

最后预测出来的结果如下所示

图片

图片

图片

图片


 

感谢您的阅读,如觉得有用请您点赞,您的鼓励是对我的最大动力!

  END 

2022/11/28

联系我:pengyu717@yeah.net

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

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

相关文章

Kaggle时间序列预测相关比赛以及代码

1.预测商品销量比赛 代码1&#xff1a;使用LSTM https://www.kaggle.com/code/sanjaylalwani/lstm-predict-sales 代码2&#xff1a;传统方法AR, MA and ARMA models https://www.kaggle.com/code/jagangupta/time-series-basics-exploring-traditional-ts 代码3&#xff1a;F…

【6月比赛合集】103场可报名的数据挖掘大奖赛,任君挑选!

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 Kaggle&#xff08;7场比赛&#xff09;阿里天池&#xff08;…

Python大数据预测NBA比赛结果

大数据带给我们的是一种生活、工作和思维上的大变革&#xff0c; 当下&#xff0c;NBA季后赛打的正如火如荼&#xff0c;各位球迷肯定希望能提前预测自己喜欢的球队能不能杀入总决赛&#xff0c;拿到总冠军。 今晚&#xff0c;黑马程序员李老师&#xff0c;将为大家带来免费公开…

微信支付兑换今日好礼不再累积提现免费额度;ChatGPT 上线最强应用「代码解释器」;GCC 10.5 发布|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

新手教学,如何快速地画一个PCB板子

楼主是一名在校大学生&#xff0c;接触画板有大半年了&#xff0c;也画了几十个板&#xff0c;现在想总结一下&#xff0c;发表一下自己的经验。希望各位工程师看后有错的地方提出来。 1.首先&#xff0c;拿到一个项目&#xff0c;不要急着去布线。楼主认为可以去看看原理图&a…

硬件学习 软件Cadence day04 PCB 封装绘制

1.文章内容&#xff1a; 1. 贴片式电容 PCB 封装绘制 &#xff08;型号 c0603 &#xff09; 2. 贴片式电阻 PCB 封装绘制 &#xff08;型号 r0603 &#xff09; 3. 安规式电容 PCB 封装绘制 &#xff08;这个就是 有一个电容&#xff0c;插入一个搞好的孔里面 …

Altium Designer下PCB板的画图大法

Altium Designer下PCB板的画图大法 1、封装元件2、导入PCB板3、布局4、布线5、覆铜6、电气规则检查7、生成BOM表和网络表8、输出Gerber光绘文件Gerber文件钻孔文件 修改错误提示总结 1、封装元件 在导入PCB板之前要封装元件&#xff0c;点击元件弹出右侧界面&#xff0c;选中其…

讨论:何同学画的这个PCB有啥问题?

大家好&#xff0c;我是张巧龙&#xff0c;B站著名up主&#xff0c;何同学又又又更新视频了&#xff0c;在最新一期的视频中&#xff0c;有出现过他自己设计的PCB图。 很多同学可能看到这个只是一眼带过&#xff0c;但如果是在从事PCB相关工作的朋友&#xff0c;可能一眼就看出…

绘制PCB

目录 1、导入原理图 2、建立规则 3、器件布局 4、布线 5、PCB规则检查 1、先确定板子的大小 在 Keep-Out 层画图 超过10cm10cm要给多开板费100&#xff0c;没超过则算特价板50块10张 先画四条线&#xff0c;在“编辑”处选择 “原点”&#xff0c;设置好原点后&#xff…

画PCB需要注意事项,可边画PCB边参考

画PCB分为功能性和美观性的注意事项&#xff0c;功能性的注意事项是必须要考虑的&#xff0c;美观性的注意事项是在保证功能性没有问题后需要考虑的&#xff1b; 1》功能性注意事项&#xff1a; >RC滤波或滤波电容布局注意事项&#xff1a; 此为NTC采样电路&#xff0c;RC…

用软件AD画PCB

简介Altium Designer a. 下载安装AD b. 新建一个PC工程:文件——>new——>project——>PCB c. 新建一个原理图&#xff1a;文件——>new——>schematic d. 导入基本元件库&#xff1a;libraries——>Available Libraries——>Installe from file——>选…

使用Altium Designer 绘制PCB的详细过程

/*使用的AD版本为AD10*/ 第一步&#xff1a;新建PCB工程文件 并向工程文件里添加PCB文件和原理图文件 /*************************************************分割线*************************************************/ 第二步&#xff1a;元件库、封装库设计 部分元器件厂商或…

个人经验分享:AD绘制PCB(入门教程)

零之前言 当我们一个硬件项目画好原理图后&#xff0c;接下来就是绘制PCB了&#xff0c;但是绘制PCB中有很多需要注意的地方&#xff0c;总结了一个画PCB的流程。个人经验&#xff0c;相对于大佬来说&#xff0c;这篇文章可能真的就很弱鸡了&#xff0c;同时可能也可能存在错误…

AD_简单的画 PCB

前面已经画完原理图了&#xff0c;下面要画 PCB 图&#xff0c;点击 设计&#xff0c;如下图 接下来要解决一下封装的问题&#xff0c;这样在生成 PCB 的时候才不会出现错误&#xff0c;按下图选择 选择 Footprint 点击编译 按照上面的封装方法&#xff0c;将各个元件分别封装&…

Cadence每日一学_12 | 使用 Padstack Editor 制作贴片焊盘和通孔焊盘

最近在学习小马哥的Cadence课程&#xff0c;该系列课程为学习笔记&#xff1a;使用Cadence Allegro绘制小马哥DragonFly四轴飞行器(STM32F4主控)PCB四层板教程。 文章目录 一、获取焊盘封装尺寸的途径二、Padstack Editor三、绘制贴片焊盘&#xff08;以电阻焊盘为例&#xff0…

画PCB步骤

画PCB步骤 1.导入原理图器件 2.画PCB边界 板子画圆弧 首先在机械层&#xff08;mechanical&#xff09;画一个边界&#xff08;如矩形&#xff09;&#xff0c;然后在四个角画上圆弧&#xff0c;最后再复制到阻焊层&#xff08;keep-out Layer&#xff09;。 复制到阻焊层…

cadence SPB17.4 - 用autoCAD2022画一个PCB板框

前言 如果是规则板框(长方形)&#xff0c;在cadence SPB17.4的板框层中直接画线就行。 如果板框复杂(异形)&#xff0c;可以在autoCAD中画形状&#xff0c;然后另存为.DXF文件给SPB17.4导入板框用。 试了一下&#xff0c;在autoCAD2022中&#xff0c;画了一个正方形当作板框&…

PCB板的绘制

PCB板的绘制 原理图的导入生成PCB板图1.添加一个PCB板图2.选择所有元器件&#xff0c;排列在周围3.拖入排针4.在机械层设置板子长度5.排列元器件6.更改规则7.自动布线8.覆铜&#xff08;顶层和底层&#xff09;9.调整丝印10.电气规则检查 总结 原理图的导入 ①检测可行性&#…

PCB LAYOUT高速信号走线指南

目录 1、TF/SD走线要求 2、HDMI走线要求 3、LVDS信号线走线要求 4、DVP信号走线要求 5、eDP信号走线要求 6、MIPI信号线走线要求 7、USB走线要求 8、MAC走线要求 9、BT.1120走线要求 10、FLASH&#xff08;SPI FLASH / NAND FLASH /eMMC&#xff09;走线要求 11、PCI…

画PCB时,一些非常好的布线技巧

布线是PCB设计过程中技巧最细、限定最高的&#xff0c;即使布了十几年布线的工程师也往往觉得自己不会布线&#xff0c;因为看到了形形色色的问题&#xff0c;知道了这根线布了出去就会导致什么恶果&#xff0c;所以&#xff0c;就变的不知道怎么布了。但是高手还是有的&#x…