LOL相信很多同学都不陌生,没玩过至少也听过,本猿的LOL水平可谓一顿操作猛如虎,一看战绩1-5。
本着学以致用的求知态度,我们来看看英雄们的属性秘密。
1.工欲善其事必先利其器,先导入数据分析所需要的库
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sb
Python资源共享群:484031800
2.加载英雄数据
该数据集版本为8.14.1,数据集链接:https://www.kaggle.com/jadson666/lol-champions-dataset-patch-8141
champions_data = pd.read_csv('champions_dataset.csv')champions_data.head() #预览数据前5条
3.查看数据描述
champions_data.describe() #展示数据平均值,标准差,最小值,最大值
可以看出来,有141位英雄的数据,护甲(armor)平均值为30.14,最小值为17,最大值为47,等等一系列数据。
4.定义绘图函数
def countplot(data, is_x, title): if is_x: sb.countplot(data= data, x= title) else: sb.countplot(data= data, y= title) title_counts = champions_data[title].value_counts() for i in title_counts.index: count = title_counts[i] pct_string = '{}'.format(count) plt.text(i - 1.1, count + 1, pct_string, va= 'center')
5.查看AD能力分布
countplot(data= champions_data, is_x= True, title='attack')
由此图可以看出来,AD能力为8的英雄最多,有27位。AD能力为2的英雄数次之,有22位。
那么,AD最强和最弱英雄都有谁呢?
strong_attack = champions_data.loc[champions_data['attack'] == 10]['name'].valuesprint("物理攻击能力最强的英雄:")print(strong_attack)weak_attack = champions_data.loc[champions_data['attack'] == 1]['name'].valuesprint("物理攻击能力最弱鸡的英雄:")print(weak_attack)
对应的国服name为:
AD最强:[凯隐,霞,易大师,烬,无双剑姬,VN,蛮王]
AD弱鸡:[佐伊,卡尔玛,泽拉斯,塔利亚,莫甘娜,艾尼维娅,乐芙兰,加里奥]
咦,蛮易信的信竟然不是AD能力为10,不科学。
6.查看AP能力分布
countplot(data= champions_data, is_x= True, title='magic')strong_magic = champions_data.loc[champions_data['magic'] == 10]['name'].valuesprint("AP能力最强的英雄:")print(strong_magic)weak_magic = champions_data.loc[champions_data['magic'] == 1]['name'].valuesprint("AP能力弱鸡的英雄:")print(weak_magic)
对应的国服name为:
AP最强9位:[维克托,维嘉,卡尔萨斯,瑞兹,泽拉斯,维克兹,艾尼维亚,乐芙兰,安妮]
AP弱鸡11位:[凯隐,德莱厄斯,瑞雯,霞,劫,希维尔,德莱文,VN,泰隆,派克,盖伦]
7.查看操作难度分布
countplot(data= champions_data, is_x= True, title='difficulty')most_difficulty = champions_data.loc[champions_data['difficulty'] == 10]['name'].valuesprint("操作最难的英雄:")print(most_difficulty)least_difficulty = champions_data.loc[champions_data['difficulty'] == 1]['name'].valuesprint("操作最简单的英雄:")print(least_difficulty)
操作难度是5的英雄数最多,4的次之,呈现出正态分布。
对应的国服name为:
操作最难5位:[伊芙琳,兰博,艾尼维亚,亚索,卡西奥佩娅]
连滚键盘2位:[厄运小姐,莫甘娜]
莫甘娜的操作难度也不低啊,10Q中3都不错了。
8.查看英雄类型分布
#数据处理classes = []for item in champions_data['classes'].values: item = item.replace('[\'', '') item = item.replace('\']', '') item = item.replace('\', \'', ' ') items = item.split() classes.append(items[0])champions_data['classes'] = classes#根据classes标签绘图sb.countplot(data= champions_data, x= 'classes')
由于条形图不能看出各类型英雄占比,我们画个饼图:
classes = champions_data['classes'].value_counts()plt.pie(classes, labels= classes.index, autopct = '%3.1f%%', startangle= 90, counterclock= False)plt.axis('square')
战士:28.4%,法师:22.0%
射手:15.6%,坦克:12.8%
刺客:10.6%,辅助:10.6%
9.英雄称号词云
#导入词云库from wordcloud import WordCloud, ImageColorGeneratorfrom scipy.misc import imread #处理英雄签名title_array = champions_data['title'].valuestitle_string = ' '.join(title_array) # 用于生成配色方案的图back_color = imread('lol_icon.jpeg') # 词云my_wordcloud = WordCloud(background_color='white', # 背景颜色 max_words=2000, # 最大词数 mask=back_color, # 以该参数值作图绘制词云,这个参数不为空时,width和height会被忽略 max_font_size=100, # 显示字体的最大值 random_state=42, # 为每个词返回一个PIL颜色 # width=1000, # 图片的宽 # height=860 #图片的长 ) # 用wl_space_split生成词云my_wordcloud.generate(title_string) # 基于彩色图像 生成响应的色彩image_colors = ImageColorGenerator(back_color)# 显示图片plt.imshow(my_wordcloud)# 关闭坐标轴# plt.axis('off')# 绘制词云plt.figure()plt.imshow(my_wordcloud.recolor(color_func=image_colors))plt.axis('off')# 保存图片my_wordcloud.to_file('ciyun.png')
还有许多数据有兴趣的同学可以去挖掘挖掘。比如,初始护甲最低的英雄,初始移速最高的英雄,初始攻击力最高的英雄等等。