吃雞最強(qiáng)攻略!內(nèi)附170行Python代碼!
來源:
奇酷教育 發(fā)表于:
2018-08-09 10:27:56
喜歡的妹子玩吃雞經(jīng)歷了落地3分鐘就被斃、跑不過毒倒在半路上失血致死、站在草叢中被不明方向的子彈狙擊而亡怎么辦?
喜歡的妹子玩吃雞經(jīng)歷了落地3分鐘就被斃、跑不過毒倒在半路上失血致死、站在草叢中被不明方向的子彈狙擊而亡怎么辦?
還能怎么辦——當(dāng)然要用畢生所學(xué)解救她!
第1則到底跳哪里最安全
跳哪里一直都是個(gè)比較糾結(jié)的問題,跳得好既可以獲得充足的武器和物資,又可以提高生存概率,當(dāng)然最幸運(yùn)的莫過成為“天選之子”。
在篩選了46萬條玩家在游戲開局3分鐘內(nèi)就被干掉的數(shù)據(jù),我把它畫了出來。
▲絕地海島艾倫格地圖
圖中越紅的地方,就是開局3分鐘死亡人數(shù)最多的地方??梢钥吹?,Rozhok和學(xué)校附近、軍事基地周圍,由于物資豐富跳的人數(shù)眾多,是開局死亡發(fā)生率最高的地方,再者是Bunkers和Crater附近、Georgopol和醫(yī)院附近、Gun Range附近 。
▲熱情沙漠米拉瑪?shù)貓D
如果想提高存活率(想要練技術(shù)的除外),特別是新手,還是避開這些地方跳好一些。
畢竟比起一落地還沒找到槍,就被先找到槍的人干掉了,我還是更傾向于好好跟隊(duì)友一起跳個(gè)安全一點(diǎn)的地兒,好好找槍,毒來了就開著小車慢悠悠地欣賞路上的風(fēng)光。
劃重點(diǎn):Pecado、San Martin、Power Grid區(qū)域,是開局最危險(xiǎn)的區(qū)域。
附:代碼如下
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#導(dǎo)入部分?jǐn)?shù)據(jù)
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則
我是該茍著不動(dòng)
還是應(yīng)該出去猛干
那是不是有一直都安全的區(qū)域?找完武器之后直接躲起來行不行?
冷靜!我們來看看圖好嗎?
這是一張擊殺人數(shù)與吃雞概率的關(guān)系圖,可以清楚看到,吃雞的概率跟干掉的人數(shù)是呈正比關(guān)系的,想要獲得30%以上的吃雞概率需要最少干掉7個(gè)人,干掉10個(gè)人的吃雞概率是50%,干掉15個(gè)人的吃雞概率是75%。
因此,如果想要天天吃雞,在一個(gè)地方躲著不出來是不可能的。多點(diǎn)練習(xí)多提高擊殺技術(shù)才是上策。
附:代碼如下
1library(dplyr)
2library(tidyverse)
3library(data.table)
4library(ggplot2)
5pubg_full <- fread("../agg_match_stats.csv")
6# 吃雞團(tuán)隊(duì)平均擊殺敵人的數(shù)量
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# 吃雞團(tuán)隊(duì)最后存活的玩家擊殺數(shù)量
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# 吃雞團(tuán)隊(duì)中擊殺敵人最多的數(shù)量
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則
哪種武器干掉的人比較多
運(yùn)氣好挑到好武器的時(shí)候,你是否猶豫選擇哪一件?
從海島和沙漠兩張地圖,擊殺人數(shù)最多的10中武器統(tǒng)計(jì)圖中可以看到,不論是在海島還是沙漠,M416自動(dòng)步槍都高居榜首,接著是自動(dòng)步槍SCAR-L、M16A4、AKM。擊殺排前四的都是自動(dòng)步槍,5.56毫米子彈獨(dú)步天下呀。第五名是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#兩個(gè)地圖分開取
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#吃雞和武器的關(guān)系
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則
隊(duì)友的助攻是否助我吃雞?
這里選擇成功吃雞的隊(duì)伍,最終接受 1 次幫助的成員所在的團(tuán)隊(duì)吃雞的概率為 29%。
助攻次數(shù)跟吃雞概率也是成正比關(guān)系的,5次助攻吃雞概率為50%,助攻11次以上鎖定吃雞。
所以說豬隊(duì)友很重要。
附:代碼如下
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則毒來了我跑不過毒怎么辦
在后面的死因分析中發(fā)現(xiàn),玩家死于Bluezone也是一個(gè)很高的死因,也就是被毒死了。
純靠跑很多時(shí)候是跑不過毒的。
有車一族真的可以很帥氣!看上圖,沒有搭乘過車輛的吃雞概率是0.007,而搭乘過車輛的吃雞概率是0.058。也就是說,有車可以把吃雞概率提高8倍!
從上圖也可以看到,吃雞概率一開始隨著搭乘距離上升,搭乘8-9千米的車,吃雞概率是最高的(絕地海島艾倫格地圖的長(zhǎng)寬都是8千米)。大于9千米概率下降,說明車是個(gè)明顯的移動(dòng)目標(biāo),在車上呆久了也不安全,在需要的時(shí)候才乘車是最好的。
第6則近戰(zhàn)適合使用什么武器?
我們大多數(shù)時(shí)候面臨的都是近戰(zhàn),那么近戰(zhàn)什么武器擊殺人數(shù)最多呢?
▲絕地海島艾倫格(800萬人統(tǒng)計(jì)量)
▲熱情沙漠米拉瑪(176萬人統(tǒng)計(jì)量)
可以看到,在海島地圖中,霰彈槍S1897取代了自動(dòng)步槍M416成為擊殺人數(shù)最多的槍支。接著才是M416、AKM、M16A4、SCAR-L等自動(dòng)步槍系列,不過在沙漠地圖中,M416仍然是近戰(zhàn)的主要武器。當(dāng)然,兩個(gè)地圖中,Punch(拳頭)都榜上有名,看來必要的時(shí)候,拳頭也是不用講道理滴,哈哈哈。
第7則狙擊適合使用什么武器呢?
趴在山上、躲在屋子的窗口里向遠(yuǎn)方的來客狙擊,也是一種很重要的殺敵方式,那么什么武器狙殺的人數(shù)最多呢?
▲絕地海島艾倫格(800米以上狙擊距離)
▲熱情沙漠米拉瑪(800米以上狙擊距離)
可以看到,比起近戰(zhàn)來說,能夠進(jìn)行800米以外目標(biāo)狙擊的人其實(shí)是很少的。在海島模式中,800米以上距離狙擊的主力仍然是AKM等一系列的自動(dòng)步槍,所以自動(dòng)步槍會(huì)是你的最佳配備。而在沙漠模式中,單發(fā)狙Kar98k開始顯現(xiàn)自己的威力,名列第一。連發(fā)狙中SKS算是最好用的了。
最后,把海島和沙漠中擊殺人數(shù)排名前十的武器做了一個(gè)800米以內(nèi)各距離下的擊殺百分比面積圖,如下,可以說,看明白了這張圖,便可以在武器的選擇中進(jìn)行很好的取舍了。
可以看到?jīng)_鋒槍UMP9、霰彈槍S1897等只適合近戰(zhàn),單發(fā)狙Kar98k是遠(yuǎn)距離狙擊的一把好槍。在海島中,自動(dòng)步槍M416、M16A4、SCAR-L、AKM適合各種距離作戰(zhàn)(前提是配件齊全)。在沙漠中,M416和SCAR-L適合各種距離作戰(zhàn)。
第8則最后的毒圈一般會(huì)在哪里呢
最后的毒圈會(huì)在哪里出現(xiàn)?哪里出現(xiàn)的幾率高一點(diǎn)?這樣不就可以結(jié)合著上面的開局危險(xiǎn)區(qū)域圖,找到一個(gè)即安全又有大概率在最后毒圈的地方做“人選之子”躺贏嗎?
上圖便是每場(chǎng)比賽最后毒圈出現(xiàn)的位置,可以看到,跟上面那張開局危險(xiǎn)區(qū)域圖相比,毒圈出現(xiàn)的位置分散了好多,幾乎各個(gè)地方都有可能。不過可以看到,在Pochinki East Hill東南方以及北方的山腳下、在Yasnaya Polyana南邊等區(qū)域,是最后毒圈出現(xiàn)頻率最高的區(qū)域。
另外可以知道的是,最后的毒圈出現(xiàn)在近海、近河的地方概率比較小,所以如果在臨近最后的時(shí)候,大圈范圍包含了河流、海邊的話,那么可以估計(jì)最后毒圈應(yīng)該在河流、海邊的反方向。
沙漠最后的決戰(zhàn)地也很分散,不過比海島集中多了。概率比較大的地方有:Los Leones和La Bendita之間的區(qū)域、Monte Nuevo和Pecado等區(qū)域周圍。最外圍一大圈公路的周圍及外面,基本上不可能是最后的毒圈。所以如果大圈圈到這些地方的話,往里跑就對(duì)了。
代碼如下:
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#導(dǎo)入部分?jǐn)?shù)據(jù)
9deaths = pd.read_csv("deaths/kill_match_stats_final_0.csv")
10#導(dǎo)入aggregate數(shù)據(jù)
11aggregate = pd.read_csv("aggregate/agg_match_stats_0.csv")
12print(aggregate.head())
13#找出最后三人死亡的位置
14
15team_win = aggregate[aggregate["team_placement"]==1] #排名第一的隊(duì)伍
16#找出每次比賽第一名隊(duì)伍活的最久的那個(gè)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)