LPL2019职业联赛春季+夏季赛数据分析

分析需求1:出场次数最多的10位英雄

分析需求2:胜场次数最多的10位英雄

分析需求3:分析所有英雄的胜率,并取出前10进行图表展示

分析需求4:每个位置的出场英雄数饼图分析

分析需求5:选手UZI的英雄池分析

分析需求6:每个位置胜率最高的英雄

分析需求1:出场次数最多的10位英雄

#插入会用到的库
import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib as mlt 
print(np.__version__)
print(pd.__version__)
print(mlt.__version__)
#去除警告
import warnings
warnings.filterwarnings('ignore')
### 支持中文字符
mlt.rcParams["font.family"] = "SimHei"
mlt.rcParams["axes.unicode_minus"]=False
%matplotlib inline

在这里插入图片描述
思路:
1.数据导入及清洗;
2.取出需要的字段部分;
3.将所有字段压平成一列字段,并对value进行计数;
4.取出value数量top10,并画出直方图.

df = pd.read_csv('lol_games_2019.csv',header = None,sep = ',')
display(df)

在这里插入图片描述

#显示所有列的内容
pd.set_option('max_columns',98)
display(df)

在这里插入图片描述

#给每个字段重命名
# 比赛日期,A队伍,A对得分,B队伍,B队得分,
# 左队伍名称,右队伍名称,左队伍总击杀,右队伍总击杀,
# 左队伍大龙击杀,右队伍大龙击杀,左队伍小龙击杀,右队伍小龙击杀,
# 左队伍击毁防御塔,右队伍击毁防御塔,左队伍总金币数,右队伍总金币数,
# 左队伍5名队员搬掉的英雄,
# 右队伍5名队员搬掉的英雄,
# 左队伍5名队员,
# 右队伍5名队员,
# 左队伍5名队员选择的英雄,
# 右队伍5名队员选择的英雄,
# 左队伍5人击杀,右队伍5人击杀,
# 左队伍5人死亡,右队伍5人死亡,
# 左队伍5人助攻,右队伍5人助攻,
# 左队伍5人金币,右队伍5人金币
columns = ["datetime","teama","scorea","teamb","scoreb","lname","rname","result", "lkill","rkill","lbdk","rbdk","lsdk","rsdk","ltower","rtower","ltgold","rtgold","lbanhero1","lbanhero2","lbanhero3","lbanhero4","lbanhero5","rbanhero1","rbanhero2","rbanhero3","rbanhero4","rbanhero5","ltm1","ltm2","ltm3","ltm4","ltm5","rtm1","rtm2","rtm3","rtm4","rtm5","lpickhero1","lpickhero2","lpickhero3","lpickhero4","lpickhero5","rpickhero1","rpickhero2","rpickhero3","rpickhero4","rpickhero5","lkill1","lkill2","lkill3","lkill4","lkill5","rkill1","rkill2","rkill3","rkill4","rkill5","ldead1","ldead2","ldead3","ldead4","ldead5","rdead1","rdead2","rdead3","rdead4","rdead5","lassist1","lassist2","lassist3","lassist4","lassist5","rassist1","rassist2","rassist3","rassist4","rassist5","lgold1","lgold2","lgold3","lgold4","lgold5","rgold1","rgold2","rgold3","rgold4","rgold5","lsoldier1","lsoldier2","lsoldier3","lsoldier4","lsoldier5","rsoldier1","rsoldier2","rsoldier3","rsoldier4","rsoldier5"]
df.columns = columns
display(df)

在这里插入图片描述

#查看数据总览
df.info()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#result和lpickhero1字段存在3行空值
df[df['lpickhero1'].isnull()]

在这里插入图片描述

#由于此三行都是无效数据,所以进行删除
df = df.dropna(axis = 0)
df.info()

在这里插入图片描述
在这里插入图片描述

#取出需要分析的字段(所有出场的英雄)
columns = ["lpickhero1","lpickhero2","lpickhero3","lpickhero4","lpickhero5","rpickhero1","rpickhero2","rpickhero3","rpickhero4","rpickhero5"]
data = df[columns]
display(data)

在这里插入图片描述

#将所有字段进行压平,形成汇总成一个字段(一列)
data_array = data.values.flatten()
hero_list = pd.DataFrame(data_array)
#将唯一的字段进行重命名
hero_list.columns = ['hero_name']
#计算每个英雄的出场次数
hero_count = hero_list['hero_name'].value_counts()
display(hero_count)
#也可以这么写
# hero_count = hero_list.groupby('hero_name').size().sort_values(ascending= False)
# display(hero_count)

在这里插入图片描述

#取出出场次数top10的英雄,并绘出直方图
hero_top10 = hero_count.head(10)
hero_top10.plot(kind = 'bar')
plt.show()
# display(hero_top10)

在这里插入图片描述

分析需求2:胜场次数最多的10位英雄

思路 :

1.将r方或者l方胜利的五位英雄提取出来;

2.将提取出来的两个表的字段名进行统一命名,并且组合成一个表;

3,将组合成的表进行压平;

4.进行数据处理并绘出直方图.

#胜负的表现形式: result字段为r时,r方胜,否则l方胜
df['result'].head(5)

在这里插入图片描述

#将l方或者r方胜利的英雄取出来
sel_hero = df[['result',"lpickhero1","lpickhero2","lpickhero3","lpickhero4","lpickhero5","rpickhero1","rpickhero2","rpickhero3","rpickhero4","rpickhero5"]]
left_win = sel_hero[sel_hero['result'] == 'l'][["lpickhero1","lpickhero2","lpickhero3","lpickhero4","lpickhero5"]]
right_win = sel_hero[sel_hero['result'] == 'r'][["rpickhero1","rpickhero2","rpickhero3","rpickhero4","rpickhero5"]]
display(left_win,right_win)

在这里插入图片描述

#对提取出来的两个表的字段进行统一,并进行合并
left_win.columns = ['pickhero1','pickhero2','pickhero3','pickhero4','pickhero5']
right_win.columns = ['pickhero1','pickhero2','pickhero3','pickhero4','pickhero5']
win_hero = pd.concat((left_win,right_win))
display(win_hero)

在这里插入图片描述

#对整合好的表进行压平,并对唯一字段进行重命名
win_hero_array = win_hero.values.flatten()
all_win = pd.DataFrame(win_hero_array,columns=['name'])
display(all_win)

在这里插入图片描述

#算出胜利场数最多的top10英雄
all_win_top10 = all_win['name'].value_counts().head(10)
display(all_win_top10)

在这里插入图片描述

#绘出直方图
all_win_top10.plot(kind='bar')
plt.show()

在这里插入图片描述

分析需求3:分析每个英雄的胜率以及胜率排行top10

思路:

1.求出胜利场次的所有英雄 --result_hero[‘name’].value_counts()

2.求出胜利场次的所有英雄对应的所有比赛场次 --所有英雄的胜利场次+所有英雄的失败场次 = 所有英雄的所有比赛场次

3.英雄胜率 = 第1点/第2点

#接上面的所有胜利的英雄如下
all_hero_win = all_win['name'].value_counts()
display(all_hero_win)

在这里插入图片描述

#求出所有英雄失败的场次,方法如分析需求2
left_fail_hero = sel_hero[sel_hero['result'] == 'r'][['lpickhero1',"lpickhero2","lpickhero3","lpickhero4",'lpickhero5']]
right_fail_hero = sel_hero[sel_hero['result'] == 'l'][['rpickhero1',"rpickhero2","rpickhero3","rpickhero4",'rpickhero5']]
# display(left_fail_hero,right_fail_hero)
#将左右两端的字段统一重命名并合并
left_fail_hero.columns = ['pickhero1','pickhero2','pickhero3','pickhero4','pickhero5']
right_fail_hero.columns = ['pickhero1','pickhero2','pickhero3','pickhero4','pickhero5']
all_fail = pd.concat((left_fail_hero,right_fail_hero))
display(all_fail)

在这里插入图片描述

#对所有的失败英雄二维表进行压平,并计数
fail_hero_array = all_fail.values.flatten()
fail_hero = pd.DataFrame(fail_hero_array,columns={'name'})
all_hero_fail = fail_hero['name'].value_counts()
display(all_hero_fail)

在这里插入图片描述

#所有英雄总场次
all_hero_win+all_hero_fail

在这里插入图片描述

#根据每个英雄的胜利场次/总场次,求出其top10胜率的英雄
all_hero_result = pd.concat((all_hero_win,all_hero_fail),axis=1)#将NaN值填充为0,并将all_hero_result进行重命名
all_hero_result.fillna(0,inplace = True)
all_hero_result.columns = ['victory','failure']
#all_hero_result添加一个字段vic_rate(胜率)
all_hero_result['vic_rate']=all_hero_result['victory']/(all_hero_result['failure']+all_hero_result['victory'])
#排序并取出胜率top10英雄
top10_win = all_hero_result['vic_rate'].sort_values(ascending = False).head(10)
display(top10_win)

在这里插入图片描述

#取出胜率top10的英雄绘出直方图
top10_win.plot(kind = 'bar')
plt.show()

在这里插入图片描述

分析需求4:每个位置的出场英雄数饼图分析

思路:

1.将所有出场英雄取出(左5个,右5个,合并)

2.将五个位置的英雄单独取出,并作去重计数

3.画出饼图

#英雄列
columns = ["lpickhero1","lpickhero2","lpickhero3","lpickhero4","lpickhero5","rpickhero1","rpickhero2","rpickhero3","rpickhero4","rpickhero5"]#取出所有的英雄
hero_data = df[columns]
#因为接下来要取到五个对应的英雄位置,所以要对左右的各5个英雄分成2组,然后进行合并成一组
left_data = hero_data[["lpickhero1","lpickhero2","lpickhero3","lpickhero4","lpickhero5"]]
right_data = hero_data[["rpickhero1","rpickhero2","rpickhero3","rpickhero4","rpickhero5"]]
#对两组的所有字段名进行统一
left_data.columns = ['pickhero1','pickhero2','pickhero3','pickhero4','pickhero5']
right_data.columns = ['pickhero1','pickhero2','pickhero3','pickhero4','pickhero5']
total_hero = pd.concat((left_data,right_data))
#对每个位置的英雄单独取出来,进行去重并计数
#top jungle Middle ad support 
top = total_hero.groupby('pickhero1').size().count()
jungle = total_hero.groupby('pickhero2').size().count()
middle = total_hero.groupby('pickhero3').size().count()
ad = total_hero.groupby('pickhero4').size().count()
support = total_hero.groupby('pickhero5').size().count()display(top, jungle, middle, ad, support )

在这里插入图片描述

#画出饼图 (数据,标签,颜色,块分裂,阴影,显示比例值autopct)
pie_data = [top, jungle, middle, ad, support]
pie_labels = ['上单','打野','中路','下路','辅助']
pie_colors = ['b','r','y','g','cyan'] 
pie_explode = [0,0,0,0,0]plt.pie(pie_data,labels = pie_labels,colors = pie_colors,explode = pie_explode,autopct = '%.2f%%')
plt.show()

在这里插入图片描述

分析需求5:选手UZI的英雄池分析

思路:

1.将UZI的所有场次及其所使用英雄取出来

2.对所有使用的英雄的次数取出来

3.画出饼图

#查看RNG队中uzi的位置 -- 第4位置:ad
display(df[df['teama']=='RNG'])

在这里插入图片描述

#取出UZI在左边队伍,右边队伍的选用英雄情况,然后进行合并
data = df[['ltm4','rtm4','lpickhero4','rpickhero4']]
uzi_left = data[data['ltm4'] == 'RNGUzi']['lpickhero4']
uzi_right = data[data['rtm4'] == 'RNGUzi']['rpickhero4']
uzi_left.columns = ['pickhero']
uzi_right.columns = ['pickhero']
uzi_pickhero = pd.concat((uzi_left,uzi_right))
display(uzi_pickhero)

在这里插入图片描述

#将uzi使用过的英雄进行去重并计算
uzi_hero = uzi_pickhero.value_counts()
display(uzi_hero)

在这里插入图片描述

#画图
uzi_hero.plot(kind = 'bar')
plt.show()

在这里插入图片描述

分析需求6:每个位置胜率最高的英雄

思路:

1.依次求出各个位置所有英雄对应的数量,然后合并成一个表

2.每个英雄加入他的胜率

3.取出各个位置对应的英雄以及他的胜率,然后取出各个位置胜率最高的英雄

#查看所有英雄胜率情况
display(all_hero_result)

在这里插入图片描述

#所有位置的英雄人数的出场次数
top = total_hero.groupby('pickhero1').size()
jungle = total_hero.groupby('pickhero2').size()
middle = total_hero.groupby('pickhero3').size()
ad = total_hero.groupby('pickhero4').size()
support = total_hero.groupby('pickhero5').size()#所有英雄所在的位置次数
hero_loc = pd.concat((top,jungle,middle,ad,support),axis = 1)
hero_loc.fillna(0,inplace = True)
hero_loc.columns = ['top', 'jungle', 'middle', 'ad', 'support']#把所有英雄的胜率添加进去
hero_loc['vic_rate'] = all_hero_result['vic_rate']
display(hero_loc)

在这里插入图片描述

#将所有有参与top位置的英雄都选出来,标记他的胜率然后进行排名,取出胜率最高的一位,其他位置同理
#1.取出参与各个位置英雄的胜率
top_vic_rate = hero_loc[hero_loc['top'] > 0]['vic_rate']
jungle_vic_rate = hero_loc[hero_loc['jungle'] >0]['vic_rate']
middle_vic_rate = hero_loc[hero_loc['middle'] >0]['vic_rate']
ad_vic_rate = hero_loc[hero_loc['ad'] >0]['vic_rate']
support_vic_rate = hero_loc[hero_loc['support'] >0]['vic_rate']#2.取出每个位置英雄胜率最高那位
top_best = top_vic_rate.sort_values(ascending = False).head(1) 
jungle_best = jungle_vic_rate.sort_values(ascending = False).head(1)
middle_best = middle_vic_rate.sort_values(ascending = False).head(1)
ad_best = ad_vic_rate.sort_values(ascending = False).head(1) 
support_best = support_vic_rate.sort_values(ascending = False).head(1)
display(top_best,jungle_best,middle_best,ad_best,support_best)

在这里插入图片描述

#将每个位置英雄胜率最高的英雄合并成一个表
hero_best = pd.concat((top_best,jungle_best,middle_best,ad_best,support_best),axis = 0)
display(hero_best)

在这里插入图片描述

#整理
best_hero = pd.DataFrame(hero_best)
best_hero['位置'] = ['上路','打野','中单','射手','辅助']
display(best_hero)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29330.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好嗨游戏:战火重燃!2019LPL夏季赛精彩看点全盘点! || 附夏季赛赛程表

文章首发于:好嗨游戏 还没从MSI比赛中IG翻车TL中回过神来,2019LPL夏季赛又悄然开始了,虽然IG重演了2018年MSI时RNG的剧情,但是电竞就是电竞,有输有赢有惊喜有意外太正常不过,还是让我们向前看,来关注新的赛季,战火重燃,各个战队都已经整装待发,让我们一起来看看本次…

拒绝了我们的连接请求

背景 在接入内容平台的时候, 内容平台使用iframe来嵌入ugc的帖子详情页, 让用户可以预览帖子详情。 但是帖子详情页不支持iframe的嵌入, 导致出现如下错误: ”star.aliexpress.com 拒绝了我们的连接请求。“ 具体如下: image.png…

www.youtube.com拒绝了我们的连接请求

项目场景: 页面嵌入youtube视频,如:官网、买量页、落地页、活动页...... 问题描述 嵌入youtube视频,页面显示www.youtube.com拒绝了我们的连接请求。如图: 原因分析: 提示:这里填写问题的分析…

chatgpt赋能python:知破SEO的窍门:用Python3在Windows7上实现有效的SEO技巧

知破SEO的窍门:用Python3在Windows7上实现有效的SEO技巧 对于任何一个拥有自己的网站或是数字营销公司来说,搜索引擎优化(SEO)是一个重要的研究方向。而在这个搜索引擎优化领域,Python3在Windows7操作系统上的应用尤其…

【饭谈】GPT下的测试圈新职业:魔法吟唱者

先赞后看,是好习惯哦~ 你可曾想过这样的一个场景: 你是负责写用例的测试工程师,面对着产品经理的长篇大论般的需求,你却淡定的打开电脑,点开excel表格。 然后对着一个话筒,开始说下面的话: 你…

录音哪些音乐编曲软件简单易用

无论制作什么类型的音乐,编曲软件的录制功能都是非常重要的。那么对于许多新人,录音时到底哪些音乐编曲软件简单易用呢? 下面,小编将分别演示Studio one5和Cubase是怎样录音的,又有哪些技巧,简单对比这两款…

地推话术 地推活动策划方案 活动策划方案案例 分享经济活动策划方案

推荐下载,获取路径: 点击这里直接下载 阳光正浓,完全不似清早阴冷、沉闷的预示。我在想,要怎样描述现下坐在此处的感觉;或而有幸,十几百年后,某一静坐读书之人,也在这样一个午后,忽…

淘宝广告投放效果分析

一、分析目的: 在大数据时代的背景下,广告主可从购买媒介变成直接购买用户。广告的精准投放对广告主、服务平台与潜在用户而言,在提升效率与商业效益方面,有了更迫切的需求。然而网络广告形式多样,很多广告投放系统率…

前端Q线上年会活动邀请函(文中送现金红包等大量福利)

简单自我介绍 前端Q的号主是winty,多年前端经验,软件工程专业,是个懂前端、会理财的美女小姐姐。 工作方面,现就职腾讯微信,曾就职京东、虾皮等大厂。接触过的东西很广泛,主导过服务端框架设计,…

Github每日精选(第100期): 从超过 50 亿的自然语言中获得洞察力ossinsight

介绍 OSS Insight 是一个强大的工具,通过分析超过 5 亿行的 GitHub 事件数据,提供对开源世界的全面、有价值和趋势洞察。 OSS Insight 的Data Explorer提供了一种探索 GitHub 数据的新方法。只需用自然语言提出您的问题,Data Explorer 就会…

垃圾分类模型想上maixpy

maixpy笔记 Something 上下拉。应该就是强制高、低电平,可以避免不确定的状态。模型区没有文件系统,模型之间烧录在指定地址。文件系统可以有效帮助我们管理存储介质,例如磨损均衡。理论上只要单层使用内存不超过 2MB, 整体模型…

大二寒假生活与学习草记

文章目录 学习日志——第一周前言这周干了点啥?周一周二周三周四周五周六周日 本周小结附录练字跑步 学习日志——第二周这周干了点啥?周一周二周三周四周五周六周日 本周小结 学习日志——第三周这周干了点啥?周一周二周三 学习日志——第一…

FPGA基础知识一

目录 1.时序约束 冒险和竞争 建立时间/保持时间 2. 异步复位,同步释放 3. AXI总线 4. 低功耗问题(优化资源利用率) 5. 状态机和流水线 1.时序约束 主要参考此文章:时序约束 引脚约束 在课题中,出现mmc5983的…

【AMBA】ARM总线-APB/AHB/AXI介绍

​1.总线简介 什么是总线?首先,在学习AMBA总线之前,我们先对总线下一个定义。根据维基百科的定义:总线(Bus)是指计算机组件间规范化的交换数据(data)的方式,即以一种通用…

【自然语言处理】【大模型】GLM-130B:一个开源双语预训练语言模型

GLM-130B:一个开源双语预训练语言模型 《GLM-130B: An open bilingual pre-trained model》 论文:https://arxiv.org/pdf/2210.02414.pdf 相关博客 【自然语言处理】【大模型】ChatGLM-6B模型结构代码解析(单机版) 【自然语言处理】【大模型】LaMDA&…

ChatGLM-6B一键安装,马上使用(windows)!!

产品特点 双语: 同时支持中文和英文。 高精度(英文): 在公开的英文自然语言榜单 LAMBADA、MMLU 和 Big-bench-lite 上优于 GPT-3 175B(API: davinci,基座模型)、OPT-175B 和 BLOOM-176B。 高…

chatgpt赋能Python-python_cnocr

Python CNOCR:基于Python的OCR库 随着数字化时代的到来,越来越多的文件需要被数字化转换。这些文件包括扫描版的文档、书籍、发票等。这时OCR(Optical Character Recognition)技术就被广泛应用。OCR可以通过识别出图片中的字符&a…

Android TensorFlowLite sdk接入详细记录

前言 最近在研究ML的相关内容,开始在Android应用中接入TensorFlowLite。花了不少时间,添了不少坑,如果是裸的空项目接入还好,如果是现有的线上产品的接入,还是会有不少问题需要处理的,而且过程中&#xff0…

阿里云ECS云服务器搭建Docker,nginx 环境服务

步骤一:安装Docker CE Docker有两个分支版本:Docker CE和Docker EE,即社区版和企业版,本教程基于CentOS 7安装Docker CE 1 首先安装Docker 的依赖库 yum install -y yum-utils device-mapper-persistent-data lvm22 添加Docker C…

typora+picgo+阿里云配置

typorapicgo阿里云配置 typorapicgo阿里云配置1.typora2.picgo阿里云(1)端口配置(与typora的一样)(2)阿里云配置1.配置后阿里云:2.密钥管理:3.查看密钥:4.picgo配置阿里云5.typora测试picgo连接 1.typora 用的破解版 2.picgo阿里云 不知道为什么,刚开始用的picgo是2.2.2一直…