用技术记录世界杯2022
创始人
2024-03-28 17:30:34

用技术记录世界杯【2022】

文章目录

      • 用技术记录世界杯【2022】
      • 前言
        • 1 项目介绍
        • 2 实验复现
          • 2.1 关于项目
          • 2.2 数据准备
          • 2.3 特征工程
        • 3 我的感受

前言

Hi,我是Ding Jiaxiong,好久不见(bushi,早上才更新了博客),

今天是2022 年12月 8日

在这里插入图片描述

2022年 卡塔尔 世界杯的第 18天

现在的排名情况是下面这样子的

在这里插入图片描述

作为一个 资深足球迷( bushi,没有冒犯的意思,我只认识内马尔、C罗和梅西),

当然回到这篇博客 的重点,为了与大家共享世界杯盛宴,CSDN 官方专门举办了这场世界杯征文大赛

哈哈,当然我只是想要那个专属勋章啦

回到正题,今天想要分享的就是一个 名为“使用 ML 预测FIFA 2022 世界杯”的开源项目。

1 项目介绍

项目名:Predicting FIFA 2022 World Cup with ML

项目地址:https://www.kaggle.com/code/sslp23/predicting-fifa-2022-world-cup-with-ml/notebook

在这里插入图片描述

就是它了,在kaggle 上面

2 实验复现

2.1 关于项目

项目的想法是用机器学习模拟 FIFA 2022 世界杯比赛,以预测比赛的获胜者。

该项目使用两个数据集:1872 年至 2022 年的国际足球成绩和 1992 年至 2022 年的国际足联世界排名

数据集地址:

【1872 年至 2022 年的国际足球成绩】

https://www.kaggle.com/datasets/martj42/international-football-results-from-1872-to-2017

在这里插入图片描述

【1992 年至 2022 年的国际足联世界排名】

在这里插入图片描述

项目作者使用了 Soccer World Cup 2018 Winner notebook 中使用的相同逻辑,

https://www.kaggle.com/code/agostontorok/soccer-world-cup-2018-winner

另一个项目,18年世界杯项目

在这里插入图片描述

将问题建模为一个 二分类问题。【嗯,胜负】

作者用它来更容易地分析模型的结果,所以模型预测主队获胜和客队平局/获胜。然后,为了去除客队优势,作者预测了客场和主场球队变化的结果(因为世界杯没有主场优势),并将两个预测的均值用作概率。

2.2 数据准备

准备数据以应用特征工程方法,这些方法将创建数据库以应用机器学习算法。

笔者的环境配置

在这里插入图片描述

笔者准备了一个新的 notebook

在这里插入图片描述

将其命名为 WorldCup,并把数据集上传到了 服务器中

import numpy as np
import pandas as pd
import osfor dirname, _, filenames in os.walk('kaggle/input'):for filename in filenames:print(os.path.join(dirname, filename))

在这里插入图片描述

df =  pd.read_csv("kaggle/input/international-football-results-from-1872-to-2017/results.csv")df["date"] = pd.to_datetime(df["date"])df.isna().sum()

在这里插入图片描述

df.dropna(inplace=True)df.dtypes

在这里插入图片描述

使用的数据集将是2018年国际足联比赛,从2018年世界杯之后到2022年世界杯之前的最后一场比赛。我们的想法是只分析比赛的准备和分类到WC。

df.sort_values("date").tail()

在这里插入图片描述

df = df[(df["date"] >= "2018-8-1")].reset_index(drop=True)df.sort_values("date").tail()

在这里插入图片描述

df.home_team.value_counts()

在这里插入图片描述

rank = pd.read_csv("kaggle/input/fifaworldranking/fifa_ranking-2022-10-06.csv")rank["rank_date"] = pd.to_datetime(rank["rank_date"])rank = rank[(rank["rank_date"] >= "2018-8-1")].reset_index(drop=True)

世界杯上的一些球队在排名数据集中有不同的名字。所以,它需要调整。

rank["country_full"] = rank["country_full"].str.replace("IR Iran", "Iran").str.replace("Korea Republic", "South Korea").str.replace("USA", "United States")

在这里插入图片描述

合并是为了得到一个数据集FIFA比赛和它的排名。

rank = rank.set_index(['rank_date']).groupby(['country_full'], group_keys=False).resample('D').first().fillna(method='ffill').reset_index()df_wc_ranked = df.merge(rank[["country_full", "total_points", "previous_points", "rank", "rank_change", "rank_date"]], left_on=["date", "home_team"], right_on=["rank_date", "country_full"]).drop(["rank_date", "country_full"], axis=1)df_wc_ranked = df_wc_ranked.merge(rank[["country_full", "total_points", "previous_points", "rank", "rank_change", "rank_date"]], left_on=["date", "away_team"], right_on=["rank_date", "country_full"], suffixes=("_home", "_away")).drop(["rank_date", "country_full"], axis=1)df_wc_ranked[(df_wc_ranked.home_team == "Brazil") | (df_wc_ranked.away_team == "Brazil")].tail(10)

在这里插入图片描述

现在,我们已经准备好了数据,可以根据比赛结果和国际足联排名来创建功能。

2.3 特征工程

这里的想法是创建可能的特征,对预测足球比赛有影响。

根据直觉,我们认为具有影响的特征可能是:

  • 过去的比赛积分
  • 过去的进球和损失【失球】
  • 游戏的重要性(友好与否)
  • 球队排名
  • 队伍等级增加
  • 目标的实现和遭受取决于面对的排名

所以,我们要做的第一件事就是创建一个显示哪支球队赢了以及他们在比赛中得了多少分的功能。

df = df_wc_rankeddef result_finder(home, away):if home > away:return pd.Series([0, 3, 0])if home < away:return pd.Series([1, 0, 3])else:return pd.Series([2, 1, 1])results = df.apply(lambda x: result_finder(x["home_score"], x["away_score"]), axis=1)df[["result", "home_team_points", "away_team_points"]] = results

比赛积分为胜3分,平1分,负0分,与数据库中已经存在的国际足联排名积分不同。

此外,假设FIFA Rank积分和同一支球队的FIFA排名是负相关的,我们应该只使用其中一个来创建新功能。以下是对这个假设的验证:

import seaborn as sns
import matplotlib.pyplot as pltplt.figure(figsize=(15, 10))
sns.heatmap(df[["total_points_home", "rank_home", "total_points_away", "rank_away"]].corr())
plt.show()

在这里插入图片描述

现在,我们将创建有助于创建特征的列:排名差异,在比赛中赢得的分数与球队面临的排名,以及比赛中的进球数差异。所有不是差异的特征都应该为两支球队(客场和主场)创造。

df["rank_dif"] = df["rank_home"] - df["rank_away"]
df["sg"] = df["home_score"] - df["away_score"]
df["points_home_by_rank"] = df["home_team_points"]/df["rank_away"]
df["points_away_by_rank"] = df["away_team_points"]/df["rank_home"]

为了创建特征,作者将在主队和客场队的数据集中分离数据集,统一它们并计算过去的比赛值。之后,作者将再次分离并合并它们,检索原始数据集。这个过程优化了特性的创建。

home_team = df[["date", "home_team", "home_score", "away_score", "rank_home", "rank_away","rank_change_home", "total_points_home", "result", "rank_dif", "points_home_by_rank", "home_team_points"]]away_team = df[["date", "away_team", "away_score", "home_score", "rank_away", "rank_home","rank_change_away", "total_points_away", "result", "rank_dif", "points_away_by_rank", "away_team_points"]]home_team.columns = [h.replace("home_", "").replace("_home", "").replace("away_", "suf_").replace("_away", "_suf") for h in home_team.columns]away_team.columns = [a.replace("away_", "").replace("_away", "").replace("home_", "suf_").replace("_home", "_suf") for a in away_team.columns]team_stats = home_team.append(away_team)team_stats_raw = team_stats.copy()

现在,我们有了一个数据库,可以创建预测功能。它们将是:

  • Mean goals of the team in World Cup Cycle.
  • Mean goals of the team in last 5 games.
  • Mean goals suffered of the team in World Cup Cycle.
  • Mean goals suffered of the team in last 5 games.
  • Mean FIFA Rank that team faced in World Cup Cycle.
  • Mean FIFA Rank that team faced in last 5 games.
  • FIFA Points won at the cycle.
  • FIFA Points won in last 5 games.
  • Mean game points at the Cycle.
  • Mean game points at last 5 games.
  • Mean game points by rank faced at the Cycle.
  • Mean game points by rank faced at last 5 games.

OK,到这里,当我谷歌第一条的英文意思的时候,我就不想再往下写了,因为有大佬已经写了!!!!我真的枯死

这里我直接附上链接吧,大家多多支持大佬的好文

https://blog.csdn.net/weixin_62338855/article/details/128023854

在这里插入图片描述

3 我的感受

分享一些 轻松的事情吧,

如果要问起来在 世界杯期间学习了啥 技术,其实就在昨天吧,我把Go 基础重新学了一遍,已经结束了

在这里插入图片描述

马上就要再进入Go 的高并发了,之前学过一遍,但是间隔时间太长了,而且也没怎么用,因为中间搞Java 去了

看着官方给的活动创作方向,画足球就不了,如果说回忆 第一次我自己踢足球的话,那是在起码 5年前了,

在这里插入图片描述

在这里插入图片描述

OK,是2017年,那个时候高二吧,小班足球赛,我作为替补,虽然到比赛结束都没上过场,但是那个 时候确实很多人很多事 都 … ,死去的 回忆突然攻击我,

咋子说呢

今天在抖音 看到一段“ 很美” 的话

这三年最大的收获就是遇到了那些形形色色的人们虽然他们有的让我身陷险境有的帮我它逃出泥沼但就是这样才让当年那个自大的我清醒了许多我现在觉得这里无比强大3年之约对我来说就只不过是要完成一个年少轻狂的约定给自己的这段成长画上了句号而已

当年一起玩耍、一起上学上课上厕所的朋友们,希望你们一切都好。

在这里插入图片描述

路漫漫其修远兮,吾将上下而求索

我们一定能够成为我们想要去成为的人。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...