一、理解數據
1、采集數據
本數據集來源於https://tianchi.aliyun.com/dataset/dataDetail?dataId=90273。
本數據集描述了LOL游戲相關信息,共包含51000條數據,共61個字段。下面是該數據集中包含的字段以及對各字段的解釋:
gameId(游戲編號)
creationTime(創建時間)
gameDuration(游戲持續時間)
seasonId(賽季編號)
winner(獲勝者)(1 =團隊1,2 =團隊2)
First blood, tower, inhibitor, Baron, dragon and Rift Herald:一血,一塔,水晶,第一條納什男爵,大龍,峽谷先鋒 (1 = 團隊1, 2 = 團隊2, 0 = 無)
Champions and summoner spells for each team (Stored as Riot's champion and summoner spell IDs):每只隊伍選擇的英雄和召喚術(用英雄和召喚師技能編號表示)
The number of tower, inhibitor, Baron, dragon and Rift Herald kills each team has:塔,水晶,男爵,大龍和峽谷先鋒擊殺數
The 5 bans of each team (Again, champion IDs are used):每個隊伍的禁用英雄(英雄編號表示)
2、導入數據
import pandas as pd df=pd.read_csv("games.csv")
3、查看數據集信息
print(df)
df.shape //查看數據集大小
二、數據清洗
1、查找缺失值
數據集中的信息太多,所以先計算所有缺失值總和,如果缺失值過多再進一步決定如何處理每一列的缺失值
none_number = sum(df.isnull().sum()) //查看缺失值總和 print(none_number)
幸運的是從結果來看數據集很完整,沒有任何缺失值。
2、查看數據類型
我們繼續往下處理,現在來看一看數據集中的數據類型都有哪些。
print(df.dtypes.value_counts())
表明該數據集中數據都為int型
3、轉換類型
為了使結果更清晰,將gameDuration更改為以分鍾為單位
df['gameDuration'] =df['gameDuration'].map(lambda x: x/60) print(df)
轉化后的結果:
可以看見游戲持續時間 (gameDuration)已經轉化為分鍾為單位了。
三、數據分析及可視化
1、查看雙方勝率
在winner列中,統計1和2出現的次數,化成餅狀圖,即為1隊和2隊的勝率。
代碼如下:
trace0=go.Pie(labels=df['winner'].value_counts().index,values=df['winner'].value_counts().values, hole=0.5,opacity=0.9,marker=dict(line=dict(color='white',width=1.3))) layout=go.Layout() data=[trace0] fig=go.Figure(data,layout) py.offline.plot(fig,filename='C:/Users/Sun Tianwen/Desktop/整體獲勝情況分布.html')
生成的餅狀圖如下:
從結果來看,1隊獲勝26077次,二隊獲勝25413次,兩隊的勝率相近,符合游戲的公平性。
2、游戲時長分布
使用探索性分析工具dtale進行探究
代碼如下:
import dtale dtale.show(df, ignore_duplicate=True)
點擊gameDuration后可以看見游戲時長的相關數據,如圖所示
圖中可以看出最短游戲時長為三分鍾(有人掛機時,游戲三分鍾允許投票重開),最長的游戲時長為78分鍾,平均游戲時長30分鍾。
直方圖:
細分
可以看出來游戲的時長主要分布在20到40分鍾。
英雄聯盟在15和20分鍾時開放投降選擇(15分鍾投降需要全票通過,20分鍾投降需要四票通過),因此圖中可以看出時長為15分鍾和20分鍾的場數顯著多於旁邊的時長對應場數,可以看出有很多玩家選擇15分鍾投降或者20分鍾投降。
3、一血對獲勝的影響
plot_bar_horizontal(input_col='firstBlood', target_col='winner', title_name='一血對獲勝的影響')
獲得一血的隊伍勝率相對較高,在第一隊的游戲中,首先獲得一血時的勝率為59.48%,相較未獲得一血的比賽高18%。在第二隊的游戲中,獲得一血時的勝率為58.72%,相較未獲得一血的游戲高18%。
4、摧毀第一個水晶對獲勝的影響
plot_bar_horizontal(input_col='firstInhibitor', target_col='winner', title_name='摧毀第一個水晶對獲勝的影響')
在游戲中拿到第一座水晶塔的隊伍91%的情況下可以獲勝,這一點在某種程度上是可以預見的,因為首先摧毀水晶塔代表隊伍已經積累的足夠的優勢,而且水晶塔力量很強大,並且更具有價值。
5、擊殺第一條男爵對獲勝的影響
plot_bar_horizontal(input_col='firstBaron', target_col='winner', title_name='擊殺第一條男爵對獲勝影響')
統計數據顯示,在游戲中擊殺第一條男爵有80%的勝率。
6、擊殺第一條大龍對游戲的影響
plot_bar_horizontal(input_col='firstDragon', target_col='winner', title_name='擊殺第一條大龍對獲勝的影響')
在第一個隊伍中,首先擊殺第一條大龍的隊伍勝率在68.6%,相較未取得優先的比賽勝率高36%。
7、皮爾遜相關性
四、主要結論
1、游戲雙方的勝率基本相同,比較公平。
2、游戲的時間主要集中在25到35分鍾,玩家不會因為時間太短而覺得無聊,也不會因為時間過長而疲勞。
3、獲得一血的隊伍勝率提高了18%,因此游戲前期想要獲勝,不僅要爭取獲得一血,還要避免被擊殺導致送出一血。
4、摧毀第一座水晶的隊伍勝率高達91%,同時擊殺第一條男爵和大龍的勝率分別為80%和68%。
5、通過以上分析,影響隊伍勝負的因素有很多,其中摧毀第一座水晶和擊殺第一條男爵能顯著提升勝率。
------------恢復內容結束------------