電競天才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

數據:真達  

後期:澤龍

 

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