CDA数据分析员制
作者:真达,Mika
数据:真达
后期: Mika
【引体向上】
今天,大型家用Python预测英雄联盟比赛的胜负。 Show me data,用数据说话! 今天我们来谈谈python预测LOL胜负的故事。
目前,英雄联盟S10全球决赛正在火热进行中,最终决赛将于10月31日在浦东足球场举行。 作为目前最炙手可热的电竞赛事,这引起了世界无数玩家的关注,相信没有人会错过这场参赛范围非常广、影响力非常大的国际电竞赛事。 LPL能否在家门口获得第三个世界大赛奖杯也引起了很多玩家的关注。
每场比赛,大家最关注的不都是最后的胜负吗? 那么,比赛的胜负能预测吗? 今天,我们分析了5万多场英雄联盟的排名赛,教大家如何用Python预测比赛的胜负。
01、项目介绍
英雄联盟( LOL )是美国游戏开发商RiotGames(2011年腾讯收购)的多人在线战斗竞技游戏。
在游戏中,玩家将扮演“召唤师”的角色,每个召唤师控制着自己技能的“英雄”,并与其他玩家和计算机控制的英雄进行战斗。 游戏的目标是摧毁对方的防御塔和基地。
召唤者峡谷是英雄联盟中最受欢迎的地图,在这种地图类型中,两队五名玩家竞相摧毁一座名为基地的敌人建筑,这座建筑由敌人的队伍和一些防御塔护送。 每个团队都想在保护自己建筑物的同时破坏对方的建筑物。 主要包括:
每个防御塔团队总共有11个防御塔Inhibitor水晶)。 每路水晶Elemental Drakes/Elder Dragon )大龙/远古龙) Rift Herald )峡谷先锋) Baron Nasho )纳什很多职业选手在赛后的采访中表示,输是滚雪球式的。 我们研究一下各方面各项指标的数据,看看这些因素的发展是否真的影响了比赛的成败。
该项目分析了5万多场英雄联盟的排名赛,试图利用决策树算法基于现有输入属性预测比赛胜负。
02、数据集概述
数据集收集了来自50000多个游戏英雄联盟的游戏排名数据,字段主要包含以下数据:
Game ID :游戏IDCreation Time :制作时间gameduration(inseconds )游戏持续时间(秒) Season ID :第一季id winner (1=team 1,2=team2) )冠军奇2=第2季, 0=none ) )第一条纳什男爵、龙、塔、血一个、水晶、 峡谷先锋championsandsummonerspellsforeachteam ( storedasriot ' schampionandsummonerspellids )每队选出的英雄和召唤术The number of tower、 inhibitor dagonandriftheraldkillseachteamhas :塔、水晶、男爵、龙、大峡谷先锋击杀数the5bansofeachteam(again,champion IDs are used )
首先读取所需的包,然后读取数据集。
#数据整理importnumpyasnpimportpandasaspd # 可视化importmatplotlib.pyplotaspltimportseabornassnsimportplotlyaspyimportplotly.graph _ graph建模froms klearn.treeimportdect model _ selectionimporttrain _ test _ split,gridsearchcvfrommon class ification _ report #读取数据df=PD.read _ CSV ( )
我们分别就影响比赛的相关因素进行如下探索。
1 .目标变量分布
数据集共记录51490件,其中1队胜利次数26077次,占50.6%,2队胜利次数25413次,占49.4%。 没有样品的不平衡。
——代码如下。
#饼图trace0=go.pie ( labels=df [ ' winner ' ].value _ counts ).index,values=df [ ' winner ' ].value _ counts
从直方图中可以看出,游戏时间基本遵循正态分布,其中最短的游戏时间为3分钟,3分钟为游戏重启时间,最长的游戏时间为79分钟。 中间50%的时间在26~36分钟之间。
——代码:
df [ ' game _ duration ' ]=round [ ' game duration ' ]/60 ] #选择数据x1=df [ df [ ' winner ' ]==1] [ ' game _ duration opacity=0.9 ) layout=go.layout(title='比赛游戏时间分布') ) data=[trace0,trace1]fig=go.figure ) data,layout )
获得一血的球队的胜率相对较高,在第一队比赛中,首先获得一血时的胜率为59.48%,比没有获得一血的比赛高出18%。 在第二队比赛中,获得一血时胜率为58.72%,比未获得一血的比赛高出18%。
——代码如下。
plot _ bar _ horizontal ( input _ col=' first blood ',target_col='winner ',title_name='对一血胜利的影响') ) 4.
从数据来看,第一座防御塔看起来像是一个有说服力的指标。 在第一队的比赛中,首先破坏一塔时球队的胜率高达70.84%,比没有获得一塔的比赛高出41.64%。 在第二队的比赛中,有相近的数据表现。
——代码为:
plot _ bar _ horizontal ( input _ col=' first tower ',target_col='winner ',title_name='对一塔胜利的影响') )5.首先
在一定程度上可以预测,在比赛中获得第一个克里斯塔的队伍中,91%能获得冠军。 首先是破坏克里斯塔国家队已经积累的充分优势,因为克里斯塔的力量强大,更有价值。
——代码如下。
plot _ bar _ horizontal ( input _ col=' first inhibitor ',target_col='winner ',title_name='通过破坏第一个水晶获得胜利
统计数据显示,在比赛中射杀第一男爵有80%的胜率。
plot _ bar _ horizontal ( input _ col=' first baron ',target_col='winner ',title_name='第一条杀死男爵对胜利的影响
在第一个队伍中,第一个开枪打死第一条龙的队伍的胜率为68.6%,比没能取得优先顺序的比赛高出36%。
plot _ bar _ horizontal ( input _ col=' first dragon ',target_col='winner ',title_name='杀死第一条龙对胜利的影响
在首发球队中,首发击败首发峡谷先锋的球队胜率为69.45%,比不优先的比赛高出38.92%。
plot _ bar _ horizontal ( input _ col=' firstriftherald ',target_col='winner ',title_name='第一条峡谷先锋对胜利的影响
选择首支队伍的破坏防御塔数作为影响因素,可见破坏防御塔数越多获胜的概率越高。 数量多于8个时,胜率大于85%。 11个防御塔全部破坏时的胜率为99.16%,当然也有8.4的翻船概率。
plot _ bar _ vertical ( input _ col=' t1 _ tower kills ',target_col='winner ',title_name='破坏防御塔数对胜利的影响)
破坏水晶的数量越多,赢的概率就越高。 未破坏水晶时的胜率为12.55%,破坏1个时的胜率为81.11%,2个为92.38%。
plot _ bar _ vertical ( input _ col=' t1 _ inhibitor kills ',target_col='winner ',title_name='水晶破坏对胜利的影响' ) ) ) ) 652
击毙男爵的数量越多,获胜的概率就越高,击毙5名男爵的数据只有一个,之后需要删除。
plot _ bar _ vertical ( input _ col=' t1 _ baron kills ',target_col='winner ',title_name='男爵数击杀对胜利的影响')
越是射龙,获胜的概率就越高
plot _ bar _ vertical ( input _ col=' t1 _ dragon kills ',target_col='winner ',title_name='对杀大龙数对决的影响'()
首先进行第一次清洗,筛选建模所需的变量。
#删除时间少于15分钟且分类较少的记录df=df[(df(gameduration ) ]=900 ( df ) ) t1_Baronkills!=5) ) print(df.shape ) 50180,62 )过滤器建模变量df_model=df[['winner ',' firstBlood ',' firstTower ',' first ' t1_baronKills ',' t1_dragonKills ',' t2_towerKills ',' t2_towerKills ',' T2_
#将训练集与测试集分开的x=df_model.drop(winner (,axis=1) y=df_model ) winner ) y_train,X_test,y,
#参数parameters={'splitter':('best ',' random ',' criterion':('gini ',' entropy ), ' max_depth'[ }#模型clf=decisiontreeclassifier ( random _ state=0) GS=gridsearchcv(clf,parameters, cv=10 )用于创建GS.fit ) x_trrchcv )的estimator=decisiontreeclassifier ( random _ state=0),param _ grid={ ' critect } ' random ' ( ) )最佳分数print (,GS.best _ score _ ( print ),GS.best _ params _ ( best param ),GS.best _ params ) ' splitter':'best'}#最佳模型best _ clf=decisiontreeclassifier ( criterion=' Gini ',max _ dept tier y _ train ( Prain )
#输出分类报表y_pred=best_clf.predict(x_test ) cm=confusion_matrix(y_test, y_pred ) Cr=class ification _ ( class Cr ) classificationreport:precisionrecallf1- scoresupport 10.980.98507720.980.980.984959 accuracy 0.9810036 macro avg annot=True,fmt='.1f ',cmap='flag ',linewidths=0.2,cbar=False ) G1.seear ) )。 font dict={ ' fontsize ':15 } ( G1.set _ xlabel ( ' y _ pred ', fontdict={'fontsize':15} ) G1.set_title ) ) ) fontsize ) ) font ) ' confusion_matrix ' )输出属性重要性imp=PD.dode best_clf.feature_importances_ ) )为' importance s ' ] imp=imp.sort _ values ( importance s ),ascending=False
以下代码将用于输出此树。
#可视化importgraphvizfromsklearnimporttreedot _ data=tree.export _ graphviz ( decision _ tree=best _ clf,max _ depth
我们假设。 第一队拿下了第一血,第一塔,第一男爵,第一条龙和第一峡谷的先锋,第二队只拿下了第一水晶。
第一队塔、水晶、男爵和龙杀死的数量分别为10、2、1、4和塔、水晶、男爵和龙的数量分别为7、2、1、1。
#新数据new _ data=[ 1,1,2,1,1,10,2,1,4,7,2, 1 ] c=best _ clf.predict _ proba ( new _ data best _ clf.predict ( x1 ) ) print (第一初始化语言)、list ( nsecondteamwinprobabilility list ( c [1] * 100 ) ) winner is:[1] firstteamwinprobabilityis % [ 89.87341772151899 ] secs
光遇1.23每日任务该怎么完成呢?在光遇世界有着各种精彩有趣的任务内容,玩家可以完成后获取大量的游戏奖励,小编
《云顶之弈》这游戏中卢安娜的飓风这件武器最近版本更新中被强化了,分裂攻击的伤害效果大大提升。有些小伙伴
迷你世界激活码2023是哪些呢?在精彩有趣的全新挑战活动中,玩家可以体验到更多丰富的游戏奖励。小编今天准备了
很多传奇的老玩家关心关于贪玩蓝月祝福油怎么用的相关问题,今天柠檬友玩小编给大家搜集整理了如下内容,希望对
《魔兽世界怀旧服》中存在着多样的公会制度,DKPROLL团就是其中之一,关于这个制度的意思好优劣势,本文将为你解
斗罗大陆魂师对决阵容最佳搭配2023,新版本上线了很多魂师,我们应该如何搭配呢?以下为大家分享新版本顶级阵容大
时间:2023-01-02
时间:2023-01-02
时间:2023-01-02
时间:2023-01-02
时间:2023-01-02
时间:2023-01-02
时间:2023-01-02
时间:2023-01-02
时间:2023-01-02
时间:2023-01-02