用 Python 分析了 10000 場吃雞數據,原來吃雞要這麼玩

用 Python 分析了 10000 場吃雞數據,原來吃雞要這麼玩

前言

絕地求生在國內火的一塌糊塗的時候,一款名叫 Fortnite 的遊戲在國外颳起了堡壘旋風,這款同樣為大逃殺玩法的沙盒類遊戲,在絕地求生逐漸走低的形勢下,堡壘之夜卻奪得多項提名,眾多明星主播轉戰堡壘!

上天入地,蓋樓修路,鋪陷阱設彈床;想和太陽肩並肩,一發火箭就上天。

鑑於“二百斤靈魂”小胖舍友經常痴迷於吃雞類遊戲,為了幫助他提高遊戲勝率,我爬取並分析了 1w 餘場吃雞數據。下面讓我們來看一下能吃雞得強相關條件是什麼?

獲取數據

首先,我們需要加載 Python 庫:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

然後載入Fortnite數據,檢查數據的質量和整潔度,然後整理和清理數據集,以便進行後續的清理工作。

#錄入Fornite的CSV數據
Fortnite_data = pd.read_csv('aguang.csv')

為了對數據集有一個大致的瞭解,不妨先輸出數據的前幾行。

Fortnite_data.head()

結果為:

serial_number knockout_number assist-number save_number precision hit_the_target exact_strike marching_course material collection material-using afford damage cause_damage building-damage grade Total-score Total-experience teams number match-time competitor-name
0 1 4 1 0 0.33 69 19 4000 1325 670 554 815 3709 3 448.0 762.0 1 2018/5/14 11:37 Alvin
1 2 2 1 0 0.31 28 0 2000 733 110 292 268 7733 9 282.0 536.0 2 2018/5/17 17:48 Alvin
2 3 3 0 1 0.21 33 12 3000 1806 350 245 543 7727 8 291.0 597.0 4 2018/5/18 18:05 Alvin
3 4 2 0 3 0.05 6 0 3000 700 420 746 163 19008 3 NaN NaN 4 2018/5/18 18:26 Alvin
4 5 1 4 1 0.12 32 7 3000 668 370 212 432 13108 4 358.0 734.0 4 2018/5/18 18:53 Alvin

觀察數據

本數據集包含了1w餘把遊戲數據,其中可能有“二百斤”的小胖網癮記錄(慘不忍睹:joy:)。該數據集中的缺失值被標記為NaN。數據列名的含義如下:

serial_number: 遊戲場次編號 
knockout_number: 本場淘汰人數
assist_number: 助攻數
save_number: 救起隊友人數
precision: 射擊精度
hit_the_target: 命中
exact_strike: 精準打擊
marching_course: 行進歷程(m)
material_collection: 材料已收集

material-using: 使用材料
afford_damage: 承受傷害
cause_damage: 玩家傷害
building-damage: 建築傷害
total_score: 總分
total_experience: 總經驗
teams_number: 參賽情況(1人為Solo,兩人為Double,4人為team,3人參賽自動填充為4人)
match_time: 遊戲時間
competitor_name: 該條記錄的所有人

數據處理

查看數據類型和數據有無缺失值:

#查看數據類型和數據有無缺失
Fortnite_data.info()

查看一下有無重複數據:

#查看一下有無重複數據
Fortnite_data[Fortnite_data.duplicated()]

結果為:

serial_number knockout_number assist-number save_number precision hit_the_target exact_strike marching_course material collection material-using afford damage cause_damage building-damage grade Total-score Total-experience teams number match-time competitor-name

查看數據的描述統計:

#查看數據的描述統計
Fortnite_data.describe()

結果為:

serial_number knockout_number assist-number save_number precision hit_the_target exact_strike marching_course material collection material-using afford damage cause_damage building-damage grade Total-score Total-experience teams number
coun 42.000000 42.000000 42.000000 42.000000 42.000000 42.000000 42.000000 42.000000 42.000000 42.000000 42.000000 42.000000 42.000000 42.000000 20.000000 20.000000 42.000000
mean 21.500000 2.642857 1.261905 0.380952 0.246429 38.452381 6.976190 2576.142857 1092.785714 312.619048 350.047619 567.309524 9336.119048 6.000000 362.700000 676.350000 3.238095
std 12.267844 2.818246 1.415240 0.660834 0.168520 32.539809 8.529684 781.055339 617.643932 213.781967 160.616336 434.419966 6366.174673 4.928761 151.638802 274.785519 1.122052
min 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 481.000000 200.000000 0.000000 52.000000 0.000000 1755.000000 1.000000 84.000000 168.000000 1.000000
25% 11.250000 1.000000 0.000000 0.000000 0.172500 10.250000 2.000000 2000.000000 694.750000 162.500000 273.000000 262.750000 5780.000000 3.000000 277.750000 507.750000 2.000000
50% 21.500000 2.000000 1.000000 0.000000 0.240000 32.500000 3.500000 3000.000000 905.500000 260.000000 326.000000 513.000000 7819.000000 4.000000 328.500000 602.500000 4.000000
75% 31.750000 3.000000 2.000000 1.000000 0.305000 56.000000 10.250000 3000.000000 1453.750000 367.500000 403.000000 692.500000 10799.500000 7.750000 403.000000 775.250000 4.000000
max 42.000000 15.000000 5.000000 3.000000 1.000000 126.000000 39.000000 4000.000000 2728.000000 1060.000000 877.000000 1970.000000 32963.000000 18.000000 728.000000 1238.000000 4.000000

經過分析數據,發現一場淘汰13人的數據,可能存在誤差,單獨輸出看一下:

Fortnite_data[Fortnite_data['knockout_number']==13]

結果為:

serial_number knockout_number assist-number save_number precision hit_the_target exact_strike marching_course material collection material-using afford damage cause_damage building-damage grade Total-score Total-experience teams number match-time competitor-name
12 13 15 1 0 0.24 103 18 3000 1488 660 52 1970 8612 1 728.0 1238.0 1 2018/5/19 21:47 Wal-Mart

經過分析,這條屬於正常數據,可能是“有趣的靈魂”小胖同學這場異常生猛,一人殺了13個,一路高歌在吃雞的道路上,且只有3000m的行進舉例說明基本上沒有跑毒的困擾,可以說天時地利了!

為了提高清潔度,將match-time列拆分成年月日列和小時列,下面是數據清理:

#複製一個備用df
Fortnite_clean = Fortnite_data.copy()

吃雞到底和哪個數據相關性最強?

在完成數據整理和清理之後,我接下來進行探索性數據分析。首先確定研究問題,然後可以輸出描述性統計值,查看有沒有值得研究的點(途中可以因為了解到更好的點而調整問題方向),創建可視化圖表,解決你在前面提出的研究問題。

探究問題:獲得第一名(吃雞)到底跟那個數據相關性最高?

Fortnite_clean.head()
#對整理好的數據輸出描述性統計
Fortnite_clean.describe()
#選出獲得第一名的數據
Fortnite_clean[Fortnite_clean['grade']==1]

結果為:

serial_number knockout_number assist_number save_number precision hit_the_target exact_strike marching_course material_collection material_using afford_damage cause_damage building_damage grade total_score total_experience teams_number data_sources match_day match_hour
12 0013 15 1 0 0.24 103 18 3000 1488 660 52 1970 8612 1 728 1238 Solo Wal-Mart 2018-05-19 21:47:00
18 0019 1 1 1 0.02 5 2 4000 1351 250 225 214 8096 1 608 1156 Team Alvin 2018-05-22 21:24:00
25 0026 5 3 1 0.26 62 2 4000 2728 330 83 1040 7096 1 0 0 Team Wal-Mart 2018-05-28 21:58:00
26 0027 2 3 0 0.18 6 0 2000 1955 100 451 541 23633 1 594 1188 Team Alvin 2018-05-28 21:58:00
27 0028 2 4 0 0.19 48 3 3000 1755 590 283 605 20733 1 0 0 Team Kaka 2018-05-28 21:58:00

奇怪的是,在吃雞的數據中,Wal-Mart的數據明顯偏優良,Alivn和Kaka的數據看起來似乎並不怎麼樣,在knockout_number,precision和`cause_damage這幾個我們慣常看的吃雞指標中顯示非常不突出,甚至還不如很多排名比較靠後的數據。之後篩選出傷害高於606的數據

#篩選出造成傷害高於606的數據
Fortnite_clean[Fortnite_clean['cause_damage']>=606]

我們可以看到高於吃雞的Alvin和Kaka記錄的那次只造成541和605傷害的數據多如牛毛,但是成績貌似並不怎麼樣,成績才在第六名徘徊!那是什麼原因造成Alvin和Kaka吃雞的呢,難道只是搭上了“二百斤”小胖沃爾瑪的快船,兩位都是划水之輩麼!

並不是這樣的,我們的眼光落在了afford_damage和building_damage上,兩位都有很高的承受傷害和建築傷害,(堡壘之夜是可以自己搭建築作為掩體的)那他們是不是去幫主火力手沃爾瑪去吸引火力和打掉地方簡直給沃爾瑪輸出空間的呢,讓我們繼續研究。

那麼,引來了一個分支問題:圍繞主輸出手,一個有著afford_damage和building_damage的隊友對吃雞有功效嗎?

解決代碼如下:

Fortnite_clean[Fortnite_clean['afford_damage']>=451].grade.mean()
output:3.125
Fortnite_clean[Fortnite_clean['building_damage']>=20000].grade.mean()
output:1.75

可推斷,knockout_number,precision和cause_damage這幾個數據對於吃雞固然重要,但是要是在4人小組中,

圍繞1到2個輸出位,配置1到2為抗住傷害的肉盾和負責拆板子的機槍手,對吃雞是大有益處的。

經過數據的可視化,熱度圖如下:

用 Python 分析了 10000 場吃雞數據,原來吃雞要這麼玩

分析熱度圖

在熱力圖中,與吃雞(grade)相關性比較高的前三項是:材料收集、淘汰人數和造成傷害。

之前比較看好的命中和精準打擊相關性不太高,難道良好的FPS手感在堡壘之夜中已經不太重要了麼,這就還需要更多的數據來研究。

期望研究的問題

  • 是否天命圈與能否吃雞是不是有相關性?(marching_course<2000)
  • 比賽中使用更多的板子與能否吃雞是不是有相關性?(material_using)

注:由於數據量太小,以後能收集到更多的數據,是希望可以對上面以及更多的方向進行研究。

結論

根據上面的熱力圖可以得出如下結果:

  • 與吃雞相關性比較高的前三項是:材料收集、淘汰人數和造成傷害,基本複合預期;
  • 材料使用的相關性高是因為被淘汰的玩家爆出的裝備和材料被撿起也視作材料收集;
  • 組隊如果想要取得好成績,圍繞1到2個輸出位,配置1到2為抗住傷害的肉盾和負責拆板子的機槍手,才是正道;
  • 正如前面所說,這個分析出來的結果更偏向於單人吃雞,組隊吃雞,隊員之間的工作分配也是非常重要的。

最後想說的話

用時間和生命兌換虛擬的快感和對現實的逃避,最終還是一無所獲。疏遠了自己的朋友,家人,越打越孤獨,越孤獨越打。

每一局都好像重新開始,每一局都不過是重複上演。一局又一局,看不到盡頭。炫耀的是戰績,流失的是生命。

每次該做正事了,仔細規劃一番後:好可怕,要好長時間哦。先打一盤遊戲壓壓驚...就這樣,一日復一日,一年復一年,時間在別人的圈套中浪費掉,我們和理想的距離也越來越遠。

遊戲初始畫面裡都寫著,適度遊戲益腦,切勿沉迷遊戲。我希望每一個打遊戲的朋友,都能夠做到:吃雞是一種態度,不是生活的全部!


分享到:


相關文章: