# 数据可视化教你玩吃鸡——吃鸡 9 问 ！

1、跳哪儿危险？

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"], n_levels=100,cmap=cm.Reds, alpha=0.9)

2、苟着还是出去干？

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、哪一种武器干掉的玩家多？

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、队友的助攻是否助我吃鸡？

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、敌人离我越近越危险？

1# python代码：杀人和距离的关系 2import math 3def get_dist(df): #距离函数 4 dist = [] 5 for row in df.itertuples(): 6 subset = (row.killer_position_x - row.victim_position_x)**2 + (row.killer_position_y - row.victim_position_y)**2 7 if subset > 0: 8 dist.append(math.sqrt(subset) / 100) 9 else: 10 dist.append(0) 11 return dist 12 13df_dist = pd.DataFrame.from_dict({'dist(m)': get_dist(erangel)}) 14df_dist.index = erangel.index 15 16erangel_dist = pd.concat([erangel,df_dist], axis=1) 17 18df_dist = pd.DataFrame.from_dict({'dist(m)': get_dist(miramar)}) 19df_dist.index = miramar.index 20 21miramar_dist = pd.concat([miramar,df_dist], axis=1) 22 23f, axes = plt.subplots(1, 2, figsize=(30, 10)) 24plot_dist = 150 25 26axes[0].set_title('Engagement Dist. : Erangel') 27axes[1].set_title('Engagement Dist.: Miramar') 28 29plot_dist_er = erangel_dist[erangel_dist['dist(m)'] <= plot_dist] 30plot_dist_mr = miramar_dist[miramar_dist['dist(m)'] <= plot_dist] 31 32sns.distplot(plot_dist_er['dist(m)'], ax=axes[0]) 33sns.distplot(plot_dist_mr['dist(m)'], ax=axes[1])

6、团队人越多我活得越久？

7、乘车是否活得更久？

8、小岛上人越多我活得更久？

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") 21fit2 <- 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")

9、最后毒圈有可能出现的地点？

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)

0 条评论

• ### 自然语言处理中注意力机制综述

近些年来，注意力机制一直频繁的出现在目之所及的文献或者博文中，可见在nlp中算得上是个相当流行的概念，事实也证明其在nlp领域散发出不小得作用。这几年的顶会pa...

• ### Python系列之二——图说OpenCv

opencv的强大无须质疑，前段时间一直在用c++，总感觉怪怪的，就想着换个语言试试看，这不，小詹同学开始尝试Python啦~ ...

• ### 超长好文 ｜Matplotlib 可视化最有价值的 50 个图表（附完整 Python 源代码）

在数据分析和可视化中最有用的 50 个 Matplotlib 图表。 这些图表列表允许您使用 python 的 matplotlib 和 seaborn 库选择...

• ### 大数据助你“吃鸡”一臂之力！

对于我这样一直喜欢苟着的良心玩家，在经历了无数次落地成河的惨痛经历后，我是坚决不会选择跳P城这样楼房密集的城市，穷归穷但保命要紧。所以我们决定统计一下到底哪些地...

• ### 教你用Python解锁“吃鸡”的正确姿势！

本文用Python分析吃鸡比赛的真实数据，解答至关重要的9个问题，助你提高吃鸡概率。

• ### 大吉大利，今晚如何用 Python 解锁“吃鸡”的正确姿势

大吉大利，今晚吃鸡~ 今天跟朋友玩了几把吃鸡，经历了各种死法，还被嘲笑说论女生吃鸡的100种死法，比如被拳头抡死、跳伞落到房顶边缘摔死 、把吃鸡玩成飞车被车技秀...

• ### Linux的I2C驱动框架分析

总线代表着同类设备需要共同遵守的工作时序，不同的总线对于物理电平的要求是不一样的，对于每个比特的电平维持宽度也是不一样，而总线上传递的命令也会有自己的格式约束。...

• ### Spring学习笔记之aop动态代理（3）

1.0 静态代理模式的缺点： 1、在该系统中有多少的dao就的写多少的proxy，麻烦 2、如果目标接口有方法的改动，则proxy也需...

• ### 斯坦福「众筹」算力寻找新冠特效药，氪金玩家：是时候祭出我的泰坦了

我们每隔一段时间就会看到更快更强的 CPU、GPU 问世，全球顶尖的实验室、科技公司也在不断加码构建超级计算机。但尽管如此，在面对一些问题时，再强大的机构也会面...