前言
爲什麼要預測雲頂排名?學習,娛樂,其他目的。
通過什麼預測?通過收集到的前八回合血量數據和排名。(你也可以用你自己覺得好的數據,比如前n回合輸贏等)。
預測結果怎麼樣?遊戲沒結束誰也不知道結果怎麼樣,預測結果僅供參考,學習函數調用纔是最大的收穫。
大家看了覺得還行的話點個贊。
使用到的庫
pandas
打開csv,及對錶格數據篩選的方法。
sklearn
主要是DecisionTreeClassifier:封裝好的決策樹算法
export_graphviz:決策樹可視化輸出;解決問題:找不到graphviz可執行程序。可視化中文亂碼問題
joblib/pickle:
用來保存訓練好的模型;解決問題:python版本兼容
matplotlib
基本的繪圖,輸出圖片;解決問題:中文亂碼
requests
從網頁下載圖片,文件等。
雲服務器
由於數據是一步一步(一局)收集,我又忍不住每局都想試試,所以模型一直在變化。我不想讓自己的電腦去計算這個模型,所以把數據和代碼部署到雲服務器,將生成的文件共享,然後通過requests在自己的機器上把模型和結果下載下來。
使用雲服務器共享文件
結果展示
圖1 目前收集到的數據的排名分佈圖
圖2 某局比賽預測結果圖
正文
數據說明
雲頂之奕簡介:自走棋,選擇自己的隊伍,獲取裝備,一共八位玩家對決,100滴血開始,0血或其他七個玩家0血結束。排名1-8
圖3 基本數據展示
數據我是收集的前八回合的學了及排名數據,數據來源於直播中段位較高數據,其中type目前有
1:"我唯一喜歡的主播"的認真遊戲時的數據
2:該主播娛樂局的數據
3:鑽石左右分段的主播記錄
數據從9.15版本開始收集。
數據從玩家對戰開始,記錄每回合結束後的血量
回合8結束後進入第3輪選秀。
環境搭建
首先在自己電腦上跑起來:
安裝python:建議安裝Python3.7-64
安裝編譯器:建議Pycharm2018.3.8
新建一個項目,設置新環境後:File->Setting->Project:“項目名”->Project->Project Interpreter->+,修改爲清華源:https://pypi.tuna.tsinghua.edu.cn/simple/
安相關庫
目前我的版本如下:
圖4 需要安裝庫說明圖
安裝黑線庫即可,其他的依賴庫pip會自動安裝
修改Pycharm在未安裝庫上使用Alt+Enter install時的源
在 C:\Users\當前用戶\ 下新建pip文件夾,進入文件夾新建pip.ini
輸入:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
正式開始
在根目錄上右鍵,New Python File,然後第一次運行需要在此文件上右鍵run,以後可使用右上角綠三角快捷鍵。
0.包含庫:
1.定義獲取數據函數:
打開我們的csv文件,dtype表示數據類型,我的正文都是int,不加他會有自己默認的類型,也可以指定部分列dtype={‘rank’:‘int’}
data[data[‘type’]!=2]篩選了type不爲2的所有數據
data.iloc[:,:15]表示0-15行的所有數據,data.iloc[0:3,:15]表示前三列。
選取完成後捨棄第一列,‘type’。
pandas操作:https://www.jb51.net/article/134615.htm
2.繪製所有數據的折線圖:
第一個range(1,9)相當於一個[1,…,8]列表在這裏作爲x座標,data.values[i,;8]作爲一條折線的y座標列表,i表示第i行,:8表示前8列。fkcolor是我定義的顏色列表:
然後紅到黑分別表示第1-8名,結果如圖。使用plt.save(‘1.png’)可以保存圖片到當前位置。
圖6 八回合血量折線圖
3.繪製名次分佈圖:
這裏第一個參數爲列表,value_counts()相當於分類計算數量了,然後.values取值(不要表頭)。
explode爲不同塊的間隔,數據有8類就*8,你如果只收集到了5中排名,這裏改成5。
labels相當於加上表頭,和.index和.values對應。後面一個參數表示保留小數位數。
title添加表態,此處可能會中文亂碼,解決方法:在之前(可以在import後面)加上:
matplotlib操作:https://blog.csdn.net/Notzuonotdied/article/details/77876080
4:訓練模型的函數:
如上圖,先iloc選出數據,此處start=0,end=8及取前8列數據。
DTC是DecisionTreeClassifier別名,此函數包括許多參數,本次現在最大深度爲8
其他參數有需要請參照:
https://blog.csdn.net/li980828298/article/details/51172744
fit()即開始訓練,完成後使用joblib或者picker保存
兩個dump()函數均有protocol參數,python3默認爲3,python2默認爲0;0,1,2可通用,另外,python3-64與python-32不兼容。
然後使用export_graphviz進行可視化,需要先安裝graphviz
windows下載.msi雙擊安裝。
https://graphviz.gitlab.io/_pages/Download/Download_windows.html
lUbuntu使用命令 sudo apt-get install graphviz(先sudo apt-get update)
安裝了graphviz不需要設置環境變量,因爲設置了也找不到,需要在import下加上:
然後通過StringIO處理中文亂碼。
得到結果:
圖7 決策樹可視化圖
5.模型加載與調用:
首先加載數據,補充一下start=0,end=;然後加載模型,我因爲不想自己的電腦算模型,所以放在雲服務器上了。用的時候再去下載:
這裏就是調用之前寫好的函數,預測就是將最後一行數據(-1:0)的x傳入訓練好的模型。然後調用predict。
使用雲服務器
ubuntu:https://blog.csdn.net/adley_app/article/details/78959864
winserver: https://blog.csdn.net/zsq520520/article/details/62039958
以上代碼已經可以完整使用,數據量不大速度也很快。雲服務器只是簡單的用來共享文件,主要是安裝python,安裝pycharm,然後安裝apache2,WinServer推薦安裝phpStudy,Linux就就很容易安裝了。然後將代碼運行生成的文件的目錄改到apache的WWW共享目錄(相當於根目錄),
Linux爲 /var/www/Html。然後就可以像我一樣在雲服務器上運行代碼。通過公網ip/路徑就行。本地直接getFile()可以下載,都可以。