电竞天才Uzi宣布退役!用数据带你回顾他的职业生涯

【导语】:今天我们来聊聊英雄联盟传奇选手Uzi,Python技术部分请看第四部分Show me data,用数据说话

 

最近,在被B站的「后浪」和「入海」刷屏后,一个男人也官宣了退役。他就是英雄联盟知名选手Uzi,有许多人在感慨“神退役了,我的青春结束了”。一时间Uzi的退役引起网络热议,“电竞”一词再度冲上热搜榜首,作为电竞产业快速发展过程中的代表性人物,Uzi这次在6月3日官宣由于手伤和糖尿病的身体情况影响不得以退役,不禁令人唏嘘。

 

 

今天,我们就带你用数据盘点一下英雄联盟传奇选手Uzi的职业生涯。

 

01、从网瘾少年到年薪千万的电竞天才

 

说起Uzi,如果有玩游戏的小伙伴,对这个名字肯定不会陌生。Uzi,真名简自豪,人称小狗,站在电子竞技顶峰的男人,不不,更准确的说应该是站在电子竞技商业价值顶峰的男人,唯一一个和NIKE签约的电子竞技选手。

 

Uzi在英雄联盟的整个职业生涯中取得非常辉煌耀眼的成绩,在英雄联盟乃至整个电子竞技圈声名赫赫。在英雄联盟领域,Uzi获得过很多冠军,也收获了众多的粉丝。在2018年的雅加达亚运会上,他率领国家队击败了强大的韩国队,从而帮助中国获得了历史首枚电竞亚运会金牌。

 

 

提到小狗,我们就不得不提到皇族,小狗的在新老皇族待了7年,中途离开还是因为皇族降级到低级别联赛,所以不要说小狗是三姓家奴,感觉还是很忠诚的。小狗职业生涯也有不少迷之操作,著名的就是世界赛“灯笼我不捡,八强我自豪”,还有著名的洗澡事件,永获洗澡狗成就。

 

下面我们就结合他的职业生涯数据,总结一下Uzi作为选手的表现。

 

02、2013-2019 Uzi 七年职业生涯数据

 

我们整理了Uzi从13年到19年的数据,具体的代码解说请看第四部分。

 

Uzi各年度赛事表现

首先看到Uzi的各年度赛事表现,这里可以看到柱状图表示的是胜负,红为胜、蓝为负,曲线为胜率。

 

18年应该是巅峰,但是懂的人都知道,18年的皇族应该是最有希望的一年,国内横扫,队内关系好,亚运会中国夺冠当中就有4个RNG成员。但是再多的荣耀也抵不过S赛输给G2,赛前感觉能把对手锤进土里,赛后被所有人锤进土里,这可能是Uzi退役的转折点。那届世界赛RNG败给了自己,IG败给了女团,要不是王校长出面,IG可能是历史最惨的冠军。

 

Uzi击杀/死亡/KDA曲线图

 

我们再看Uzi各年击杀/死亡/KDA曲线图,17年KDA最高,18年击杀最多。只能说18年的RNG内战真的强,但是15年的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 数据读入

 

首先读入分析所用的数据集,包含2013~2019年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 数据清洗

 

此处我们对数据进行初步处理,主要包含:

  1. 胜负:提取胜场和负场
  2. 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 数据可视化

 

首先导入可视化库,确定分析的目的:

 

  1. UZI各年度参赛场次及胜负场走势图
  2. UZI各年度赛事整体表现
  3. UZI最喜欢使用的英雄Top10
  4. UZI使用英雄Top10表现
  5. UZI使用Top10英雄补兵/经济表现

 

from pyecharts.charts import Bar, Line, Pie, Page
from 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

数据:真达  

后期:泽龙

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章