神了,用 Python 预测世界杯决赛,发现准确率还挺高

那么四年一度的世界杯即将要在卡塔尔开幕了,对于不少热爱足球运动的球迷来说,这可是十分难得的盛宴,而对于最后大力神杯的归属,相信很多人都满怀着期待,每个人心中都有不同的答案。

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

文章目录

    • 技术提升
    • 数据集的准备
    • 模块和数据集的导入
    • 探索性数据分析和特征工程
    • 俄罗斯世界杯的参赛队伍
    • 逻辑回归算法
    • 预测结果

技术提升

项目代码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:dkl88191,备注:来自CSDN
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

数据集的准备

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

模块和数据集的导入

数据分析和可视化要用到的模块分别是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

接着我们导入数据集

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

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

world_cup.head()

output

图片

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

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

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

图片

俄罗斯世界杯的参赛队伍

我们先将目标锁定在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

图片

我们需要将winning_team这一列的标签做一次转换,将赢得比赛的标签改为2,输掉比赛的标签改为0,而平局的标签改为1,代码如下

df_teams_1930 = df_teams_1930.reset_index(drop=True)
df_teams_1930.loc[df_teams_1930.winning_team == df_teams_1930.home_team,'winning_team']=2
df_teams_1930.loc[df_teams_1930.winning_team == 'Draw', 'winning_team']=1
df_teams_1930.loc[df_teams_1930.winning_team == df_teams_1930.away_team, 'winning_team']=0
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)

逻辑回归算法

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

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

预测结果

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

# 导入新的数据集,各球队的世界排名
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

图片

图片

图片

图片

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

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

output

图片

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

图片

图片

图片

图片

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

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

相关文章

太硬核!用大数据技术预测足球胜率

点个关注&#x1f446;跟腾讯工程师学技术 引言| 足球作为世界第一运动&#xff0c;充满了速度和力量的结果&#xff0c;团队与谋略的对抗。人们也说&#xff0c;足球是圆的&#xff0c;恰恰也表明了足球比赛的不可预知性&#xff0c;一切结果都皆有可能。强如巴萨&#xff0c;…

chatgpt赋能python:Python如何处理两个表的关联-实现数据的整合与分析

Python如何处理两个表的关联 - 实现数据的整合与分析 在日常的数据处理与分析中&#xff0c;有时我们需要将两个表格进行关联&#xff0c;以实现数据的整合与分析。Python作为一门常用的数据分析工具&#xff0c;提供了多种方式来实现不同表格之间的关联。 什么是表格关联&am…

Android 14 的首个开发者预览版,推出四大安全增强功能

【CSDN 编者按】2 月 8 日&#xff0c;谷歌正式发布了 Android 14 首个开发者预览版&#xff0c;该版本将继续致力于提高开发者效率&#xff0c;同时推出四大安全功能。该版本将支持跨/多设备登录、应用双开、基于自己的需求定制增强的辅助功能等。 原文链接&#xff1a;https:…

薅!无魔法无限量GPT-4安卓App安装包;Notion AI从入门到精通;最全大模型进展汇总;雇AI给我打零工 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『大模型进展汇总 (持续更新至4月17日)』应该是最全总结了吧 ShowMeAI资料编号 No.T001 &#xff08;进入社群获取高清PDF文件&#x…

微信链接经常被秒封、被屏蔽、被拦截的最新微信防封方案

很多商家团队经常会需要通过微信推广一些线下举办的活动或者产品的广告网页&#xff08;如QP、BC、CP等&#xff09;。 因为现阶段&#xff0c;微信推广是传播信息速度最快的方法&#xff0c;见的最多的就是通过广告页或产品介绍&#xff0c;里面经常会嵌入产品的网站二维码&a…

当GPT-4化身主考官:与ChatGPT处于同水平的有这些

魏亦豪 投稿量子位 | 公众号 QbitAI GPT-4太强&#xff0c;甚至已经化身“主考官”了&#xff01; 给其他市面上主流的大模型打分&#xff0c;结果自己给了自己最高分&#xff1a; 95.5。&#xff08;好&#xff0c;给自己留点努力的空间&#xff09; 不过随后就没有上90的选手…

教师ChatGPT的23种用法

火爆全网的ChatGPT&#xff0c;作为教师应该如何正确使用&#xff1f;本文梳理了教师ChatGPT的23种用法&#xff0c;一起来看看吧&#xff01; 1、回答问题 ChatGPT可用于实时回答问题&#xff0c;使其成为需要快速获取信息的学生的有用工具。 从这个意义上说&#xff0c;Cha…

“此电话号码无法用于进行验证” 注册gmail邮箱手机号码不能验证的解决方法(已解决)

如果网页注册Google账号时出现 此电话号码无法用于进行验证 1.手机上安装gmail app&#xff08;华军软件园下载&#xff09;&#xff0c; 2 安装后&#xff0c;从手机的添加账号里面创建就行。 3、 然后电脑上就能登录了 4.参考链接 https://baiyunju.cc/5391

注册谷歌广告联盟提示“此电话号码无法用于进行验证”解决办法

今天给网站注册谷歌联盟账号的时候到了验证手机号的时候一直提示“此电话号码无法用于进行验证”&#xff0c;我以为是我195的号还没被兼容&#xff0c;于是换了好几个手机号都是这样&#xff0c;经过一番百度之后终于是解决了问题。 其实要做的就是将我们的浏览器语言改成英文…

谷歌账号注册时中国大陆手机号无法验证,“此电话号码无法用于进行验证”快速解决。2023年新方法

谷歌注册无法验证&#xff1f;不要紧——解决方法在这里&#xff01; 相信大部分人注册谷歌都遇到一个问题&#xff0c;那就是手机号无法用于验证。今天这篇文章&#xff0c;讲讲如何解决这种问题。如下图: 大部分人都是出现无法验证&#xff0c;说白了就是谷歌防止批量恶意…

关于注册Google账号时遇到“此电话号码无法用于进行验证”的问题的解决方法

实测&#xff0c;当浏览器的默认语言和Google的语言设置成英语时即可避免此问题。 解决方法&#xff1a; 打开Chrome浏览器&#xff1b;转到chrome://settings&#xff08;设置界面&#xff09;&#xff1b;在左侧点击“语言”&#xff1b;点击“添加语言”&#xff0c;搜索“…

神经网络芯片概念股,图神经网络预测股票

人工智能概念股有哪些&#xff1f; 人工智能芯片谁是龙头&#xff1f; 谷歌人工智能写作项目&#xff1a;小发猫 如何用Tensorflow 快速搭建神经网络 在MNIST数据集上&#xff0c;搭建一个简单神经网络结构&#xff0c;一个包含ReLU单元的非线性化处理的两层神经网络A8U神经网…

芯片龙头股票遭青睐 恒大现身次新军工股!

财经365&#xff08;www.caijing365.com&#xff09;讯&#xff0c;今年9月&#xff0c;组织对710家上市公司进行了调查&#xff0c;兆易创新成为调查机构最多的股票。 芯片龙头股票遭青睐 恒大现身次新军工股! 根据《证券时报数据宝》&#xff0c;在九月份开展机构调查的企业…

神经网络硬件概念股票,神经网络芯片概念股

人工智能概念股有哪些&#xff1f; 人工智能芯片谁是龙头&#xff1f; 谷歌人工智能写作项目&#xff1a;神经网络伪原创 神经网络是一种控制方式?他的硬件如何选型&#xff1f; 20 通常&#xff0c;神经网络都是通过编程实现的&#xff0c;因为神经网络本质上是种数学模型写…

厂商主推芯片:中微SC8F6790和泰芯TX8C1260的对比,及使用感受。

中微的SC8F6790和泰芯的TX8C1260脚位都兼容市面上主流芯片STM8S003。相对于STM8S003&#xff0c;中微的和泰芯的芯片都为国产芯片&#xff0c;供货稳定&#xff0c;价格有优势&#xff0c;而且价格相对平稳&#xff0c;都已经大批量出货&#xff0c;芯片工作稳定性有保证。 S…

博通仍然是美股市场最好的芯片半导体股

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 博通(AVGO)是一家快速增长的半导体公司&#xff0c;并且有很高的股息分红&#xff0c;目前其股息收益率已经高出了平均水平3.2%&#xff0c;而且估值非常合理&#xff0c;仅为预期净利润的14倍。 虽然博通也受到了经济衰退影…

高速下载ChatGLM2模型文件的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

众说元宇宙及其实现

翻译、编辑 | Alex 技术审校 | 刘连响 本文来自Streaming Media&#xff0c;作者为Adrian Pennington。 ▲扫描图中二维码了解音视频技术大会更多信息▲ 影音探索#007#——元宇宙 早在主流媒体对元宇宙产生浓厚兴趣之前&#xff0c;Magic LEAP、Nvidia和华为等公司就已经在尝试…

元宇宙火了

阅读本文大概需要 2.1 分钟。 最近有个概念很火&#xff0c;叫元宇宙。 我觉得&#xff0c;目前元宇宙这个&#xff0c;还是比较虚的一个概念。 1、 什么是元宇宙&#xff1f; 首先&#xff0c;这个概念其实来源于 1992 年&#xff0c;美国一位科幻作家尼尔斯蒂芬森在他的小说《…

元宇宙产品有哪些 元宇宙社交平台

元宇宙在2021年炒起来一个新的概念&#xff0c;好多人这边只知道元宇宙这个词&#xff0c;但是元宇宙真正是什么&#xff0c;元宇宙就是利用现有的技术这边去创造一个新的数字虚拟世界&#xff0c;在这个世界中&#xff0c;我们有自己的感官&#xff0c;目前认为支撑元宇宙的六…