首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

用 Python 分析了 1982 场英雄联盟数据,开局前预测游戏对局胜负!

  • 24-03-04 23:20
  • 4791
  • 14061
blog.csdn.net

640?wx_fmt=gif

640?wx_fmt=jpeg


640?wx_fmt=png

前言


如今,只要随便进入一个网吧,都会发现玩《英雄联盟》的人是最多的,可以这么说,《英雄联盟》已经是当之无愧的端游一哥。而在拥有如此基数玩家的《英雄联盟》,已经不仅仅是一个电竞游戏这么简单了,它还带给了我们无数的欢乐。

问君能有几多愁,辅助闪现抢人头;问君能有几多愁,卡牌千里送人头。问君能有几多愁,皇子开大关队友;清明时节雨纷纷,各种队友各种坑。别人笑我不买眼,我笑别人浪费钱;孤帆远影碧空尽,草丛惊现蛮易信 。相见时难别亦难,碰见赵信菊花残;我自横刀向天笑,剁人只需用三刀。苦练盲僧千百次, 盲目对战 N 多次;战输不下五十次, 砸得鼠标要出事;举杯邀明月,草丛遇盖伦。

前几天写了一篇关于吃鸡游戏的分析用 Python 分析了 1w 场吃鸡数据,原来吃鸡要这么玩!帮助小胖提升了吃鸡率。鉴于“二百斤灵魂”小胖舍友不仅痴迷于吃鸡类游戏,还非常喜欢 LOL,所以为了帮助他每天尽快拿到首胜,爬取并分析了 1982 余场 LOL 数据。非常神奇的是,在开局之前能够高概率的预测本局的胜负!让你提前做好心理准备。


640?wx_fmt=png

假设


  • 假设没有王者等大神代玩小号

  • 假设没有代练

  • 假设没有因为半途被媳妇抓到而挂机的行为


640?wx_fmt=png

游戏对战数据获取


国服:腾讯游戏平台非官方 API —— http://www.games-cube.com/

640?wx_fmt=png

外服:Riot 开发者平台 API —— https://developer.riotgames.com/

640?wx_fmt=png

连接数据库:

import numpy as npimport pymysql, random, jsondef connect_db(database): try:   conn = pymysql.connect(host='localhost', port=3306, user='root', password='zandaoguang', db=database, charset='utf8')   return conn except:   print ('Exception: MySQL Connection')   return None


640?wx_fmt=png

分析和训练数据


利用神经网络(neural_network)、随机森林(random_forest)和支持向量机(support_vector)等若干智能算法进行训练和回归,最终进行比较效果。

下面为神经网络部分代码:

from __future__ import print_functionimport numpy as np#np.random.seed(1337)  # for reproducibilityfrom keras.datasets import mnistfrom keras.models import Sequential, load_modelfrom keras.layers import Dense, Dropout, Activation, Flattenfrom keras.layers import Convolution2D, MaxPooling2Dfrom keras.utils import np_utilsfrom keras import backend as Kfrom keras.optimizers import SGD, Adam, RMSpropimport gzipimport sysfrom six.moves import cPicklefrom fetcher import *batch_size = 256nb_classes = 2nb_epoch = 100champion_dict = fetch_champion_dict("champion136.json")champion_num = len(champion_dict)X_train = X_train.astype('int8')X_test = X_test.astype('int8')print('X_train shape:', X_train.shape)print(X_train.shape[0], 'train samples')print(X_test.shape[0], 'test samples')Y_train = np_utils.to_categorical(y_train, nb_classes)Y_test = np_utils.to_categorical(y_test, nb_classes)model = Sequential()model.add(Dense(1500, input_dim = champion_num, init='uniform'))model.add(Activation('sigmoid'))model.add(Dense(2))model.add(Activation('softmax'))model.summary()model.compile(loss='categorical_crossentropy',             optimizer=RMSprop(),             metrics=['accuracy'])history = model.fit(X_train, Y_train,                   batch_size=batch_size, nb_epoch=nb_epoch,                   verbose=1, validation_data=(X_test, Y_test))score = model.evaluate(X_test, Y_test, verbose=0)print('Test score:', score[0])print('Test accuracy:', score[1])


随机森林代码:

from sklearn.ensemble import RandomForestClassifierfrom sklearn.externals import joblibfrom fetcher import *champion_dict = fetch_champion_dict("champion136.json")champion_num = len(champion_dict)X_train, y_train, X_test, y_test = fetch_one_side_riot('12', 'MATCHED_GAME', 'KING_PORO', 'KINGPORO', ('1492660800000', '1493740800000'), champion_dict)clf = RandomForestClassifier(n_estimators=500, n_jobs=2)clf.fit(X_train, y_train)train_score = clf.score(X_train, y_train)print ("Train Score = "+str(train_score))test_score = clf.score(X_test, y_test)print ("Test Score = "+str(test_score))


支持向量机代码:

from sklearn.externals import joblibfrom sklearn import svmfrom fetcher import *champion_dict = fetch_champion_dict("champion136.json")champion_num = len(champion_dict)X_train, y_train, X_test, y_test = fetch_one_side_riot('12', 'MATCHED_GAME', 'ARAM_UNRANKED_5x5', 'ARAM', ('1492660800000', '1493740800000'), champion_dict)clf = svm.SVC()clf.fit(X_train, y_train)train_score = clf.score(X_train, y_train)print ("Train Score = "+str(train_score))test_score = clf.score(X_test, y_test)print ("Test Score = "+str(test_score))


640?wx_fmt=png

游戏对战胜负预测


根据双方英雄阵容,预测获胜方的准确率(%)

作者注:由于阿广近期没有玩英雄联盟,所以分析的数据为 2017 年的游戏数据。

640?wx_fmt=png

只根据本方英雄阵容,预测本方能否获胜的准确率(%)

640?wx_fmt=png


640?wx_fmt=png

期望研究的问题


  • LOL 中游戏胜利是否与能性别有关?

  • LOL 的胜率是否和每天的时间段有关系?

  • 在女朋友阻止自己玩游戏的情况下,LOL 的胜率下降多少?如何解决?

注:由于数据量太小,以后能收集到更多的数据,是希望可以对上面以及更多的方向进行研究。


640?wx_fmt=png

结论


  • LOL 取得最后胜利的三个重要因素为:团队阵容、团队水平,配合默契程度。

  • 合理地分配 BUFF 也是游戏胜利的必要因素。

  • 打游戏的心态也是游戏胜利一个不可或缺的条件。


640?wx_fmt=png

写在最后


虽然我们通过机器学习算法可以预测这把的输赢,但是这毕竟不是我们最后的结果。玩英雄联盟和爱情类似,明明知道是我们不可能,却坚持去追求,这正是爱的美丽。也许没有什么结果,可那过程本身的美丽便足够用一生去品味。

我有一个兄弟,沉迷这个游戏耗费了数年光阴,至今二十好几还流连网吧不返,家人反目。当然游戏本身是没有错的,我也不是责怪游戏,它本质不过是娱乐,从古至今皆有之,只是形式一直在变化,越来越吸引人。明知道每按一次键盘便使自己堕落到更深的深渊,但却无法阻止双手伴随激动的情绪抽动,可悲的人。

极度沉迷游戏的人啊,把你有限的生命留在无限的游戏里吧,那你的灵魂到离开那一刻都是充满成就的。即使后来新闻报道中会出现一个猝死在网吧被人当成笑话嘲笑的懦夫!

本文为作者投稿,版权归作者所有。

作者简介:阿广,本文首发于个人公众号「视学算法」。

「视学算法」是专注于大数据、人工智能和算法的学习平台,也是一个保送中科院软件研究所直博生的自留地。人生苦短,我愿做您最忠实的技术支持伙伴!一起用代码改变世界!


640?wx_fmt=jpeg

推荐阅读:

  • 力压 Java 与 C 的 Python 现状如何了?

  • 烂代码长什么样?

  • 细数华为核心技术家底:华为真会被击垮吗?

  • 程序员为啥365天都背电脑包?这答案我服!

  • 一个程序员父亲的呼吁:不要教你的孩子从小学编程!

  • 比特币圈子段子多,苦中作乐就能过寒冬?

  • 妈耶,摆脱机器音,二次宅的歌姬女友彻底活了

  • Python | 7招教你识别一个网站是否是Django后台


荐号



640?wx_fmt=gif

区块链大本营,是区块链开发者的基地,从这里出发,让区块链回归技术与应用的本质!


640?wx_fmt=png 640?wx_fmt=gif

点击“阅读原文”,打开 APP 阅读更顺畅!

CSDN
微信公众号
成就一亿技术人
注:本文转载自blog.csdn.net的CSDN资讯的文章"https://blog.csdn.net/csdnnews/article/details/85086182"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top