S1到S9,545名职业选手,有多少人折戟全球总决赛?

640?wx_fmt=gif


上周末英雄联盟S9总决赛落下帷幕,FPX打败了G2获得了冠军。


于是乎小F又来水文啦,好久不见~


这次来看一下那些参加过英雄联盟全球总决赛的选手们。


来看看会不会发现什么有意思的东西。


数据来源于「Liquipedia」,一个国外的网站。


640?wx_fmt=png


https://liquipedia.net/leagueoflegends/Main_Page(复制到浏览器打开)


S1到S9,数据真的是应有尽有。


本次主要是获取历年参加英雄联盟全球总决赛选手们的信息。


640?wx_fmt=png

以及S4到S9历年Top20榜单选手们的信息。


640?wx_fmt=png


S9和前几年有些不同,有两份Top20榜单,个人感觉第一个更符合今年的形式。


毕竟小凤凰夺冠了,排面还是要有的。


可怜的贡子哥,两个都没得...


01 数据获取


昨天晚上着急了一下,不小心把爬取Top20榜单的代码给删除了。


所以就给大家看看历年参赛选手信息爬取的代码。


总而言之还是比较简单的~


 
  
import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent''Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
}

for k in range(20112020):
    print(str(k) + '年')
    # 获取信息
    url = 'https://liquipedia.net/leagueoflegends/World_Championship/' + str(k)
    response = requests.get(url=url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    table = soup.find_all(class_='sortable wikitable')
    tbody = table[0].find('tbody')

    for i in tbody.find_all('tr')[1:]:
        td = i.find_all('td')
        item = {}
        item['range'] = td[0].get_text()
        # 地区
        item['country'] = td[1].get_text().replace(' ''')
        # 数量
        item['number'] = td[2].get_text().replace(' ''').split('/')[0]
        # 名字
        item['names'] = td[3].get_text().replace(' ''').replace(','' ')
        # print(item)
        # 写入csv文件中
        with open('lol_message.csv''a+'as f:
            f.write(item['country'] + ',' + item['number'] + ',' + item['names'] + ',' + str(k) + '\n')


最后成功获取到两个文件。


640?wx_fmt=png


看到了不少熟悉的昵称。


比如那个一直在打野的Jankos,以及那个快乐的Pzi。


640?wx_fmt=png


第一年出的Top20榜单,有不少人已经退役,也有不少人还在坚持。


比如无状态,微笑,Gogoing,又比如Uzi,777777。


02 数据分析


首先来看一下谁是参加S赛次数最多的选手。


 
  
import pandas as pd

# 设置列名与数据对齐
pd.set_option('display.unicode.ambiguous_as_wide'True)
pd.set_option('display.unicode.east_asian_width'True)
# 显示10行
pd.set_option('display.max_rows'10)

# 读取csv文件
df = pd.read_csv('lol_message.csv', header=None, names=['country''number''names''year'])

# 对名字出现次数进行统计
list_names = []
for name in df['names']:
    res = name.split(' ')
    for i in res:
        list_names.append(i)
# 计数
dict = {}
for key in list_names:
    dict[key] = dict.get(key, 0) + 1
# 排序
rank = sorted(dict.items(), key=lambda dict: dict[1], reverse=True)

# 保存为csv文件
for item in rank:
    print(item[1], item[0])
    with open('lol_player.csv''a+'as f:
        f.write(item[0] + ',' + str(item[1]) + '\n')


最近发现了一款免费的数据可视化网站。


用起来还不错,缺点就是对数据格式要求过高。


640?wx_fmt=png


http://hanabi.data-viz.cn/index(复制到浏览器打开)


本次主要使用它的条形图以及动态条形图。


640?wx_fmt=png


可以看出「大师兄」和女装大佬「Sneaky」参加次数最多。


今年二老统统止步十六强,又得可惜一波。


LPL也有两位参加了6次,那就是厂长和小狗。


虽说各个大赛冠军拿的一个不差,但都独独缺了那么个S赛冠军。


接下来看一下历年各个地区参赛人数情况。


 
  
# 历年各地区参赛人数数据透视表
df1 = df.pivot_table(index=['country'], columns='year', values='number', fill_value=0).reset_index()
print(df1)
df1.to_csv('lol_year.csv')


使用网站上的动态条形图,对数据有要求,所以用了一波数据透视表。

「  滑动查看下一张图片  」

640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png


可以看到韩国一枝独秀,多年位居第一。


最后来看一下Top20榜单的情况。


 
  

import pandas as pd

# 设置列名与数据对齐
pd.set_option('display.unicode.ambiguous_as_wide'True)
pd.set_option('display.unicode.east_asian_width'True)
# 显示10行
pd.set_option('display.max_rows'10)

# 读取数据
df = pd.read_csv('lol_top.csv', header=None, names=['range''country''name''position''team''year'])
# 修改数据
df = df.replace('AD Cary''AD Carry')
df = df.replace('Bottom''AD Carry')
df = df.replace('Jungler''Jungle')
df = df.replace('Middle''Mid')
print(df)

# 统计选手出现在榜单的次数
df1 = df.groupby(['name'])[['country']].count().reset_index().sort_values(by='country', ascending=False)
print(df1)
df1.to_csv('lol_name.csv', encoding='utf-8-sig')

# 统计队伍出现在榜单的次数
df2 = df.groupby(['team'])[['name']].count().reset_index().sort_values(by='name', ascending=False)
print(df2)
df2.to_csv('lol_team.csv', encoding='utf-8-sig')

# 统计地区出现在榜单的次数
df3 = (df.groupby(['country'])[['name']].count().reset_index().sort_values(by='name', ascending=False))
print(df3)
df3.to_csv('lol_country.csv', encoding='utf-8-sig')

# 统计位置出现在榜单的次数
df4 = (df.groupby(['position'])[['country']].count().reset_index().sort_values(by='country', ascending=False))
print(df4)
df4.to_csv('lol_position.csv', encoding='utf-8-sig')


得到这么几个结果。


640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png


那些熟悉的昵称,总是能让你不禁回想起那么一批人(loler)。


曾经一起开黑的日子,一去不复返。


万水千山总是情,点个「在看」行不行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值