1. 程式人生 > >用Python抓取並分析了1982場英雄聯盟數據,教你開局前預測遊戲對局勝負!

用Python抓取並分析了1982場英雄聯盟數據,教你開局前預測遊戲對局勝負!

cross 2018年 eva root 結果 sigmoid tcl optimizer json

英雄聯盟想必大多數讀者不會陌生,這是一款來自拳頭,由騰訊代理的大型網絡遊戲,現在一進網吧,你就能發現一大片玩英雄聯盟的人。在2017年中國戰隊無緣鳥巢的世界總決賽後,一大片人選擇了棄遊,只是終究沒躲過“真香定理”,在2018年的中旬,又有大批戰友又回到熟悉的召喚師峽谷戰場,時至今日,英雄聯盟已經不僅僅是一款遊戲,一個電競項目了,它已經成為了我們生活的快樂源泉了。

技術分享圖片

問君能有幾多愁,輔助閃現搶人頭;問君能有幾多愁,卡牌千裏送人頭。問君能有幾多愁,皇子開大關隊友;清明時節雨紛紛,各種隊友各種坑。別人笑我不買眼,我笑別人浪費錢;孤帆遠影碧空盡,草叢驚現蠻易信 。相見時難別亦難,碰見趙信菊花殘;我自橫刀向天笑,剁人只需用三刀。苦練盲僧千百次, 盲目對戰N 多次;戰輸不下五十次, 砸得鼠標要出事;舉杯邀明月,草叢遇蓋倫。

鑒於現在喜歡英雄聯盟的大佬如此之多,為了幫助大家盡快的拿到首勝,小編爬取並分析了1982余場LOL數據。非常神奇的是!在開局之前能夠高概率的預測本局的勝負!讓你提前做好心理準備。

假設

假設沒有王者等大神代玩小號

假設沒有代練

假設沒有因為半途被媳婦抓到而掛機的行為

假設沒有突然掉網連不上去的行為

遊戲對戰數據獲取

國服:騰訊遊戲平臺非官方API - http://www.games-cube.com/

技術分享圖片

外服:Riot開發者平臺API- https://developer.riotgames.com/

技術分享圖片 連接數據庫:
import numpy as np
import pymysql, random, json
def 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

分析和訓練數據

利用神經網絡(neural_network)、隨機森林(random_forest)和支持向量機(support_vector)等若幹智能算法進行訓練和回歸,最終進行比較效果。

下面為神經網絡部分代碼:

from __future__ import print_function
import numpy as np
#np.random.seed(1337)  # for reproducibility
from keras.datasets import mnist
from keras.models import Sequential, load_model
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras import backend as K
from keras.optimizers import SGD, Adam, RMSprop
import gzip
import sys
from six.moves import cPickle
from fetcher import *
batch_size = 256
nb_classes = 2
nb_epoch = 100
champion_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 RandomForestClassifier
from sklearn.externals import joblib
from 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 joblib
from sklearn import svm
from 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))

遊戲對戰勝負預測

根據雙方英雄陣容,預測獲勝方的準確率(%)

PS:由於阿廣近期沒有玩英雄聯盟,所以分析的數據為2017年的遊戲數據。

技術分享圖片

只根據本方英雄陣容,預測本方能否獲勝的準確率(%)

技術分享圖片

期望研究的問題

  • LOL中遊戲勝利是否與能性別有關?
  • LOL的勝率是否和每天的時間段有關系?
  • 在女朋友阻止自己玩遊戲的情況下,LOL的勝率下降多少?如何解決?

註:由於數據量太小,以後能收集到更多的數據,是希望可以對上面以及更多的方向進行研究。

結論

  • LOL取得最後勝利的三個重要因素為:團隊陣容、團隊水平,配合默契度。
  • 合理的分配BUFF也是遊戲勝利的必要因素。
  • 打遊戲的心態也是遊戲勝利一個不可或缺的條件。

結語:

雖然我們通過機器學習算法可以預測這把的輸贏,但是這畢竟不是我們最後的結果。玩英雄聯盟和愛情類似,明明知道是我們不可能,卻堅持去追求,這正是愛的美麗。也許沒有什麽結果,可那過程本身的美麗便足夠用一生去品味。

遊戲本來的用意是給大家放松心情,釋放壓力的(職業選手就不同了)。所以我們一定要把握好時間,對於沈迷遊戲這種的就大可不必了,好的遊戲應該是帶給我們快樂,假如天天沈迷遊戲,墮落不已,那就落入了錯誤的深淵了。當然好的方面也不是沒有,看廠長、UZI這些選手就是好的代表啊!以上就是本文的全部內容,喜歡的小夥伴點個贊唄!

寫在最後:

如果大家在學習Python的路上,或者打算學習Python需要學習資料,可以加群571799375,群裏學習資料免費贈送給大家喔!

本文來自網絡,如有侵權,請聯系小編刪除!

用Python抓取並分析了1982場英雄聯盟數據,教你開局前預測遊戲對局勝負!