吃雞最強攻略!內附170行Python代碼!

2020-12-25 QIKU奇酷學院

喜歡的妹子玩吃雞經歷了落地3分鐘就被斃、跑不過毒倒在半路上失血致死、站在草叢中被不明方向的子彈狙擊而亡怎麼辦?

還能怎麼辦——當然要用畢生所學解救她!

第1則到底跳哪裡最安全

跳哪裡一直都是個比較糾結的問題,跳得好既可以獲得充足的武器和物資,又可以提高生存概率,當然最幸運的莫過成為「天選之子」。

在篩選了46萬條玩家在遊戲開局3分鐘內就被幹掉的數據,我把它畫了出來。

▲絕地海島艾倫格地圖

圖中越紅的地方,就是開局3分鐘死亡人數最多的地方。可以看到,Rozhok和學校附近、軍事基地周圍,由於物資豐富跳的人數眾多,是開局死亡發生率最高的地方,再者是Bunkers和Crater附近、Georgopol和醫院附近、GunRange附近。

▲熱情沙漠米拉瑪地圖

如果想提高存活率(想要練技術的除外),特別是新手,還是避開這些地方跳好一些。

畢竟比起一落地還沒找到槍,就被先找到槍的人幹掉了,我還是更傾向於好好跟隊友一起跳個安全一點的地兒,好好找槍,毒來了就開著小車慢悠悠地欣賞路上的風光。

劃重點:Pecado、San Martin、Power Grid區域,是開局最危險的區域。

附:代碼如下

1import numpy as np

2import matplotlib.pyplot as plt

3import pandas as pd

4import seaborn as sns

5from scipy.misc.pilutil import imread

6import matplotlib.cm as cm

7

8#導入部分數據

9deaths1 = pd.read_csv("deaths/kill_match_stats_final_0.csv")

10deaths2 = pd.read_csv("deaths/kill_match_stats_final_1.csv")

11

12deaths = pd.concat([deaths1, deaths2])

13

14#列印前5列,理解變量

15print (deaths.head(),'\n',len(deaths))

16

17#兩種地圖

18miramar = deaths[deaths["map"] == "MIRAMAR"]

19erangel = deaths[deaths["map"] == "ERANGEL"]

20

21#開局前100秒死亡熱力圖

22position_data = ["killer_position_x","killer_position_y","victim_position_x","victim_position_y"]

23for position in position_data:

24 miramar[position] = miramar[position].apply(lambda x: x*1000/800000)

25 miramar = miramar[miramar[position] != 0]

26

27 erangel[position] = erangel[position].apply(lambda x: x*4096/800000)

28 erangel = erangel[erangel[position] != 0]

29

30n = 50000

31mira_sample = miramar[miramar["time"] < 100].sample(n)

32eran_sample = erangel[erangel["time"] < 100].sample(n)

33

34# miramar熱力圖

35bg = imread("miramar.jpg")

36fig, ax = plt.subplots(1,1,figsize=(15,15))

37ax.imshow(bg)

38sns.kdeplot(mira_sample["victim_position_x"], mira_sample["victim_position_y"],n_levels=100, cmap=cm.Reds, alpha=0.9)

39

40# erangel熱力圖

41bg = imread("erangel.jpg")

42fig, ax = plt.subplots(1,1,figsize=(15,15))

43ax.imshow(bg)

44sns.kdeplot(eran_sample["victim_position_x"], eran_sample["victim_position_y"],

第2則

我是該苟著不動

還是應該出去猛幹

那是不是有一直都安全的區域?找完武器之後直接躲起來行不行?

冷靜!我們來看看圖好嗎?

這是一張擊殺人數與吃雞概率的關係圖,可以清楚看到,吃雞的概率跟幹掉的人數是呈正比關係的,想要獲得30%以上的吃雞概率需要最少幹掉7個人,幹掉10個人的吃雞概率是50%,幹掉15個人的吃雞概率是75%。

因此,如果想要天天吃雞,在一個地方躲著不出來是不可能的。多點練習多提高擊殺技術才是上策。

附:代碼如下

1library(dplyr)

2library(tidyverse)

3library(data.table)

4library(ggplot2)

5pubg_full <- fread("../agg_match_stats.csv")

6# 吃雞團隊平均擊殺敵人的數量

7attach(pubg_full)

8pubg_winner <- pubg_full %>% filter(team_placement==1&party_size<4&game_size>90)

9detach(pubg_full)

10team_killed <- aggregate(pubg_winner$player_kills, by=list(pubg_winner$match_id,pubg_winner$team_id), FUN="mean")

11team_killed$death_num <- ceiling(team_killed$x)

12ggplot(data = team_killed) + geom_bar(mapping = aes(x = death_num, y = ..count..), color="steelblue") +

13 xlim(0,70) + labs(title = "Number of Death that PUBG Winner team Killed", x="Number of death")

14

15# 吃雞團隊最後存活的玩家擊殺數量

16pubg_winner <- pubg_full %>% filter(pubg_full$team_placement==1) %>% group_by(match_id,team_id)

17attach(pubg_winner)

18team_leader <- aggregate(player_survive_time~player_kills, data = pubg_winner, FUN="max")

19detach(pubg_winner)

20

21# 吃雞團隊中擊殺敵人最多的數量

22pubg_winner <- pubg_full %>% filter(pubg_full$team_placement==1&pubg_full$party_size>1)

23attach(pubg_winner)

24team_leader <- aggregate(player_kills, by=list(match_id,team_id), FUN="max")

25detach(pubg_winner)

26ggplot(data = team_leader) + geom_bar(mapping = aes(x = x, y = ..count..), color="steelblue") +

27 xlim(0,70) + labs(title = "Number of Death that PUBG Winner Killed", x="Number of death")

第3則

哪種武器幹掉的人比較多

運氣好挑到好武器的時候,你是否猶豫選擇哪一件?

從海島和沙漠兩張地圖,擊殺人數最多的10中武器統計圖中可以看到,不論是在海島還是沙漠,M416自動步槍都高居榜首,接著是自動步槍SCAR-L、M16A4、AKM。擊殺排前四的都是自動步槍,5.56毫米子彈獨步天下呀。第五名是UMP9衝鋒鎗,第六名是S1897霰彈槍。

1#殺人武器排名

2death_causes = deaths['killed_by'].value_counts()

3

4sns.set_context('talk')

5fig = plt.figure(figsize=(30, 10))

6ax = sns.barplot(x=death_causes.index, y=[v / sum(death_causes) for v in death_causes.values])

7ax.set_title('Rate of Death Causes')

8ax.set_xticklabels(death_causes.index, rotation=90)

9

10#排名前20的武器

11rank = 20

12fig = plt.figure(figsize=(20, 10))

13ax = sns.barplot(x=death_causes[:rank].index, y=[v / sum(death_causes) for v in death_causes[:rank].values])

14ax.set_title('Rate of Death Causes')

15ax.set_xticklabels(death_causes.index, rotation=90)

16

17#兩個地圖分開取

18f, axes = plt.subplots(1, 2, figsize=(30, 10))

19axes[0].set_title('Death Causes Rate: Erangel (Top {})'.format(rank))

20axes[1].set_title('Death Causes Rate: Miramar (Top {})'.format(rank))

21

22counts_er = erangel['killed_by'].value_counts()

23counts_mr = miramar['killed_by'].value_counts()

24

25sns.barplot(x=counts_er[:rank].index, y=[v / sum(counts_er) for v in counts_er.values][:rank], ax=axes[0] )

26sns.barplot(x=counts_mr[:rank].index, y=[v / sum(counts_mr) for v in counts_mr.values][:rank], ax=axes[1] )

27axes[0].set_ylim((0, 0.20))

28axes[0].set_xticklabels(counts_er.index, rotation=90)

29axes[1].set_ylim((0, 0.20))

30axes[1].set_xticklabels(counts_mr.index, rotation=90)

31

32#吃雞和武器的關係

33win = deaths[deaths["killer_placement"] == 1.0]

34win_causes = win['killed_by'].value_counts()

35

36sns.set_context('talk')

37fig = plt.figure(figsize=(20, 10))

38ax = sns.barplot(x=win_causes[:20].index, y=[v / sum(win_causes) for v in win_causes[:20].values])

39ax.set_title('Rate of Death Causes of Win')

40ax.set_xticklabels(win_causes.index, rotation=90)

第4則

隊友的助攻是否助我吃雞?

這裡選擇成功吃雞的隊伍,最終接受 1 次幫助的成員所在的團隊吃雞的概率為 29%。

助攻次數跟吃雞概率也是成正比關係的,5次助攻吃雞概率為50%,助攻11次以上鎖定吃雞。

所以說豬隊友很重要。

附:代碼如下

1library(dplyr)

2library(tidyverse)

3library(data.table)

4library(ggplot2)

5pubg_full <- fread("E:/aggregate/agg_match_stats_0.csv")

6attach(pubg_full)

7pubg_winner <- pubg_full %>% filter(team_placement==1)

8detach(pubg_full)

9ggplot(data = pubg_winner) + geom_bar(mapping = aes(x = player_assists, y = ..count..), fill="#E69F00") +

10 xlim(0,10) + labs(title = "Number of Player assisted", x="Number of death")

11ggplot(data = pubg_winner) + geom_bar(mapping = aes(x = player_assists, y = ..prop..), fill="#56B4E9") +

12 xlim(0,10) + labs(title = "Number of Player assisted", x="Number of death")

第5則毒來了我跑不過毒怎麼辦

在後面的死因分析中發現,玩家死於Bluezone也是一個很高的死因,也就是被毒死了。

純靠跑很多時候是跑不過毒的。

有車一族真的可以很帥氣!看上圖,沒有搭乘過車輛的吃雞概率是0.007,而搭乘過車輛的吃雞概率是0.058。也就是說,有車可以把吃雞概率提高8倍!

從上圖也可以看到,吃雞概率一開始隨著搭乘距離上升,搭乘8-9千米的車,吃雞概率是最高的(絕地海島艾倫格地圖的長寬都是8千米)。大於9千米概率下降,說明車是個明顯的移動目標,在車上呆久了也不安全,在需要的時候才乘車是最好的。

第6則近戰適合使用什麼武器?

我們大多數時候面臨的都是近戰,那麼近戰什麼武器擊殺人數最多呢?

▲絕地海島艾倫格(800萬人統計量)

▲熱情沙漠米拉瑪(176萬人統計量)

可以看到,在海島地圖中,霰彈槍S1897取代了自動步槍M416成為擊殺人數最多的槍枝。接著才是M416、AKM、M16A4、SCAR-L等自動步槍系列,不過在沙漠地圖中,M416仍然是近戰的主要武器。當然,兩個地圖中,Punch(拳頭)都榜上有名,看來必要的時候,拳頭也是不用講道理滴,哈哈哈。

第7則狙擊適合使用什麼武器呢?

趴在山上、躲在屋子的窗口裡向遠方的來客狙擊,也是一種很重要的殺敵方式,那麼什麼武器狙殺的人數最多呢?

▲絕地海島艾倫格(800米以上狙擊距離)

▲熱情沙漠米拉瑪(800米以上狙擊距離)

可以看到,比起近戰來說,能夠進行800米以外目標狙擊的人其實是很少的。在海島模式中,800米以上距離狙擊的主力仍然是AKM等一系列的自動步槍,所以自動步槍會是你的最佳配備。而在沙漠模式中,單發狙Kar98k開始顯現自己的威力,名列第一。連發狙中SKS算是最好用的了。

最後,把海島和沙漠中擊殺人數排名前十的武器做了一個800米以內各距離下的擊殺百分比面積圖,如下,可以說,看明白了這張圖,便可以在武器的選擇中進行很好的取捨了。

可以看到衝鋒鎗UMP9、霰彈槍S1897等只適合近戰,單發狙Kar98k是遠距離狙擊的一把好槍。在海島中,自動步槍M416、M16A4、SCAR-L、AKM適合各種距離作戰(前提是配件齊全)。在沙漠中,M416和SCAR-L適合各種距離作戰。

第8則最後的毒圈一般會在哪裡呢

最後的毒圈會在哪裡出現?哪裡出現的機率高一點?這樣不就可以結合著上面的開局危險區域圖,找到一個即安全又有大概率在最後毒圈的地方做「人選之子」躺贏嗎?

上圖便是每場比賽最後毒圈出現的位置,可以看到,跟上面那張開局危險區域圖相比,毒圈出現的位置分散了好多,幾乎各個地方都有可能。不過可以看到,在Pochinki East Hill東南方以及北方的山腳下、在Yasnaya Polyana南邊等區域,是最後毒圈出現頻率最高的區域。

另外可以知道的是,最後的毒圈出現在近海、近河的地方概率比較小,所以如果在臨近最後的時候,大圈範圍包含了河流、海邊的話,那麼可以估計最後毒圈應該在河流、海邊的反方向。

沙漠最後的決戰地也很分散,不過比海島集中多了。概率比較大的地方有:Los Leones和La Bendita之間的區域、Monte Nuevo和Pecado等區域周圍。最外圍一大圈公路的周圍及外面,基本上不可能是最後的毒圈。所以如果大圈圈到這些地方的話,往裡跑就對了。

代碼如下:

1#最後毒圈位置

2import matplotlib.pyplot as plt

3import pandas as pd

4import seaborn as sns

5from scipy.misc.pilutil import imread

6import matplotlib.cm as cm

7

8#導入部分數據

9deaths = pd.read_csv("deaths/kill_match_stats_final_0.csv")

10#導入aggregate數據

11aggregate = pd.read_csv("aggregate/agg_match_stats_0.csv")

12print(aggregate.head())

13#找出最後三人死亡的位置

14

15team_win = aggregate[aggregate["team_placement"]==1] #排名第一的隊伍

16#找出每次比賽第一名隊伍活的最久的那個player

17grouped = team_win.groupby('match_id').apply(lambda t: t[t.player_survive_time==t.player_survive_time.max()])

18

19deaths_solo = deaths[deaths['match_id'].isin(grouped['match_id'].values)]

20deaths_solo_er = deaths_solo[deaths_solo['map'] == 'ERANGEL']

21deaths_solo_mr = deaths_solo[deaths_solo['map'] == 'MIRAMAR']

22

23df_second_er = deaths_solo_er[(deaths_solo_er['victim_placement'] == 2)].dropna()

24df_second_mr = deaths_solo_mr[(deaths_solo_mr['victim_placement'] == 2)].dropna()

25print (df_second_er)

26

27position_data = ["killer_position_x","killer_position_y","victim_position_x","victim_position_y"]

28for position in position_data:

29 df_second_mr[position] = df_second_mr[position].apply(lambda x: x*1000/800000)

30 df_second_mr = df_second_mr[df_second_mr[position] != 0]

31

32 df_second_er[position] = df_second_er[position].apply(lambda x: x*4096/800000)

33 df_second_er = df_second_er[df_second_er[position] != 0]

34

35df_second_er=df_second_er

36# erangel熱力圖

37sns.set_context('talk')

38bg = imread("erangel.jpg")

39fig, ax = plt.subplots(1,1,figsize=(15,15))

40ax.imshow(bg)

41sns.kdeplot(df_second_er["victim_position_x"], df_second_er["victim_position_y"], cmap=cm.Blues, alpha=0.7,shade=True)

42

43# miramar熱力圖

44bg = imread("miramar.jpg")

45fig, ax = plt.subplots(1,1,figsize=(15,15))

46ax.imshow(bg)

47sns.kdeplot(df_second_mr["victim_position_x"], df_second_mr["victim_position_y"], cmap=cm.Blues,alpha=0.8,shade=True)

相關焦點

  • 工具&方法 | 6行代碼教你用python做OLS回歸(內附CFPS實例)
    如果你使用 Anaconda 安裝的 python ,那麼:conda install statsmodels如果你使用 pip 管理你的python包,那麼:為了方便 Python 基礎不那麼好的同學,我們駐行「精讀」一遍這些代碼:import numpy as npimport statsmodels.api as smimport statsmodels.formula.api as smf
  • python小課堂17 - 30行代碼破解加密ZIP文件
    打開命令行,執行py腳本。我這裡命令行用的是git bash shell,這是一種windows下的類linux命令行,非常好用,兼容所有linux命令,裝了git的同學用了都說好!!~命令行函數代碼parser = optparse.OptionParser('\n  %prog -z <zipfile> -d <dictionary>')parser.add_option('-z', dest='zname', type='string', help='specify zip file')
  • 50行python代碼寫個計算器教程
    案例展示計算器.gif你能學到input 用戶輸入print輸出tkinter圖形界面python運算符號基礎知識準備運算符號數字運算,求和我們使用了加號 (+)運算符,除此外,還有 減號 (-), 乘號 (*), 除號 (/), 地板除 (//) 或 取餘 (%)。
  • 雲頂之弈最強吃雞陣容 10.4四秘術四劍士最新攻略
    雲頂之弈最強吃雞陣容 10.4四秘術四劍士最新攻略,想必很多小夥伴對雲頂之弈新版本還不太了解,下面我們就一起來看看吧: 4秘術4劍士4沙漠 ​基本上只要湊夠這3個羈絆大概率就能吃雞,那麼這些羈絆由哪些英雄組成呢?
  • Stacking 模型融合詳解(附python代碼)
    應該就是訓練樣本的個數行(train_set_number),列數就是n吧,因為n個模型啊,這就是我們對第一層結果的一個特徵堆疊方法,這樣第一層出來的結果又可以作為特徵訓練第二層,第二層任然可以使用stacking多個模型,或者直接接一個模型用於訓練,然後直接預測。
  • 幾個Python「小伎倆」|內附代碼
    itermgetter()函數還可以接受多個鍵1rows_by_frame = sorted(rows, key=itemgetter('fname','lname'))數字、日期和時間對數值進行取整使用內建的
  • 慢步python,說說import,引用功能代碼(功能庫、py文件代碼)
    今天想說說importimport是python語言的保留字,它能實現引用當前程序之外已有的功能代碼。python語言像積木,你可以根據你想要的功能,編寫一系列的代碼。比如筆者之前編寫的《word文檔標題置換》。
  • Python一行代碼,能玩這麼多童年的遊戲?
    來源 | 早起 Python責編 | Carol封圖 | CSDN 下載自視覺中國兒童節就要來了,雖然禿頭程式設計師沒有頭髮,但是童心還是一直都在的,今天就分享一個私藏的GitHub項目——free-python-games,一行代碼就能進入使用Python開發的小遊戲快樂玩耍!
  • Python代碼技巧,你值得擁有!
    如何在命令行查看python文檔如何將python代碼打包成獨立的二進位文件需要編譯的python代碼如下:#!/usr/bin/env python# -*- coding: utf-8 -*-print 'hello, world!'將python代碼打包成獨立的二進位文件步驟:
  • 在Rust 代碼中編寫 Python 是種怎樣的體驗?
    {for i in range('n): print(i, "Hello", 'who)print("Goodbye") }}它允許你將Python代碼直接嵌入Rust代碼行之間,甚至直接在Python代碼中使用Rust
  • 用python寫遊戲之200行代碼寫個數字華容道
    當初對這個遊戲頗有印象還是在最強大腦節目上面,何猷君以幾十秒就完成了這個遊戲。前幾天寫2048的時候,又想起了這個遊戲,想著來研究一下。遊戲玩法用儘量少的步數,儘量短的時間,將棋盤上的數字方塊,按照從左到右、從上到下的順序重新排列整齊。
  • Python不超過10行代碼就可實現人臉識別,教你辨別真假
    依賴及其它依賴庫 $sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev獲得opencv原始碼 git clone https://github.com
  • Python 入門系列 —— 3. 代碼縮進和注釋
    正如前面一篇學到的,Python 語法是可以直接在 命令行 中被執行,如下代碼:>>> print("Hello, World!")Hello, World! 或者在 server 端創建一個以.py 為後綴名的 python 文件,然後在命令行中執行它。
  • 入門 | 三行Python代碼,讓數據預處理速度提高2到6倍
    本文可以教你僅使用 3 行代碼,大大加快數據預處理的速度。Python 是機器學習領域內的首選程式語言,它易於使用,也有很多出色的庫來幫助你更快處理數據。但當我們面臨大量數據時,一些問題就會顯現……目前,大數據(Big Data)這個術語通常用於表示包含數十萬數據點的數據集。在這樣的尺度上,工作進程中加入任何額外的計算都需要時刻注意保持效率。
  • 三行Python代碼,讓數據處理速度提高2到6倍
    本文可以教你僅使用 3 行代碼幸運的是,Python 庫中內建了一些隱藏的特性,可以讓我們充分利用所有 CPU 核心的能力。通過使用 Python 的 concurrent.futures 模塊,我們只需要 3 行代碼就可以讓一個普通的程序轉換成適用於多核處理器並行處理的程序。標準方法讓我們舉一個簡單的例子,在單個文件夾中有一個圖片數據集,其中有數萬張圖片。在這裡,我們決定使用 1000 張。
  • 手把手教你用python搶票回家過年 !(附代碼)
    下面讓我們來用Python寫一個命令行版的火車票查看器, 只要在命令行敲一行命令就能獲得你想要的火車票信息!如果你剛掌握了Python基礎,這將是個不錯的小練習。接口設計一個應用寫出來最終是要給人使用的,哪怕只是給你自己使用。所以,首先應該想想你希望怎麼使用它?
  • python 定時器具體的使用代碼介紹
    python 定時器具體的使用代碼介紹 python 定時器在我們使用的時候有不少需要注意的事情,下面我們就看看如何才能更好的使用這個相關的語句。希望大家有所收穫。
  • 科普文,python注釋,在代碼中對代碼功能進行解釋的標註性文字
    提高代碼的可讀性,需要提供對代碼的注釋。 python注釋,主要作用在代碼中,對代碼功能進行解釋,是一種標註性文字。一般情況下分成三類,單行注釋、多行注釋、中文聲明注釋。一、先說單行注釋!如圖所示!分為兩種情況。1、單行注釋放在要注釋代碼的前一行。2、注釋放在代碼右側。
  • python發布代碼教程
    def tria(d,h):''' 計算三角形的面積 '''s=d*h/2return ssetup.py文件包含有關發布的元數據,代碼如下。(二)將發布安裝到你的Python本地副本中(1)複製python命令路徑,將複製的路徑粘貼到DOS命令中,如圖所示:、(2)輸入命令:python setup.py install,如圖所示:回車後,出現如圖所示:這時,你可以看到mymodule目錄中包含如圖所示文件如果你想在網際網路上發布代碼,讓全世界都分享你的成果
  • 全面解析python用途!!內附免費資源!
    python用途的優點是什麼?簡單、免費、兼容性、面向對象、 函數庫在哪裡使用 Python 語言?爬蟲  Web 程序開發  桌面程序開發  科學計算  圖像處理  人工智慧等對於一些從未來沒有寫過代碼的人來說,Python 的代碼簡潔易懂。