最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python預(yù)測一下世界杯最后贏家

 更新時間:2022年11月23日 09:10:10   作者:俊欣  
四年一度的世界杯已經(jīng)開始了,對于不少熱愛足球運動的球迷來說,這可是十分難得的盛宴。今天小編就通過Python數(shù)據(jù)分析以及機器學(xué)習(xí)等方式來預(yù)測一下誰能獲得最后的冠軍,感興趣的可以了解一下

那么四年一度的世界杯即將要在卡塔爾開幕了,對于不少熱愛足球運動的球迷來說,這可是十分難得的盛宴,而對于最后大力神杯的歸屬,相信很多人都滿懷著期待,每個人心中都有不同的答案。

今天小編就通過Python數(shù)據(jù)分析以及機器學(xué)習(xí)等方式來預(yù)測一下誰能獲得最后的冠軍,當(dāng)然最后預(yù)測出來的結(jié)果也僅僅只是作為一種參考,并不代表最后真實的結(jié)果。

數(shù)據(jù)集的準(zhǔn)備

這里我們用到的數(shù)據(jù)集是來自kaggle的公開數(shù)據(jù)集,其中的一份數(shù)據(jù)集是2018年俄羅斯世界杯每小組各成員交手的記錄,最后小編的預(yù)測基于該份數(shù)據(jù)集的基礎(chǔ)之上,另外一份數(shù)據(jù)集則是從1870年開始到2022年截止,所有參賽球隊的歷史交手成績匯總。那么我們首先導(dǎo)入要用到的模塊以及導(dǎo)入數(shù)據(jù)集。

模塊和數(shù)據(jù)集的導(dǎo)入

數(shù)據(jù)分析和可視化要用到的模塊分別是pandas、matplotlib以及seaborn,而機器學(xué)習(xí)預(yù)測要用到的模塊是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

接著我們導(dǎo)入數(shù)據(jù)集

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

我們可以通過head()方法來查看導(dǎo)入數(shù)據(jù)及的前幾行,校驗一下數(shù)據(jù)的導(dǎo)入是否成功,代碼如下

world_cup.head()

output

探索性數(shù)據(jù)分析和特征工程

接下來我們要做的便是探索性數(shù)據(jù)分析和特征工程了,來對數(shù)據(jù)集有一個大致的了解,同時生成一些針對最后的預(yù)測大有幫助的特征出來,例如我們針對比賽當(dāng)中的比分來判斷比賽是誰勝誰負(fù),或者是平局,代碼如下

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

緊接著我們針對某個單獨的國家,統(tǒng)計歷史過往中所有比賽的勝負(fù)率情況,例如小編比較喜歡阿根廷隊,就篩選出阿根廷隊的歷史戰(zhàn)績,代碼如下

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

我們將比賽的結(jié)果的統(tǒng)計可視化出來,其中我們就能清晰地看到阿根廷球隊的勝負(fù)率的情況,代碼如下

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

俄羅斯世界杯的參賽隊伍

我們先將目標(biāo)鎖定在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年之后的比賽記錄,那么我們再進(jìn)行一次篩選,代碼如下

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

當(dāng)然我們在最后進(jìn)行預(yù)測的時候,會有一些無關(guān)緊要的特征摻雜其中,我們需要將其去掉,代碼如下

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這一列的標(biāo)簽做一次轉(zhuǎn)換,將贏得比賽的標(biāo)簽改為2,輸?shù)舯荣惖臉?biāo)簽改為0,而平局的標(biāo)簽改為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

緊接著,我們需要對這些離散類型的變量進(jìn)行獨熱編碼,用到的是pandas模塊當(dāng)中的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

劃分出訓(xùn)練集和測試集,調(diào)用的是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)

邏輯回歸算法

那小編這里調(diào)用的是非常簡單的邏輯回歸的算法,讀者朋友后續(xù)也可以嘗試其他的分類算法進(jìn)一步的完善一下整個預(yù)測的流程與結(jié)果,代碼如下

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

預(yù)測結(jié)果

那么最后便是將我們訓(xùn)練出來的模型去做一個預(yù)測了,我們先前的數(shù)據(jù)集當(dāng)中有主隊和客隊之分,但是在世界杯的賽場上沒有,這里我們就依據(jù)世界排名的先后順序來劃分一下,因此需要導(dǎo)入世界排名的數(shù)據(jù)集

#?導(dǎo)入新的數(shù)據(jù)集,各球隊的世界排名
ranking?=?pd.read_csv('datasets/fifa_rankings.csv')?
#?2018年俄羅斯世界杯的對陣情況
fixtures?=?pd.read_csv('datasets/fixtures.csv')

pred_set?=?[]

在數(shù)據(jù)集當(dāng)中插入主隊和客隊排名的字段,代碼如下

#?插入兩個新的字段,主隊和客隊排名的字段
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

根據(jù)排名的高低來重新修正參賽球隊是作為主隊還是客隊,代碼如下

#?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_set

pred_set.head()

output

還是和之前一樣的,我們需要對這些離散類型的變量進(jìn)行編碼,這里就不做演示了,我們調(diào)用訓(xùn)練好的模型并且進(jìn)行比賽結(jié)果的預(yù)測,代碼如下

#?小組賽對決的預(yù)測?
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

上述預(yù)測的結(jié)果針對的是2018年俄羅斯世界杯小組賽的對陣情況,那么2022年卡塔爾世界杯小組賽的預(yù)測,我們只需要將fixture數(shù)據(jù)集更新一下即可

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

output

最后預(yù)測出來的結(jié)果如下所示

到此這篇關(guān)于基于Python預(yù)測一下世界杯最后贏家的文章就介紹到這了,更多相關(guān)Python預(yù)測世界杯贏家內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實現(xiàn)合并同一個文件夾下所有txt文件的方法示例

    Python實現(xiàn)合并同一個文件夾下所有txt文件的方法示例

    這篇文章主要介紹了Python實現(xiàn)合并同一個文件夾下所有txt文件的方法,涉及Python針對文件的遍歷、讀取、寫入等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • 如何實現(xiàn)在pycharm中將.ui文件轉(zhuǎn)化為.py文件

    如何實現(xiàn)在pycharm中將.ui文件轉(zhuǎn)化為.py文件

    這篇文章主要介紹了如何實現(xiàn)在pycharm中將.ui文件轉(zhuǎn)化為.py文件,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Django應(yīng)用程序中如何發(fā)送電子郵件詳解

    Django應(yīng)用程序中如何發(fā)送電子郵件詳解

    我們常常會用到一些發(fā)送郵件的功能,比如有人提交了應(yīng)聘的表單,可以向HR的郵箱發(fā)郵件,這樣,HR不看網(wǎng)站就可以知道有人在網(wǎng)站上提交了應(yīng)聘信息。下面這篇文章就介紹了在Django應(yīng)用程序中如何發(fā)送電子郵件的相關(guān)資料,需要的朋友可以參考借鑒。
    2017-02-02
  • Python中類的mro與繼承關(guān)系詳解(二)

    Python中類的mro與繼承關(guān)系詳解(二)

    這篇文章主要介紹了Python中類的mro與繼承關(guān)系詳解,上一篇我們已經(jīng)通過mro相關(guān)資料介紹了mro繼承關(guān)系的基礎(chǔ)內(nèi)容,這片緊接著上一篇文章展開詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2022-07-07
  • python返回昨天日期的方法

    python返回昨天日期的方法

    這篇文章主要介紹了python返回昨天日期的方法,涉及Python日期操作的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Python OpenCV實現(xiàn)圖像模板匹配詳解

    Python OpenCV實現(xiàn)圖像模板匹配詳解

    提供一個模板圖像,一個目標(biāo)圖像,且滿足模板圖像是目標(biāo)圖像的一部分,從目標(biāo)圖像中尋找特定的模板圖像的過程,即為模板匹配。本文將詳細(xì)講解如何利用Python OpenCV實現(xiàn)圖像模板匹配,需要的可以參考一下
    2022-04-04
  • Python實現(xiàn)批量圖片的切割

    Python實現(xiàn)批量圖片的切割

    本文主要介紹了Python實現(xiàn)批量圖片的切割,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • python實現(xiàn)的希爾排序算法實例

    python實現(xiàn)的希爾排序算法實例

    這篇文章主要介紹了python實現(xiàn)的希爾排序算法,實例分析了基于Python實現(xiàn)希爾排序的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • python SVD壓縮圖像的實現(xiàn)代碼

    python SVD壓縮圖像的實現(xiàn)代碼

    這篇文章主要介紹了python SVD壓縮圖像的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 修改Python?pip下載包的默認(rèn)路徑詳細(xì)步驟記錄

    修改Python?pip下載包的默認(rèn)路徑詳細(xì)步驟記錄

    這篇文章主要介紹了如何修改pip的默認(rèn)安裝路徑以釋放C盤空間,特別是針對機器學(xué)習(xí)相關(guān)的大型包,可以將pip的安裝位置更改為其他目錄,需要的朋友可以參考下
    2025-03-03

最新評論

高安市| 三门县| 开封县| 微博| 新余市| 邵阳市| 无棣县| 宝兴县| 科技| 江口县| 常山县| 大庆市| 吉木萨尔县| 博爱县| 蒲城县| 三明市| 景洪市| 霍邱县| 金堂县| 仲巴县| 民和| 铜鼓县| 安达市| 晋江市| 沂源县| 衡阳市| 商水县| 临湘市| 贵州省| 察雅县| 新营市| 松溪县| 齐齐哈尔市| 湘阴县| 台东市| 汶川县| 长海县| 清原| 琼海市| 徐闻县| 肥西县|