数据集FIFA22调整为2022年世界杯的首发阵容

数据集FIFA22调整为2022年世界杯的数据首发阵容

日期:2023/02/23 21:08作者:佚名人气:

导读:年世界杯的每支国家队寻找梦之队、最佳阵型和理想的集F界杯首发阵容现在让我们创建一个数据框df_best_players,显示每个国家队的调的首最佳球员。每个国家队的年世最佳26人阵容让我们创建一个函数,返回每个国家队可能的发阵最佳阵容。让我们看看巴西队的数据最佳阵容是什么人阵容,我们可以看看什么是集F界杯最好的首发阵容和阵型。现在我们为每支国家队准备了最佳阵型。调的首...

使用 Python 为 2022 年世界杯的年世每支国家队寻找梦之队、最佳阵型和理想的发阵首发阵容

2022年世界杯已经开始,我们可以从这场比赛的数据数据中学到很多东西。

诸如 2022 年世界杯梦之队、集F界杯每个国家队的调的首最佳 26 人阵容以及他们理想的首发阵容之类的东西都可以使用 Python 获得。

但我们不只是年世这样做! 我们还将添加一些数据可视化以使此分析更易于理解,发阵甚至可以使用 Python 绘制具有理想阵容的足球场。

目录

1. 数据集概览

2.调整数据集FIFA 22为2022世界杯

3. 用于此分析的指标

4. 2022年世界杯梦之队

5. 每个国家队中评分最高的球员

6、各国家队26人最佳阵容

7.最佳首发阵容

- 西班牙:最佳首发 XI (4–2–3–1)

- 葡萄牙:最佳首发 XI (4–2–3–1)

-英格兰:最佳首发 XI (4–4–2)

-巴西:最佳首发阵容 (4–3–3)

- 法国:最佳首发 XI (4–2–3–1)

-阿根廷:最佳首发阵容 (4–3–3)

- 德国:最佳首发 XI (4–2–3–1)

数据集概览

我们将用于此分析的数据来自 FIFA 22 游戏德国最佳阵容阵型,其中包含有关世界上大多数足球运动员的信息。

将pandas导入为pd将seaborn导入为sns将matplotlib.pyplot导入为plt sns.set_style( 'darkgrid' ) df = pd.read_csv( 'players_22.csv' , low_memory= False )

此数据集包含 100 多列,但对于此分析,我们将仅使用其中的几列。

df = df[['short_name', 'age', 'nationality_name', 'overall', 'potential','short_name' , 'age' , 'nationality_name' , 'overall' , 'potential' ,          'club_name' , 'value_eur' , 'wage_eur' , 'player_positions' ]]

需要记住的是 player_positions 列有多个位置,因此我们应该只选择一个用于此分析。 此外,我们必须删除 NaN 数据。

# selecting only one positiondf['player_positions'] = df['player_positions'].str.split(',', expand=True)[0]# dropping nandf.dropna(inplace=True)

这是 df 数据框此时的样子。

使数据集 FIFA 22 适应 2022 年世界杯

现在我们要使数据集 FIFA 22 适应 2022 年世界杯。 这意味着我们只会考虑那些获得参赛资格的国家和那些被国家队征召的球员。

# dropping injured playersplayers_missing_worldcup = ['K. Benzema', 'S. Mané', 'S. Agüero', 'Sergio Ramos', 'P. Pogba',                            'M. Reus', 'Diogo Jota', 'A. Harit', 'N. Kanté', 'G. Lo Celso', 'Piqué']drop_index = df[df['short_name'].isin(players_missing_worldcup)].indexdf.drop(drop_index, axis=0, inplace=True)# filtering only national teams in the world cupteams_worldcup = [    'Qatar', 'Brazil', 'Belgium', 'France', 'Argentina', 'England', 'Spain', 'Portugal',    'Mexico', 'Netherlands', 'Denmark', 'Germany', 'Uruguay', 'Switzerland', 'United States', 'Croatia',    'Senegal', 'Iran', 'Japan', 'Morocco', 'Serbia', 'Poland', 'South Korea', 'Tunisia',    'Cameroon', 'Canada', 'Ecuador', 'Saudi Arabia', 'Ghana', 'Wales', 'Costa Rica', 'Australia']df = df[df['nationality_name'].isin(teams_worldcup)]

用于此分析的指标

对于此分析,我们将使用每位球员的 FIFA 评分。 评级由整体列表示。

让我们对数据框进行整体排序(如果多个玩家的评分相同,我们还将按 potential 和 value_eur 列排序)

df.sort_values(by=['overall', 'potential', 'value_eur'], ascending=False, inplace=True) 'overall' , 'potential' , 'value_eur' ], ascending= False , inplace= True )

这就是数据框现在的样子。

现在,让我们看看2022年世界杯所有球员的评分(即综合评分)是如何分布的。

import numpy as np fig, ax = plt.subplots(figsize=( 12 , 5 ), tight_layout= True ) sns.histplot(df, x= 'overall' , binwidth= 1 ) bins = np.arange(df[ 'overall ' ]. min (), df[ '总体' ]. max (), 1 ) plt.xticks(bins) plt.show()

似乎大多数球员的评分都是 65 和 67。对于我们的梦之队,我们只会考虑每个位置上评分最高的球员。

2022年世界杯梦之队

获得梦之队的一个简单方法是删除 player_positions 列中的每个重复项(df 是整体排序的,因此“非重复项”将是评分最高的球员)

df.drop_duplicates('player_positions') 'player_positions' )

如果我们只选择 、 、 和 short_name 列,我们将得到以下代表我们梦之队的数据框。 overallclub_nameplayer_positions

现在我们有了每个位置的最佳球员,我们可以使用 Python 工具制作足球场图并选择我们想要的任何球员(您只需要在脚本底部编辑球员的名字)

这是我的梦之队。

每个国家队得分最高的球员

现在让我们创建一个数据框 df_best_players 显示每个国家队的最佳球员。 我们将提取 nationality_name 列的前 3 个字母以了解每个玩家来自哪里。

df_best_players = df.copy() df_best_players = df_best_players.drop_duplicates('nationality_name').reset_index(drop=True) 'nationality_name' ).reset_index(drop= True ) country_short = df_best_players[ 'nationality_name' ]. str .extract( '(^\w{ 3})' , expand= False ). str .upper() df_best_players[ 'name_nationality' ] = df_best_players[ 'short_name' ] + ' (' + country_short + ')'

让我们制作一个条形图来可视化数据框 df_best_players。

fig, ax = plt.subplots(figsize=(10, 6), tight_layout=True) 10 , 6 ), tight_layout= True ) sns.barplot(df_best_players, x= 'overall' , y= 'name_nationality' ,             palette=sns .color_palette( 'pastel' ), width= 0.5 ) plt.show()

每个国家队的最佳26人阵容

让我们创建一个函数,返回每个国家队的最佳球队。 为此,我们将为每个国家队的每个位置选出最好的 2 名球员。 一旦我们有了最佳阵容,我们就会按照 player_positions、总体和潜力对其进行排序。

def best_squad(nationality):    df_best_squad = df.copy()    df_best_squad = df_best_squad.groupby(['nationality_name', 'player_positions']).head(2)    df_best_squad = df_best_squad[df_best_squad['nationality_name']==nationality].sort_values(['player_positions', 'overall', 'potential'], ascending=False)    return df_best_squad

让我们看看什么是巴西最好的阵容

best_squad('Brazil')'Brazil')

如您所见,我们有超过 26 名球员,因为我们为每个位置选择 2 名球员德国最佳阵容阵型,大约有 15 个位置。 您可以进行一些调整,以便从此数据框中仅选择 26 名玩家。

现在让我们看看每个国家队的平均评分是多少。 然后我们按 average_overall 降序排序。

average_overall = [best_squad(team)['overall'].mean() for teams_worldcup] 'overall' ].mean() for teams_worldcup ] df_average_overall = pd.DataFrame({  'Teams' : teams_worldcup, 'AVG_Overall' : average_overall}) df_average_overall = df_average_overall.dropna() df_average_overall = df_average_overall.sort_values( 'AVG_Overall' , ascending =False) df_average_overall

以下是平均分最高的 10 支国家队。

让我们用条形图将其可视化。

fig, ax = plt.subplots(figsize=(12, 5), tight_layout=True)12, 5), tight_layout=True)sns.barplot(df_average_overall[:10], x='Teams', y='AVG_Overall',            palette=sns.color_palette('pastel'))plt.show()

最佳首发阵容

既然我们已经为每支国家队找到了最好的 26 人阵容,我们就可以看看最好的首发阵容和阵型是什么。

这是我想出的所有阵型(如果你愿意,你可以添加更多)

dict_formation = {      '4-3-3': ['GK', 'RB', 'CB', 'CB', 'LB', 'CDM', 'CM', 'CAM', 'RW', 'ST ', 'LW'], '4-3-3' : [ 'GK' , 'RB' , 'CB' , 'CB' , 'LW ' , 'CDM' , 'CM' , 'CAM' , 'RW ' , 'ST' , 'LW' ],     '4-4-2' : [ 'GK' , 'RB' , 'CB' , 'CB', 'LB' , 'RM' , 'CM' , 'CM' , 'LM' , 'ST', 'ST' ],     '4-2-3-1' : [ 'GK' , 'RB' , 'CB' , 'CB' , 'LB' , 'CDM' , 'CDM' , 'CAM' , ' CAM' , 'CAM' , 'ST' ], }

现在我们创建一个 best_lineup 函数,它根据我们想要的阵型返回最佳首发 XI。

def best_lineup(nationality, lineup):best_lineup(nationality, lineup):    lineup_count = [lineup.count(i) for i in lineup]    df_lineup = pd.DataFrame({ 'position': lineup, 'count': lineup_count})    positions_non_repeated = df_lineup[df_lineup['count'] <= 1]['position'].values    positions_repeated = df_lineup[df_lineup['count'] >1]['position'].values    df_squad = best_squad(nationality)    df_lineup = pd.concat([        df_squad[df_squad['player_positions'].isin(positions_non_repeated)].drop_duplicates('player_positions', keep='first'),        df_squad[df_squad['player_positions'].isin(positions_repeated)]]    )    return df_lineup[['short_name', 'overall', 'club_name', 'player_positions']]

最后我们循环遍历世界杯前 7 名的球队,并返回平均评分最高的阵型。

for index, row in df_average_overall[:7].iterrows():    max_average = None    for key, values in dict_formation.items():        average = best_lineup(row['Teams'], values)['overall'].mean()        if max_average is None or average>max_average:            max_average = average            formation = key    print(row['Teams'], formation, max_average)

伟大的! 现在我们已经为每个国家队准备了最好的阵型。

Spain 4-2-3-1 85.1Portugal 4-2-3-1 84.9England 4-4-2 84.45454545454545Brazil 4-3-3 84.81818181818181France 4-2-3-1 83.9Argentina 4-3-3 83.54545454545455Germany 4-2-3-1 84.1

让我们找出西班牙、葡萄牙、英格兰、巴西、法国、阿根廷和德国的最佳首发阵容。

1. 西班牙:最佳首发 XI (4–2–3–1)

est_lineup('Spain', dict_formation['4-2-3-1'])'Spain', dict_formation['4-2-3-1'])

2. 葡萄牙:最佳 XI (4–2–3–1)

best_lineup('Portugal', dict_formation['4-2-3-1'])'Portugal', dict_formation['4-2-3-1'])

3. 英格兰:最佳 XI (4–4–2)

best_lineup('England', dict_formation['4-4-2'])'England', dict_formation['4-4-2'])

4. 巴西:最佳 XI (4–3–3)

best_lineup('Brazil', dict_formation['4-3-3'])'Brazil', dict_formation['4-3-3'])

5. 法国:最佳首发 XI (4–2–3–1)

best_lineup('France', dict_formation['4-2-3-1']) 'France' , dict_formation[ '4-2-3-1' ])

6. 阿根廷:最佳首发阵容 (4–3–3)

best_lineup('Argentina', dict_formation['4-3-3'])'Argentina', dict_formation['4-3-3'])

7. 德国:最佳首发 XI (4–2–3–1)

best_lineup('Germany', dict_formation['4-2-3-1'])'Germany', dict_formation['4-2-3-1'])

结束了!

#2022世界杯#