欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

那么四年一度的世界杯即將要在卡塔爾開(kāi)幕了,對(duì)于不少熱愛(ài)足球運(yùn)動(dòng)的球迷來(lái)說(shuō),這可是十分難得的盛宴,而對(duì)于最后大力神杯的歸屬,相信很多人都滿(mǎn)懷著期待,每個(gè)人心中都有不同的答案。

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

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

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

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

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

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

world_cup.head()

output

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

接下來(lái)我們要做的便是探索性數(shù)據(jù)分析和特征工程了,來(lái)對(duì)數(shù)據(jù)集有一個(gè)大致的了解,同時(shí)生成一些針對(duì)最后的預(yù)測(cè)大有幫助的特征出來(lái),例如我們針對(duì)比賽當(dāng)中的比分來(lái)判斷比賽是誰(shuí)勝誰(shuí)負(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

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

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

output

那么同時(shí)我們也知道第一屆世界杯舉辦的時(shí)間是1930年在烏拉圭舉辦的,那么篩選出在1930年之后的所有比賽的成績(jī),代碼如下

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)計(jì)可視化出來(lái),其中我們就能清晰地看到阿根廷球隊(duì)的勝負(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

俄羅斯世界杯的參賽隊(duì)伍

我們先將目標(biāo)鎖定在2018年俄羅斯世界杯的參賽隊(duì)伍上,總共是以下這幾支球隊(duì)

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"]

然后我們篩選出來(lái)這32支球隊(duì)的過(guò)往的比賽成績(jī),代碼如下

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年之后的比賽記錄,那么我們?cè)龠M(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)然我們?cè)谧詈筮M(jìn)行預(yù)測(cè)的時(shí)候,會(huì)有一些無(wú)關(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

緊接著,我們需要對(duì)這些離散類(lèi)型的變量進(jìn)行獨(dú)熱編碼,用到的是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)練集和測(cè)試集,調(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)用的是非常簡(jiǎn)單的邏輯回歸的算法,讀者朋友后續(xù)也可以嘗試其他的分類(lèi)算法進(jìn)一步的完善一下整個(gè)預(yù)測(cè)的流程與結(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ù)測(cè)結(jié)果

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

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

pred_set?=?[]

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

#?插入兩個(gè)新的字段,主隊(duì)和客隊(duì)排名的字段
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']))

#?我們篩選出來(lái)在小組賽中的對(duì)陣情況
fixtures?=?fixtures.iloc[:48,?:]
fixtures.head()

output

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

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

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

#?小組賽對(duì)決的預(yù)測(cè)?
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ù)測(cè)的結(jié)果針對(duì)的是2018年俄羅斯世界杯小組賽的對(duì)陣情況,那么2022年卡塔爾世界杯小組賽的預(yù)測(cè),我們只需要將fixture數(shù)據(jù)集更新一下即可

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

output

最后預(yù)測(cè)出來(lái)的結(jié)果如下所示

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

相關(guān)文章

  • 如何使用python3獲取當(dāng)前路徑及os.path.dirname的使用

    如何使用python3獲取當(dāng)前路徑及os.path.dirname的使用

    這篇文章主要介紹了如何使用python3獲取當(dāng)前路徑及os.path.dirname的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Django 接收Post請(qǐng)求數(shù)據(jù),并保存到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法

    Django 接收Post請(qǐng)求數(shù)據(jù),并保存到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇Django 接收Post請(qǐng)求數(shù)據(jù),并保存到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python中np.random.randint()參數(shù)詳解及用法實(shí)例

    Python中np.random.randint()參數(shù)詳解及用法實(shí)例

    numpy.random.randint()函數(shù)不僅可以生成一維隨機(jī)數(shù)組,也可以生成多維度的隨機(jī)數(shù)組,下面這篇文章主要給大家介紹了關(guān)于Python中np.random.randint()參數(shù)詳解及用法的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 解決Python找不到ssl模塊問(wèn)題 No module named _ssl的方法

    解決Python找不到ssl模塊問(wèn)題 No module named _ssl的方法

    這篇文章主要介紹了解決Python找不到ssl模塊問(wèn)題 No module named _ssl的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • python實(shí)現(xiàn)ID3決策樹(shù)算法

    python實(shí)現(xiàn)ID3決策樹(shù)算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)ID3決策樹(shù)算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • pytorch如何定義新的自動(dòng)求導(dǎo)函數(shù)

    pytorch如何定義新的自動(dòng)求導(dǎo)函數(shù)

    這篇文章主要介紹了pytorch如何定義新的自動(dòng)求導(dǎo)函數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
    2022-12-12
  • python?pandas創(chuàng)建多層索引MultiIndex的6種方式

    python?pandas創(chuàng)建多層索引MultiIndex的6種方式

    這篇文章主要為大家介紹了python?pandas創(chuàng)建多層索引MultiIndex的6種方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Django rest framework如何自定義用戶(hù)表

    Django rest framework如何自定義用戶(hù)表

    Django 默認(rèn)的用戶(hù)表很多時(shí)候這些基本字段不夠用,本文介紹在 DRF上使用自定義用戶(hù)表進(jìn)行接口訪(fǎng)問(wèn)控制的功能設(shè)計(jì)。感興趣的可以了解一下
    2021-06-06
  • 簡(jiǎn)單了解python PEP的一些知識(shí)

    簡(jiǎn)單了解python PEP的一些知識(shí)

    這篇文章主要介紹了簡(jiǎn)單了解python PEP的一些知識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 詳解PyQt5中Thread多線(xiàn)程的使用

    詳解PyQt5中Thread多線(xiàn)程的使用

    QThread是Qt線(xiàn)程類(lèi)中最核心的底層類(lèi),這篇文章主要為大家介紹了PyQt5中Thread多線(xiàn)程的具體使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08

最新評(píng)論