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

时间:2022-07-26
本文章向大家介绍S1到S9,545名职业选手,有多少人折戟全球总决赛?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

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

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

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

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

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

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

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

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

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(2011, 2020):
    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')

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

看到了不少熟悉的昵称。

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

第一年出的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')

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

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

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

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

可以看出「大师兄」和女装大佬「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')

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

「 滑动查看下一张图片 」

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

最后来看一下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')

得到这么几个结果。

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

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