我分析了70萬局「吃雞」數據,找到了其中的3個秘密

我分析了70萬局「吃雞」數據,找到了其中的3個秘密

來自專欄 MathematicaLab

註:本文首發於公眾號「|折枝|」,關注complex-zyb,為**折枝

「吃雞太難了」

前幾天,同學找我吃雞。不出所料,很快就成盒了。這個遊戲對於我來說,就是一個「到底死在哪」的遊戲。

所以啊,吃雞是不可能吃雞的了,這輩子都吃不到雞,槍又打不準,連隊友都打不到,只有靠良好的心態,才能維持下去。

更重要的是,天天吃雞,荒廢學術,讓我不勝惶恐。我就開始想,能不能研究一下,如何科學吃雞?

所以,我就拿出了我的老本行,用Mathematica來研究一下,有什麼可以科學吃雞的方法。吃一次雞可能是運氣,吃兩次、三次,可能就是科學了。

幸運的是,Kaggle上已經有了PUBG的數據集,一共有72萬次的擊殺數據,解壓之後,大約有20多G的數據。

裡面的信息還是非常豐富的,包括擊殺/被殺玩家的位置、原因(武器、車輛)、時間、排名等信息,用工具分析分析,說不定還有可能吃到雞呢。

前面說了,數據集非常大,單個的CSV文件就已經有幾個G的大小了,所以直接用Mathematica的Import函數肯定是作死了,系統直接崩掉。所以這裡我用底層的文件流來一行行的輸入數據,讀取之後立即處理,釋放內存,這樣才可以讀取數據。

下面的代碼提供了ImportFirst函數,可以讀取CSV文件的前N行,輸入是一個文件流對象:

ImportFirst[stream_,type_,n_]:=ImportString[StringRiffle[Table[ReadLine[stream],{n}],"
"
],type]

拿到數據,就可以做一些分析了。我一共找到了吃雞中的三個「秘密」,在這裡與大家分享一下。

1、 「死角」的作用有多大?

我們都知道,在遊戲中要不被人看到,就要利用地形。比如上圖中,若要悄悄摸到房子下,可能橙色的路線就比較好,因為相對於窗戶來說,其角度非常刁鑽,是一個死角。但是,

死角的作用有多大呢?

口說無憑,我們要科學吃雞,就得做實驗。

數據集中,有兩個數據可以拿出來研究:擊殺者的位置,以及被擊殺者的位置。

使用這些數據,就可以很容易的計算出角度,如果角度在某些方位上,出現概率有峰值的話,就可以印證我的猜想:死角的確有用。

角度的計算非常容易, 	heta = 	an^{-1}(Delta x, Delta y)

我將數據都代入了上面的公式,得到了一個驚人的結果(圖中離原點越遠,表示這個角度擊殺的概率越高):

一個近似的正方形!旋轉了45度角。這太令人驚訝了,不只在於有四個「死亡角度」,還在於其結構居然如此規整

這張圖意味著什麼呢?它意味著:

東南西北四角的擊殺概率很高,而四角之間的幾個方向,也就是房間里的死角方向,擊殺概率很低。

我們反過來,也可以說,在靠近房屋的時候,建議從這四個死角去接近。從統計結果上來看,這幾個角度的安全性,比其他方向要高30%!不要小看這30%,如果一局遊戲中要三次接近房屋,這就會提高65%的生存率!

2、 地圖上的十個「死亡孤島」

在吃雞常見的兩個地圖中,其實還分別暗藏著十個左右的「死亡孤島」。在這些區域,玩家的死亡數量要明顯高於其他位置。如果是吃雞新手的話,知道這些信息,就可以選擇避開這些「是非之地」。

前面提到,我們已經有了擊殺、被擊殺的位置數據,所以可以很容易的得到擊殺位置的分布情況。

首先,可以看看具體的分布情況,這裡我使用了Mathematica中的DensityHistogram函數,分別繪製了兩個地圖的死亡地點分布情況,大圖可以在公眾號回復「地圖」獲取下載地址。

圖中顏色越紅的地方,表示擊殺數越多。那有紅色標記的地方都不能去了嗎?當然不是,我們畢竟要承受一定的風險。所以,可以設定一個閾值:死亡數量高於這個值,就認為是「高危區域」;低於這個值,則認為是安全區域。

所以,我們就得到了第二版的地圖——死亡孤島

這樣,雖然總的信息量減少了,但我們能獲得的信息卻增加了。這是因為,雖然圖像做了簡化,但正是這簡化的工作,讓核心的信息突出了出來。

這裡我們可以注意到很多有意思的事情,首先,在海島地圖中,左下角雖然也散落著不少房屋,但卻沒有出現集中的「死亡島」。雖然這可能是因為這裡的資源比較少,但同樣可以作為新手的庇護池。更重要的是,這兩張地圖,可以作為「玩家密度圖」來使用,想苟著,就可以走「暗區」(圖中暗色區域);想剛槍,則可以去「明區」。

正因為這些死亡集中的區域,互不相連,就像島嶼一樣,所以我稱之為「死亡孤島。」

3、「擊殺」是隨機的嗎?

最後,我們來討論一個更學術一點的問題:擊殺事件是隨機的嗎?

所謂說「擊殺」事件隨機,意思就是認為相鄰的幾次擊殺之間沒有關聯。比如說,可能存在一種機制,使得擊殺事件更容易集中起來。舉個例子,我在某處淘汰了一個玩家,槍聲是否會引來其他玩家,從而提高我被淘汰的幾率呢?

數據集中還包含了擊殺時間的數據,我們可以以此為切入點,去研究這個問題。

我們首先可以看看擊殺時間間隔的分布情況。也就是前後兩次擊殺的間隔時間,其不同長度的時間,出現概率不同。比如說,可能兩次擊殺時間間隔為1秒的概率為10%,10秒的概率則可能是1%。

我在對數坐標上繪製了時間間隔的分布圖:

這裡,注意到一個非常有意思的現象:在對數坐標下,分布圖呈現了近似直線的結構。那麼,這意味著什麼呢?這意味著擊殺事件可能是隨機的!

這是因為,如果你使用一個隨機生成的序列,每一個事件的發生時間都是隨機數,其得到的間隔,其分布就是指數分布!

我們對所有的間隔數據,進行了獨立檢驗:

這裡使用Mathematica中的「IndependenceTest」,對間隔數據進行了檢驗,其結果如下:

請你關注P-Value這一列,這表示數據前後可能相關的概率。第一列則是各種類型的相關性檢驗方法,這裡不用太過關心。這裡的P-Value的值都非常小,意味著在各個假設檢驗的條件之下,都一致認為,擊殺事件都不是隨機的!

那麼,真的如此嗎?我們再看看這張圖:

在數值很小的地方,分布其實偏離了指數分布。如果我們提取這一部分的數據,是否會得到不同的結果呢?

檢驗結果似乎有了很大的變化:

P-Value有了顯著的提升(參與檢驗的序列長度一致),最高達到了26%!這是為什麼呢?我們來看看分布,特別是間隔小於20個時間單位的分布情況:

0~1這一段有一個峰值,但在其他位置,仍然保持冪律分布的結構。我們去掉了等於0的數值,結果這裡的峰值就沒有了。我們再做一下相關性檢驗:

很明顯,P-Value大部分都非常小,只不過Blomqvist beta測試超過了0.05的閾值,說明在線性相關方面,獨立性還不夠顯著。所以,我們可以認為

擊殺事件不是隨機的,雖然間隔分布符合指數分布,但仍然是有很弱的關聯的

最後,我吃到雞了嗎?

沒有。吃雞是不可能吃雞的,

數據科學這麼好玩,進了裡面去,個個都是人才,說話又好聽,超喜歡在裡面。


最後來打個硬廣:

我在集智AI學園開設了系統的Mathematica教程,喜歡數據科學/Mathematica的朋友千萬不要錯過!

Mathematica基礎入門教程?

campus.swarma.org圖標

往期教程:

章彥博:從1+1到混沌 | Mathematica系列教程·第一集?

zhuanlan.zhihu.com圖標章彥博:一行代碼能做什麼?|Mathematica十分鐘教程?

zhuanlan.zhihu.com圖標章彥博:Mathematica系統教程之·函數可視化·繪圖函數通覽?

zhuanlan.zhihu.com圖標
推薦閱讀:

計算機中的符號運算是怎麼實現的?
Mathematica 直接計算二重極限(double limit)的格式是什麼?
如何系統的學習Mathematica?
除了專業領域外,Mathematica 在日常生活有什麼有趣用處?
Mathematica 一連串程序怎麼打開?

TAG:大數據 | 數據分析 | WolframMathematica |