一、项目背景
EDG夺得2021英雄联盟全球总决赛冠军,这场比赛让所有观赛者热血沸腾,也唤起了我这个沉睡多年老玩家对MOBA游戏的兴趣,兴冲冲地下载了英雄联盟,却发现这并不是一个可以轻松上手的游戏。
对于时下最流行的MOBA类游戏——英雄联盟,作为一个新手可以从哪些方面切入,通过数据分析了解游戏机制并快速上手,降低新人过渡期的难度,是该项目的中心主题。
二、数据预处理
1.数据来源
数据源:League of Legends Ranked Matches
2.理解数据
数据集包含英雄联盟的18万场对局数据,数据表包括:
champs.csv :包含英雄名称和英雄id
matches.csv : 包含比赛信息
participants : 每场比赛的玩家信息
stats1.csv & stats2.csv : 对战数据
teambans : 队伍ban选数据
teamstats : 队伍总数据
3.数据清洗
1.导入数据
导入所有数据表
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
champs=pd.read_csv("champs.csv")
matches=pd.read_csv("matches.csv")
participants=pd.read_csv("participants.csv")
stats1=pd.read_csv("stats1.csv")
stats2=pd.read_csv("stats2.csv")
teambans=pd.read_csv("teambans.csv")
teamstats=pd.read_csv("teamstats.csv")
展示champs表:
champs.head()
展示matches表:
matches.head()
展示participants表:
participants.head()
展示stats1& stats2表,由于列数过多,仅能展示部分:
stats1_shape = stats1.shape
print(stats1_shape)
#(999999, 56)
展示teambans表:
teambans.head()
展示teamstats表:
teamstats.head()
2.查找缺失值
计算各表缺失值总和,若缺失值过多再逐列处理
champs_null = sum(champs.isnull().sum())
print(champs_null)
#0
各表缺失值均为0,说明数据集完整
3.合并数据表
stats = stats1.append(stats2)
df = pd.merge(participants, stats, how= 'left', on= ['id'])
df = pd.merge(df, champs, how= 'left', left_on= 'championid', right_on= 'id')
df = pd.merge(df, matches, how= 'left', left_on= 'matchid', right_on= 'id')
df.columns
#Index(['id_x', 'matchid', 'player', 'championid', 'ss1', 'ss2', 'role',
# 'position'