Python数据挖掘:决策树算法预测云顶之弈排名

前言

为什么要预测云顶排名?学习,娱乐,其他目的。
通过什么预测?通过收集到的前八回合血量数据和排名。(你也可以用你自己觉得好的数据,比如前n回合输赢等)。
预测结果怎么样?游戏没结束谁也不知道结果怎么样,预测结果仅供参考,学习函数调用才是最大的收获。
大家看了觉得还行的话点个赞。

使用到的库

pandas

打开csv,及对表格数据筛选的方法。

sklearn

主要是DecisionTreeClassifier:封装好的决策树算法
export_graphviz:决策树可视化输出;解决问题:找不到graphviz可执行程序。可视化中文乱码问题

joblib/pickle:

用来保存训练好的模型;解决问题:python版本兼容

matplotlib

基本的绘图,输出图片;解决问题:中文乱码

requests

从网页下载图片,文件等。

云服务器

由于数据是一步一步(一局)收集,我又忍不住每局都想试试,所以模型一直在变化。我不想让自己的电脑去计算这个模型,所以把数据和代码部署到云服务器,将生成的文件共享,然后通过requests在自己的机器上把模型和结果下载下来。
使用云服务器共享文件

结果展示

Python数据挖掘:决策树算法预测云顶之弈排名_第1张图片
图1 目前收集到的数据的排名分布图
Python数据挖掘:决策树算法预测云顶之弈排名_第2张图片
图2 某局比赛预测结果图

正文

数据说明

云顶之奕简介:自走棋,选择自己的队伍,获取装备,一共八位玩家对决,100滴血开始,0血或其他七个玩家0血结束。排名1-8
Python数据挖掘:决策树算法预测云顶之弈排名_第3张图片
图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/
安相关库
目前我的版本如下:
Python数据挖掘:决策树算法预测云顶之弈排名_第4张图片
图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.包含库:
Python数据挖掘:决策树算法预测云顶之弈排名_第5张图片
1.定义获取数据函数:
Python数据挖掘:决策树算法预测云顶之弈排名_第6张图片打开我们的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’)可以保存图片到当前位置。
Python数据挖掘:决策树算法预测云顶之弈排名_第7张图片
图6 八回合血量折线图
3.绘制名次分布图:
Python数据挖掘:决策树算法预测云顶之弈排名_第8张图片
这里第一个参数为列表,value_counts()相当于分类计算数量了,然后.values取值(不要表头)。
explode为不同块的间隔,数据有8类就*8,你如果只收集到了5中排名,这里改成5。
labels相当于加上表头,和.index和.values对应。后面一个参数表示保留小数位数。
title添加表态,此处可能会中文乱码,解决方法:在之前(可以在import后面)加上:
解决中文乱码
matplotlib操作:https://blog.csdn.net/Notzuonotdied/article/details/77876080
4:训练模型的函数:
Python数据挖掘:决策树算法预测云顶之弈排名_第9张图片
如上图,先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下加上:
Python数据挖掘:决策树算法预测云顶之弈排名_第10张图片
然后通过StringIO处理中文乱码。
得到结果:
Python数据挖掘:决策树算法预测云顶之弈排名_第11张图片
图7 决策树可视化图
5.模型加载与调用:
Python数据挖掘:决策树算法预测云顶之弈排名_第12张图片
首先加载数据,补充一下start=0,end=;然后加载模型,我因为不想自己的电脑算模型,所以放在云服务器上了。用的时候再去下载:
Python数据挖掘:决策树算法预测云顶之弈排名_第13张图片
这里就是调用之前写好的函数,预测就是将最后一行数据(-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()可以下载,都可以。

你可能感兴趣的:(python)