Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

人気ゲームPUPGのキル分析。seaborn-pairplotを使用。

世界中の方々が熱中している、PUPGの世界。
やはり、強い武器などって気になったり。

ということでcsvファイルを読み込んで30行ほどのコードを書きpairplotで
ビジュアル化してみました。

成り行き

最近seabornのpairplotを触ってみて面白いと感じどうにかアイリスやタイタニックなどのベタなデータ以外で試せないかと思い、試した次第です。したがって、プロットに用いるデータや仕方がおかしい可能性があります。もしなんだこれという場合は是非アドバイスを頂けると幸いです。

csvの参照先→

https://www.kaggle.com/skihikingkevin/pubg-match-deaths?
kaggleです。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

df = pd.read_csv("csvまでのパス")
#数値データでなくてはプロットできない。
show_df = df.drop(['victim_position_x','victim_position_y','victim_placement','killer_placement','killer_name'],axis=1)
#欠陥値の補足
show_df['kill_position_x'] = show_df['killer_position_x'].fillna(show_df['killer_position_x'].mean())
show_df['kill_position_y'] = show_df['killer_position_y'].fillna(show_df['killer_position_y'].mean())
#欠陥値の削除
show_df = show_df.drop(['killer_position_x','killer_position_y'],axis=1)
print(show_df.isna().all(axis=0))
#銃を数字にて識別できるように変換。
show_df['gan_type'] = show_df['killed_by'].replace({'Punch':0,'Deagle':1,'P1911':2,'R45':3,'R1895':4,'P18C':5,'P92':6,\
                                     'Skorpion':7,'S12K':8,'S1897':9,'S686':10,'DBS':11,'Tommy Gun':12,\
                                     'Vector':13,'Micro UZI':14,'MP5K':15,'PP-19 Bizon':16,'UMP45':17,\
                                     'AUG':18,'G36C':19,'M16A4':20,'M416':21,'M762':22,'Mk47 Mutant':23,\
                                     'QBZ':24,'SCAR-L':25,'AKM':26,'GROZA':27,'M249':28,'DP-28':29,\
                                     'AWM':30,'Win94':31,'Kar98k':32,'M24':33,'mini14':34,'QBU':35,'Mk14':36,'SKS':37,\
                                     'SLR':38,'VSS':39,'Bluezone':40,'Down and Out':41,'Falling':42,'Grenade':43,'Hit by Car':44,'death.WeapSawnoff_C':45,'Mini 14':46,\
                                     'UMP9':47,'Machete':48,'Sickle':49,'Groza':50,'Crossbow':51,'Drown':52,'Uaz':53,'Pan':54,'RedZone':55,'Motorbike':56,'Buggy':57,\
                                     'death.ProjMolotov_DamageField_C':58,'Dacia':59,'Motorbike (SideCar)':60,'death.Buff_FireDOT_C':61,'Crowbar':62,'Van':63,'Pickup Truck':64,\
                                     'Aquarail':65,'Boat':66,'death.ProjMolotov_C':67,'death.PG117_A_01_C':68,'death.RedZoneBomb_C':69,'death.PlayerMale_A_C':70}).astype(int)
two = print(show_df.head(10))
w = sns.pairplot(show_df[0:101],hue='killed_by')
w.savefig('PUPG.png')
plt.show()

PUPG.png

time→キルされた時間?単位秒 最大
killed_by→こちらは下のgan_typeと似ているのですが、hueの引数として指定しています。
gan_type→直訳で銃のタイプですが、死因に起因するものをまとめました。
     
最初はpupgの武器に関する情報をスクレイピングし辞書に渡そうと考えていましたが、欲しい情報がいろいろなタグに格納(a,b,strong)されていて全てをとるように実装したところ300行のコードになってしまったことや他の銃に付属するアイテムまでスクレイピングしてしまったため、今回は諦めて手打ちにしましたがなかなか時間がかかりました。。。

例:車で引かれた。自転車に轢かれた。パンチで殺された。など
kill_position→キルされた座標? 

データを見てわかったこと????

1、timeを見て0から開始されて2000秒(ドン勝者が出るまでの時間)までの間でM416という銃が多くキルされるにあたり使用された

2、1と少し被りますが、そこからM416という銃を使って上位に食い込んでいる人が多いのでは?

3、x座標とy座標の関係からx座標約400000~500000、y座標約300000で多く死亡していることがわかる。

jury
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away