用Python预测英雄联盟比赛胜负:LPL能否在家门口拿下第三座世界赛奖杯?
《英雄联盟》广受玩家喜爱,每一局比赛都充满不确定性。今天,我们将借助5万场排位赛的数据,向大家传授预测胜负的方法。这样做不仅能帮助玩家更好地掌控比赛节奏,也能作为一种有趣的了解方式。这听起来是不是挺有意思的?
一血意味着高胜率
在英雄联盟的比赛中,一血的获得对胜利概率有显著提升。第一队赢得一血时,胜率达到了59.48%,比没有一血时高出18%。第二队的情况也类似,一血时的胜率是58.72%,同样比没有一血时高出18%。由此可见,开局抢到一血能让队伍在士气等方面占得先机,为胜利打下基础。而且,这种优势在各个队伍中都比较稳定。
在真实的比赛里,众多队伍都把争夺第一滴血看得非常重要,这通常是教练制定策略的重要部分。在多数比赛的开局阶段,我们常常看到选手们都在努力寻找机会,力求率先击杀对手,获得这一宝贵的第一滴血。
# 数据整理
import numpy as np
import pandas as pd
# 可视化
import matplotlib.pyplot as plt
import seaborn as sns
import plotly as py
import plotly.graph_objs as go
# 建模
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import confusion_matrix, classification_report
# 读入数据
df = pd.read_csv('./archive/games.csv')
df.head()
首推一塔优势巨大
df.shape
(51490, 61)
一塔的摧毁对任何队伍都至关重要。在首队比赛中,若能率先攻陷一塔,胜率可高达70.84%,比未得一塔时高出41.64%,第二队的表现也类似。一塔是队伍早期防御的关键,攻下对方一塔,我方就能更好地掌控地图,便于资源收集和视野扩张,这对赢得比赛极为关键。
在职业联赛中,众多队伍为了摧毁敌方一塔,不惜采取各种策略和战术部署。他们甚至愿意承担风险,强行推塔,以期扭转战局。
# 饼图
trace0 = go.Pie(labels=df['winner'].value_counts().index,
values=df['winner'].value_counts().values,
hole=0.5,
opacity=0.9,
marker=dict(line=dict(color='white', width=1.3))
)
layout = go.Layout(title='目标变量winner分布')
data = [trace0]
fig = go.Figure(data, layout)
py.offline.plot(fig, filename='./html/整体获胜情况分布.html')
先拿水晶塔胜利在望
df['game_duration'] = round(df['gameDuration'] / 60)
# 选择数据
x1 = df[df['winner'] == 1]['game_duration']
x2 = df[df['winner'] == 2]['game_duration']
# 直方图
trace0 = go.Histogram(x=x1, bingroup=25, name='team1', opacity=0.9)
trace1 = go.Histogram(x=x2, bingroup=25, name='team2', opacity=0.9)
layout = go.Layout(title='比赛游戏时长分布')
data = [trace0, trace1]
fig = go.Figure(data, layout)
py.offline.plot(fig, filename='./html/游戏时长分布.html')
在比赛过程中,若某队率先夺得第一座水晶塔,那么他们有高达91%的胜算。这座水晶塔象征着强大的力量与价值,提前将其攻陷,意味着该队已建立起明显的优势。相较于防御塔,水晶塔更难以摧毁,因此能够率先将其推倒,便显示出他们在多个方面都占有明显优势。
在一些高级比赛甚至职业赛事里,水晶塔周围的攻防较量时常激烈上演,这充分显示出它在决定胜负方面的重要地位。
plot_bar_horizontal(input_col='firstBlood', target_col='winner', title_name='一血对获胜的影响')
击杀大龙男爵增益大
数据显示,击杀首条男爵能带来八成胜算。此外,率先击败首条大龙的队伍胜率达到了68.6%,比未抢占先机的队伍高出36%。大龙所提供的丰厚兵线和属性加成,对比赛进程有显著推动作用。
现在职业比赛中,很多重要的团战都集中在争夺大龙,一旦哪一方成功夺得大龙,就能获得显著的优势。
plot_bar_horizontal(input_col='firstTower', target_col='winner', title_name='一塔对获胜的影响')
峡谷先锋不容忽视
和大龙男爵的情况相似,击败峡谷先锋的第一个队伍,其胜率显著提高。数据显示,这样的队伍胜率高达69.45%,比那些没有先手优势的队伍胜率高出了38.92%。峡谷先锋作为推动推塔速度的关键资源,其作用不容小觑。
plot_bar_horizontal(input_col='firstInhibitor', target_col='winner', title_name='摧毁第一个水晶对获胜的影响')
在部分比赛里,若能妥善运用峡谷先锋,便能快速扭转战局,对敌方防御塔构成严重威胁。
防御塔水晶摧毁量变产生质变
plot_bar_horizontal(input_col='firstBaron', target_col='winner', title_name='击杀第一条男爵对获胜影响')
以第一个队伍为例,摧毁的防御塔越多,我们的胜率就越高。当所有11个防御塔都被摧毁后,我们的胜率高达99.16%,但仍有极小的0.84%概率可能被翻盘。至于水晶,如果水晶未被摧毁,胜率仅为12.55%;摧毁一个水晶,胜率能上升至81.11%;摧毁两个,胜率则达到92.38%。由此可见,摧毁水晶的数量越多,我们赢得比赛的可能性也就越大。
通常情况下,在英雄联盟的对战中,我们注意到防御塔和水晶往往是双方争夺的焦点。一旦有人能率先攻破这一区域,那么赢得比赛的可能性就大大增加。
大家是否思考过在自家的游戏里如何更有效地运用这些元素?欢迎在评论区交流你们的想法。另外,别忘了点赞并转发这篇文章。
plot_bar_horizontal(input_col='firstDragon', target_col='winner', title_name='击杀第一条大龙对获胜的影响')