【导语】:今天我们来聊聊英雄联盟传奇选手Uzi,Python技术部分请看第四部分。Show me data,用数据说话
最近,在被B站的「后浪」和「入海」刷屏后,一个男人也官宣了退役。他就是英雄联盟知选手Uzi,有许多人在感慨“神退役了,我的青春结束了”。一时间Uzi的退役引起网络热议,“电竞”一词再度冲上热搜榜首,作为电竞产业快速发展过程中的代表性人物,Uzi这次在6月3日官宣由于手伤和糖尿病的身体情况影响不得以退役,不禁令人唏嘘。
今天,我们就带你用数据盘点一下英雄联盟传奇选手Uzi的职业生涯。
01、从网瘾少年到年薪千万的电竞天才
说起Uzi,如果有玩游戏的小伙伴,对这个名字肯定不会陌生。Uzi,真名简自豪,人称小狗,站在电子竞技顶峰的男人,不不,更准确的说应该是站在电子竞技商业价值顶峰的男人,唯一一个和NIKE签约的电子竞技选手。
Uzi在英雄联盟的整个职业生涯中取得非常辉煌耀眼的成绩,在英雄联盟乃至整个电子竞技圈声名赫赫。在英雄联盟领域,Uzi获得过很多冠军,也收获了众多的粉丝。在的雅加达亚运会上,他率领国家队击败了强大的韩国队,从而帮助中国获得了历史首枚电竞亚运会金牌。
提到小狗,我们就不得不提到皇族,小狗的在新老皇族待了7年,中途离开还是因为皇族降级到低级别联赛,所以不要说小狗是三姓家奴,感觉还是很忠诚的。小狗职业生涯也有不少迷之操作,著名的就是世界赛“灯笼我不捡,八强我自豪”,还有著名的洗澡事件,永获洗澡狗成就。
下面我们就结合他的职业生涯数据,总结一下Uzi作为选手的表现。
02、- Uzi 七年职业生涯数据
我们整理了Uzi从到的数据,具体的代码解说请看第四部分。
Uzi各年度赛事表现
首先看到Uzi的各年度赛事表现,这里可以看到柱状图表示的是胜负,红为胜、蓝为负,曲线为胜率。
应该是巅峰,但是懂的人都知道,的皇族应该是最有希望的一年,国内横扫,队内关系好,亚运会中国夺冠当中就有4个RNG成员。但是再多的荣耀也抵不过S赛输给G2,赛前感觉能把对手锤进土里,赛后被所有人锤进土里,这可能是Uzi退役的转折点。那届世界赛RNG败给了自己,IG败给了女团,要不是王校长出面,IG可能是历史最惨的冠军。
Uzi击杀/死亡/KDA曲线图
我们再看Uzi各年击杀/死亡/KDA曲线图,KDA最高,击杀最多。只能说的RNG内战真的强,但是的3.8是什么鬼,在QG到底经历了什么,有知道答案就可以给我们留言哦。
Uzi最喜欢使用的英雄Top10
看到这张图,Uzi比赛最爱用的英雄,EZ男枪领先不意外,毕竟是一代版本一代神。但是VN也能排名靠前,只能说果然是本命英雄,操作真的好。
Uzi使用英雄Top10表现
我们把X锁定,就是英雄锁定,切换到KDA和最高击杀的曲线图,卡莎还是最稳定的,所以在最近的LPL里,卡莎都是非ban必选的英雄,寒冰的KDA和人头差距有点大,证明寒冰果然是真工具人。
Uzi使用Top10英雄补兵/经济表现
最后看到补兵和经济,卡莎再次荣登榜首,还是英雄太适合比赛了,说到补兵,你们应该也忘不了Uzi名场面,为了补兵1打5。
03、微博数据和B站数据
Uzi官宣退役微博数据
我们爬取了小狗的退役微博,做了用户画像:
Uzi微博粉丝性别占比
可以看到男性粉丝占到绝大多数,高达76.61%。女性粉丝为23.39%。
Uzi微博粉丝年龄分布
发现小狗真的是90后的青春,90后粉丝占比最高,达到66.7%。只能长叹到,我们的青春真的结束了!其次是00后,占比20.08%。
Uzi微博评论词云图
词云图也可以看到都是鼓励小狗继续前进的话,但是吧,作为一个签约nike 的选手,退役后应该不会比某某开差的。
Uzi入驻B站 词云数据
我们还做了小狗在B站发的第一条视频评论的词云图:这个视频于6月5日发布到B站,目前这个视频累计播放量达到853.6万,弹幕为4.4万。最高全站日排名第一。
Uzi B站第一条视频评论数据
C君认为亮点还是在于这个二级,在之前采访厂长说:“和Uzi打,二级抓下就完事了。”可能这句话会一直持续到小狗结束直播生涯。
05、用Python爬取Uzi,七年职业生涯数据
我们使用Python获取并分析了score网站、微博和B站相关的数据,进行了分析。此处展示赛事数据分析的代码。
01 数据读入
首先读入分析所用的数据集,包含~UZI赛事整体表现和使用英雄数据,数据预览如下:
# 导入包
import numpy as np
import pandas as pd
# 读入英雄数据
df_hero = pd.DataFrame()
for i in range(7):
df = pd.read_excel(../data/UZI赛事数据.xlsx, sheet_name=i)
df_hero = df_hero.append(df, ignore_index=True)
df_hero.head()
# 读入比赛数据
df_com = pd.read_excel(../data/UZI赛事数据.xlsx, sheet_name=7)
df_com
02 数据清洗
我们对数据进行初步处理,主要包含:
胜负:提取胜场和负场KDA:提取数值# 胜负
df_hero[胜场] = df_hero[胜负].str.extract(W-(\d+)L).astype(int)
df_hero[负场] = df_hero[胜负].str.extract(W-.*?L-(\d+)).astype(int)
# KDA提取数值
df_hero[KDA_2] = df_hero[KDA].str.extract((\d+.*\d+)).astype(float)
df_hero.head()
03 数据可视化
首先导入可视化库,确定分析的目的:
UZI各年度参赛场次及胜负场走势图UZI各年度赛事整体表现UZI最喜欢使用的英雄Top10UZI使用英雄Top10表现UZI使用Top10英雄补兵/经济表现
from pyecharts.charts import Bar, Line, Pie, Pagefrom pyecharts import options as opts
UZI使用英雄数据分析
UZI各年度参赛场次及胜负场走势图
df_com.head()
df_com = df_com.sort_values(年份)
df_com[KDA] = df_com.KDA.str.extract(r(\d+.*\d+))
# 提取数据
x1_line1 = df_com[年份].values.astype(str).tolist()
y1_line1 = df_com[胜场].values.tolist()
y1_line2 = df_com[负场].values.tolist()
y1_line3 = [i*100 for i in df_com[胜率]]
# 条形图
bar1 = Bar()
bar1.add_xaxis(x1_line1)
bar1.add_yaxis(胜场, y1_line1)
bar1.add_yaxis(负场, y1_line2)
bar1.extend_axis(yaxis=opts.AxisOpts(name=胜率, axislabel_opts=opts.LabelOpts(formatter="{value}%"))
)
bar1.set_global_opts(
title_opts=opts.TitleOpts(UZI各年度赛事表现),
yaxis_opts=opts.AxisOpts(name=场次, axislabel_opts=opts.LabelOpts(formatter="{value}次"))
)
# 折线图
line1 = Line(init_opts=opts.InitOpts(width=1350px, height=750px))
line1.add_xaxis(x1_line1)
line1.add_yaxis(胜率, y1_line3, yaxis_index=1)
# 层叠图
bar1.overlap(line1)
bar1.render()
df_com.KDA.str.extract((\\d+))
# 条形图
bar1 = Bar()
bar1.add_xaxis(x1_line1)
bar1.add_yaxis(胜场, y1_line1)
bar1.add_yaxis(负场, y1_line2)
bar1.extend_axis(yaxis=opts.AxisOpts(name=胜率, axislabel_opts=opts.LabelOpts(formatter="{value}%"))
)
bar1.set_global_opts(
title_opts=opts.TitleOpts(UZI各年度赛事表现),
yaxis_opts=opts.AxisOpts(name=场次, axislabel_opts=opts.LabelOpts(formatter="{value}次"))
)
# 折线图
line1 = Line(init_opts=opts.InitOpts(width=1350px, height=750px))
line1.add_xaxis(x1_line1)
line1.add_yaxis(胜率, y1_line3, yaxis_index=1)
# 层叠图
bar1.overlap(line1)
bar1.render()
UZI各年度赛事整体表现
df_com[击杀总数] = df_com[击杀总数(场均)].str.extract(r(\d+)).astype(int)
df_com[死亡总数] = df_com[死亡总数(场均)].str.extract(r(\d+)).astype(int)
# 提取数据
x1_line1 = df_com.年份.astype(str).values.tolist()
y1_line1 = df_com.击杀总数.values.tolist()
y1_line2 = df_com.死亡总数.values.tolist()
y1_line3 = df_com.KDA.values.tolist()
# 折线图
line2 = Line(init_opts=opts.InitOpts(width=1350px, height=750px))
line2.add_xaxis(x1_line1)
line2.add_yaxis(击杀, y1_line1)
line2.add_yaxis(死亡, y1_line2)
line2.extend_axis(yaxis=opts.AxisOpts(name=KDA, axislabel_opts=opts.LabelOpts(formatter="{value}"))
)
line2.set_global_opts(
title_opts=opts.TitleOpts(UZI各年度赛事表现),
yaxis_opts=opts.AxisOpts(name=次数)
)
line2.set_series_opts(linestyle_opts=opts.LineStyleOpts(width=3))
# 折线图
line3 = Line(init_opts=opts.InitOpts(width=1350px, height=750px))
line3.add_xaxis(x1_line1)
line3.add_yaxis(KDA, y1_line3, yaxis_index=1)
# 层叠
line2.overlap(line3)
line2.render()
x1_line1 = df_com.年份.astype(str).values.tolist()
y1_line1 = df_com.击杀总数.values.tolist()
y1_line2 = df_com.死亡总数.values.tolist()
y1_line3 = df_com.KDA.values.tolist()
# 折线图
line2 = Line(init_opts=opts.InitOpts(width=1350px, height=750px))
line2.add_xaxis(x1_line1)
line2.add_yaxis(击杀, y1_line1)
line2.add_yaxis(死亡, y1_line2)
line2.extend_axis(yaxis=opts.AxisOpts(name=KDA, axislabel_opts=opts.LabelOpts(formatter="{value}"))
)
line2.set_global_opts(
title_opts=opts.TitleOpts(UZI各年度赛事表现),
yaxis_opts=opts.AxisOpts(name=次数)
)
line2.set_series_opts(linestyle_opts=opts.LineStyleOpts(width=3))
# 折线图
line3 = Line(init_opts=opts.InitOpts(width=1350px, height=750px))
line3.add_xaxis(x1_line1)
line3.add_yaxis(KDA, y1_line3, yaxis_index=1)
# 层叠
line2.overlap(line3)
line2.render()
UZI最喜欢使用的英雄Top10
x1_line1 = df_com.年份.values.astype(str).tolist()
y1_line1 = df_com.胜场.values.tolist()
y1_line2 = df_com.负场.values.tolist()
y1_line3 = [i*100 for i in df_com.胜率]
# 条形图
bar1 = Bar(init_opts=opts.InitOpts(width=1350px, height=750px))
bar1.add_xaxis(x1_line1)
bar1.add_yaxis(胜场, y1_line1)
bar1.add_yaxis(负场, y1_line2)
bar1.extend_axis(yaxis=opts.AxisOpts(name=胜率, axislabel_opts=opts.LabelOpts(formatter="{value}%"))
)
bar1.set_global_opts(
title_opts=opts.TitleOpts(UZI各年度赛事表现),
yaxis_opts=opts.AxisOpts(name=场次, axislabel_opts=opts.LabelOpts(formatter="{value}次"))
)
# 折线图
line1 = Line(init_opts=opts.InitOpts(width=1350px, height=750px))
line1.add_xaxis(x1_line1)
line1.add_yaxis(胜率, y1_line3, yaxis_index=1)
# 层叠
bar1.overlap(line1)
bar1.render()
hero_num = df_hero.groupby(英雄)[场次].sum().sort_values(ascending=False)
# 柱形图
bar2 = Bar(init_opts=opts.InitOpts(width=1350px, height=750px))
bar2.add_xaxis(hero_num[:10].index.tolist())
bar2.add_yaxis(\, hero_num[:10].values.tolist())
bar2.set_global_opts(title_opts=opts.TitleOpts(title=UZI最喜欢使用的英雄Top10),
visualmap_opts=opts.VisualMapOpts(max_=80))
bar2.render()
结语
最后C君想说的是,Uzi的游戏天赋有目共睹,如同那个反向Q的男人,转战吃鸡居然也拿到世界赛的冠军,但是这些都不是我们普通人练一练就可以达到的。最近大热综艺《老师请回答》中,一个小孩子想去当王者职业选手,被两个王者职业选手教育了就是最好的例子,所以我们还是踏踏实实的干一些自己擅长的事情,把爱好当成爱好,这难道不香么!
CDA数据分析师 出品
作者:泽龙、Mika
数据:真达
后期:泽龙