1. 程式人生 > >Python給自己寫一款不一樣的吃雞“外掛”

Python給自己寫一款不一樣的吃雞“外掛”

吃雞的火熱程度相信大家都有所瞭解,今天小編就來帶大家制作“簡單的外掛”,相信能夠幫助大家大吉大利,今晚吃雞!

1、小島上人越多我活得更久?

對game_size變數進行生存分析發現還是小規模的比賽比較容易存活。

Python給自己寫一款不一樣的吃雞“外掛

 

 

1# R語言程式碼如下:

2library(magrittr)

3library(dplyr)

4library(survival)

5library(tidyverse)

6library(data.table)

7library(ggplot2)

8library(survminer)

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

10# 資料預處理,將連續變數劃為分類變數

11pubg_sub <- pubg_full %>%

12 filter(player_survive_time<2100) %>%

13 mutate(drive = ifelse(player_dist_ride>0, 1, 0)) %>%

14 mutate(size = ifelse(game_size<33, 1,ifelse(game_size>=33 &game_size<66,2,3)))

15# 建立生存物件

16surv_object <- Surv(time = pubg_sub$player_survive_time)

17fit1 <- survfit(surv_object~party_size,data = pubg_sub)

18# 視覺化生存率

19ggsurvplot(fit1, data = pubg_sub, pval = TRUE, xlab="Playing time [s]", surv.median.line="hv",

20 legend.labs=c("SOLO","DUO","SQUAD"), ggtheme = theme_light(),risk.table="percentage")

21f

<- survfit(surv_object~drive,data=pubg_sub)

22ggsurvplot(fit2, data = pubg_sub, pval = TRUE, xlab="Playing time [s]", surv.median.line="hv",

23 legend.labs=c("walk","walk&drive"), ggtheme = theme_light(),risk.table="percentage")

24fit3 <- survfit(surv_object~size,data=pubg_sub)

25ggsurvplot(fit3, data = pubg_sub, pval = TRUE, xlab="Playing time [s]", surv.median.line="hv",

26 legend.labs=c("small","medium","big"), ggtheme = theme_light(),risk.table="percentage")

 

2. 擊殺數與吃雞概率的關係

  • 玩過農藥的的童鞋都會知道,收人頭收得越多,技能加成越大,傷害越來越大,無人能擋時就是勝利在望。而在吃雞裡面,能活到最後一個就是王者,所以很明顯擊殺人頭越多,吃到雞的概率並不一定大。那一場遊戲裡面,擊殺多少個算厲害來呢??
  • 我們篩選比賽中所有排名第一的玩家,看看他們是擊殺數分佈:

Python給自己寫一款不一樣的吃雞“外掛

 

 

  • 看上圖是不是挺意外,單場比賽擊殺2個以內的佔多數,吃到雞的人也不例外,他們並不追求人頭,猥瑣發育也很重要.
  • 小白玩家也不必擔心一場遊戲裡沒人頭,擊殺一兩個機器人也算是收穫不小來。

match_stats = pd.read_csv('F:/pubg-match-deaths/aggregate/agg_match_stats_0.csv')

winer = match_stats.loc[(match_stats['team_placement'] == 1), :].dropna()

labels = [0, 2, 5, 8, 11, 15, 20, 30, 40, 50]

winer['kill'] = pd.cut(winer['player_kills'], bins=labels)

winer['assist'] = pd.cut(winer['player_assists'], bins=labels)

winer['kill'].value_counts().plot.bar(figsize=(10, 10))

plt.savefig('out7.png', dpi=100)

3、最後毒圈有可能出現的地點?

  • 面對有本事能苟到最後的我,怎麼樣預測最後的毒圈出現在什麼位置。從表agg_match_stats資料找出排名第一的隊伍,然後按照match_id分組,找出分組資料裡面player_survive_time最大的值,然後據此匹配表格kill_match_stats_final裡面的資料,這些資料裡面取第二名死亡的位置,作圖發現激情沙漠的毒圈明顯更集中一些,大概率出現在皮卡多、聖馬丁和別墅區。絕地海島的就比較隨機了,但是還是能看出軍事基地和山脈的地方更有可能是最後的毒圈。

Python給自己寫一款不一樣的吃雞“外掛

 

 

Python給自己寫一款不一樣的吃雞“外掛

 

分析結果

1. 平均使用者日線上時長2小時

Python給自己寫一款不一樣的吃雞“外掛

 

  • 從分佈圖上看大部分使用者都在1小時以上,最猛的幾個人超過8小時。
  • 注:我這裡統計的是每一局的存活時間,實際線上時長會比我這個更長。

2. 女性角色被救次數高於男性

Python給自己寫一款不一樣的吃雞“外掛

 

  • 終於知道為什麼有那麼多人妖了,原來在遊戲裡面可以佔便宜啊。

3. 女性角色救人次數高於男性

Python給自己寫一款不一樣的吃雞“外掛

 

  • 給了大家一個帶妹上分的好理由。

4. 週五大家最忙

Python給自己寫一款不一樣的吃雞“外掛

 

  • 估計週五大家都要忙著交差和寫週報了。

5. 晚上22點是遊戲高峰

Python給自己寫一款不一樣的吃雞“外掛

 

  • 凌晨還有那麼多人玩,你們不睡覺嗎?

Python給自己寫一款不一樣的吃雞“外掛

 

  • 能拿到救死扶傷稱號的大部分都是女性角色,再一次證明玩遊戲要帶妹。 迴歸到這個遊戲的本質,那就是生存遊戲,沒什麼比活下來更重要的了。

結尾

  • 這次查看了陌生人資料的場景才能提取到這麼多資料。我們可以通過同樣的手段來分析王者榮耀和其它遊戲的資料,有興趣的同學可以嘗試一下。 最後再說一下,98k是把好槍,配8 倍鏡非常爽。
1#最後毒圈位置2import matplotlib.pyplot as plt3import pandas as pd4import seaborn as sns5from scipy.misc.pilutil import imread6import matplotlib.cm as cm78#匯入部分資料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#找出最後三人死亡的位置1415team_win = aggregate[aggregate["team_placement"]==1] #排名第一的隊伍16#找出每次比賽第一名隊伍活的最久的那個player17grouped = team_win.groupby('match_id').apply(lambda t: t[t.player_survive_time==t.player_survive_time.max()])1819deaths_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']2223df_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)2627position_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]3132 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]3435df_second_er=df_second_er36# 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)4243# 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)

it2

文章就到這裡啦~