本身是个美剧迷,其中权力的游戏是我最爱的美剧之一,所以我通过kaggle下载了数据集并进行分析。数据名称解释如下:

name: 战争的名称,字符变量。

year: 战争发生的年份,数值变量。

battle_number: 本数据中的unique id,对应每一场独立的战役,数值变量。

attacker_king: 攻击方的国王,"/"表示了国王的更换。例如:"Joffrey/Tommen Baratheon"意味着Tomen Baratheon继承了Joffrey的王位,分类变量。

defender_king: 防守方的国王,分类变量。

attacker_1: 攻击方将领,字符变量。

attacker_2: 攻击方将领,字符变量。

attacker_3: 攻击方将领,字符变量。

attacker_4: 攻击方将领,字符变量。

defender_1: 防守方将领,字符变量。

defender_2: 防守方将领,字符变量。

defender_3: 防守方将领,字符变量。

defender_4: 防守方将领,字符变量。

attacker_outcome: 从攻击方角度来看的战争结果,分别有:win, loss, draw,分类变量。

battle_type: 战争的类别。pitched_battle: 双方军队在一个地点相遇并战斗,这也是最基本的战争类别;ambush: 以隐身或诡计为主要攻击手段的战争;siege: 阵地战;razing: 对未设防位置的攻击。分类变量。

major_death: 是否有重要人物的死亡,二进制变量。

major_capture: 是否有重要人物的被捕,二进制变量。

attacker_size: 攻击方力量的大小,并未对骑兵、步兵等士兵种类有所区分,数值变量。

defender_size: 防守方力量的大小,并未对骑兵、步兵等士兵种类有所区分,数值变量。

attacker_commander: 攻击方的主要指挥官。指挥官的名字中并没有包含头衔,不同的指挥官名字用逗号隔开,字符变量。

defender_commander: 防守方的主要指挥官。指挥官的名字中并没有包含头衔,不同的指挥官名字用逗号隔开,字符变量。

summer: 战争是否发生于夏天,二进制变量。

location: 战争发生的地点,字符变量。

region: 战争发生的地域,包括:Beyond the Wall, The North, The Iron Islands, The Riverlands, The Vale of Arryn, The Westerlands, The Crownlands, The Reach, The Stormlands, Dorne,分类变量。

note: 注释,字符变量。

首先我们先提出问题:

1.每个国王攻击方式

2.每年死亡或被俘的重要人物

3.每个区域死亡或被俘的重要人物人数

4.战争结果是否与兵力多少有关系

1 导入包

# TO DO: load pacakges

importpandas as pdimportnumpy as npimportmatplotlib.pyplot as pltimportseaborn as sns%matplotlib inline

1 收集数据

#TO DO: load the dataset

df = pd.read_csv('battles.csv')

df.columns

1.1 查看数据类型

df.info()

df.describe()

收集和查看完数据,我们要对数据进行整理了

二 数据整理

2.1 首先备份数据

# 备份

df1 = df.copy()

通过观察数据我们发现以下错误:

质量错误:

1.defender3 and defender4 都是 NaN,并且他们的类型为float。

2.部分数据丢失,解决丢失问题。

3. year与battle_number 类型错误

#去除'attacker_2', 'attacker_3', 'attacker_4', 'defender_2', 'defender_3', 'defender_4', 'note'列

data_game_clean = data_game_clean.drop(['attacker_2', 'attacker_3', 'attacker_4', 'defender_2', 'defender_3', 'defender_4', 'note'], axis=1)

data_game_clean['attacker_king'] = data_game_clean['attacker_king'].astype('category')

data_game_clean['defender_king'] = data_game_clean['defender_king'].astype('category')

data_game_clean['battle_type'] = data_game_clean['battle_type'].astype('category')

data_game_clean['region'] = data_game_clean['region'].astype('category')

#year与battle_number 类型错误,需要把int转换成object

data_game_clean['year'] = data_game_clean['year'].astype('object')

data_game_clean['battle_number'] = data_game_clean['battle_number'].astype('object')

#检查是否有重复值

sum(data_game_clean.duplicated())

查看结果

data_game_clean.attacker_outcome.head()

#检查是否有重复值

sum(df1.duplicated())

数据探索分析

每个国王攻击次数

data_game_clean['attacker_king'].value_counts().plot(kind='barh',rot=45)

plt.show()

从图中看出第一的是Joffrey/Tommen Baratheon作为进攻方进行了14场战斗,主要原因是各个领主不承认Joffrey的合法地位,因为Joffrey是瑟曦和他弟弟的孩子,身体中淌着兰尼斯特家族的血,为了让各领主承认其合法地位,所以进行了大量战斗。第二个是Robb Stark,因为其父亲被害开始复仇之战。

每个国王攻击方式

sns.set(style="darkgrid")

sns.countplot(y='battle_type', hue='attacker_king', data =df1)

plt.legend(bbox_to_anchor=(1.05, 1))

plt.show()

这场战斗分为四种类型,分别为遭遇战、伏击战、围城战、razing(不懂这个意思),可以看出Joffrey/Tommen Baratheon的14场战争中有6场遭遇战、3场伏击战和5场围城战,而史塔克是10场战争中有5场伏击战和3场遭遇战和2场围城战,能够看出Joffrey/Tommen Baratheon更喜欢遭遇战,而史塔克更喜欢伏击战。还能够看出只有Stannis Baratheon进行过razing。

每个区域死亡或被俘的重要人物人数

#去除major_death major_capture的空值

df0 = data_game_clean.dropna(subset = ['major_death', 'major_capture'])#给每个区域分组并计算major_death major_capture的和

data = df0.groupby('region').sum()[['major_death', 'major_capture']]

data

#将region计数,并转化为表格与data合并

p = pd.concat([data, df0.region.value_counts().to_frame()], axis = 1)

#排序

p = p.sort_values('region', ascending = False)

#作图

p.plot.barh()

plt.xlabel('count')

plt.title('attacker_outcome_size')

可以看出在The Riverlands发生的战争最多,死亡和被俘的人物也最多,而血色婚礼也发生在此,史塔克家族在这里伤亡惨重。北境虽然发生的战争多,但死亡的重要人物少。

战争结果是否与兵力多少有关系

#去除'attacker_size', 'defender_size','attacker_outcome'3列空值

df2 = data_game_clean.dropna(subset = ['attacker_size', 'defender_size','attacker_outcome'])#计算进攻与防御的兵力差值

df3 = df2.attacker_size -df2.defender_size#将其转化为dataframe

df3 = df3.to_frame(name='size')#将这一列合并至df1表格中

result = pd.concat([df2,df3],join='outer',axis=1)

result.info()

sns.lmplot(x = 'attacker_size', y = 'defender_size', hue='attacker_outcome', fit_reg=False,data = data_game)

战争结果是否与兵力多少没有关系,只有2场战争是在兵力取得优势的情况下胜利的,其他都是以少胜多,因为战争有很多不可预测性,不是人多就能打赢战争的。

attackers = df_data_game_clean.attacker_king.map(lambda x:str(x).split(","))

empty_array=[]for i inattackers:

empty_array= np.append(empty_array, i)

from wordcloud importWordCloud

cloud= WordCloud(width=1440, height=1080, relative_scaling=0.5, stopwords=['battle']).generate(" ".join(empty_array))

plt.figure(figsize=(20, 15))

plt.imshow(cloud)

plt.axis('off')

plt.show()

可以看到offrey/Tommen Baratheon被提及的更多,而Euron Greyjoy被提及的最少。

得出结论

结论:

1.每个国王攻击方式:可以看出Joffrey/Tommen Baratheon的14场战争中有6场遭遇战、3场伏击战和5场围城战,而史塔克是10场战争中有5场伏击战和3场遭遇战和2场围城战,能够看出Joffrey/Tommen Baratheon更喜欢遭遇战,而史塔克更喜欢伏击战。还能够看出只有Stannis Baratheon进行过razing。

2.每年死亡或被俘的重要人物:299年发生的战争被俘和死亡的重要人物最多,可能和发生的战争次数有关,因为299年发生的战争次数最多。

3.每个区域死亡或被俘的重要人物人数:可以看出在The Riverlands发生的战争最多,死亡和被俘的人物也最多,而血色婚礼也发生在此,史塔克家族在这里伤亡惨重。北境虽然发生的战争多,但死亡的重要人物少。

4.战争结果是否与兵力多少有关系:战争结果是否与兵力多少没有关系,只有2场战争是在兵力取得优势的情况下胜利的,其他都是以少胜多,因为战争有很多不可预测性,不是人多就能打赢战争的。

5.可以看到offrey/Tommen Baratheon被提及的更多,而Euron Greyjoy被提及的最少。

python 判断数据是什么类型的游戏_利用python分析权力的游戏五王之战数据相关推荐

  1. 利用python分析权力的游戏五王之战数据

    本身是个美剧迷,其中权力的游戏是我最爱的美剧之一,所以我通过kaggle下载了数据集并进行分析.数据名称解释如下: name: 战争的名称,字符变量. year: 战争发生的年份,数值变量. batt ...

  2. python判断数组中是否存在重复元素_利用python查看数组中的所有元素是否相同

    不知道大家有没有过这种经历,就是想要判断两个数组运算后得到的新数组中的各个元素值是否相同.这里给出一种使用np.unique()的方法,代码如下:cbc免费资源网 import numpy as np ...

  3. python抽奖游戏_利用Python写一个抽奖程序,解密游戏内抽奖的秘密

    原标题:利用Python写一个抽奖程序,解密游戏内抽奖的秘密 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客 ...

  4. python找列表中相邻数的个数_利用python求相邻数的方法示例

    前言 本文主要给大家介绍了关于利用python求相邻数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的 ...

  5. python爬取英雄联盟所有皮肤价格表_利用Python协程来爬取LOL所有英雄的皮肤高清图片...

    最近有一朋友要LOL的数据进行数据分析,叫我帮他抓一下数据.突发奇想,顺便把英雄的所有皮肤下载到本地好了. PS: 安装了LOL的伙伴图片直接在LOL文件夹里面,可以百度寻找.此贴仅分享下技术思路以及 ...

  6. python输入数字是什么类型的游戏_“数字炸弹”——一个练习Python基础知识的小游戏...

    数字"炸弹" 数字炸弹小游戏,平时可以多个人一块玩.游戏规则也很简单:从0~100之间选一个数字,作为"炸弹".每人轮流猜,数字的范围不断缩小,直到有人&quo ...

  7. python中item是什么类型的游戏_文本冒险游戏(Python)中的Item类

    我正在用python制作一个文本冒险游戏.我有大部分的基本项目设置,如链接位置和保存功能.(我在设置save功能时有点困难,所以如果有更好的方法,请告诉我).在 现在我想做些东西.具体地说,我希望项目 ...

  8. python json数据格式数组内元素递增赋值_利用Python实现JSON格式数据的编码与解码操作...

    导读 JSON (全称:JavaScript Object Notation )是一种轻量级的数据交换格式,所谓的轻量级,是与 XML 数据结构相比而言的,在描述相同的数据下,JSON 所需的字符比X ...

  9. python连连看小游戏_利用Python制作一个连连看小游戏,边学边玩!

    导语 今天我们将制作一个连连看小游戏,让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 环境搭建 安装Python并添加到环 ...

最新文章

  1. CMU赵越 关于异常检测的分享!
  2. oracle断电 ora01110,oracle在做备份的时候断电
  3. 异构数据库转换工具的结构说明
  4. ubuntu 使用FFTW快速计算离散傅里叶变换
  5. python中字符串中文乱码_Python字符串开头的bquot;、uquot;、rquot;与中文乱码
  6. 收不到Win10正式版预订通知?一个批处理搞定
  7. 深度学习(四)——RNN, LSTM, 神经元激活函数进阶
  8. Springboot 项目中过滤器的使用
  9. 关于Background-size的几个参数区别
  10. (转自ztp800201) Android - 自定义标题栏(在标题栏中增加按钮和文本居中)
  11. 如何用python一个字一个字的输出汉字
  12. android progressdialog 倒计时,自定义progressdialog——带倒计时的progressbar效果
  13. 管理感悟:能表格不文字
  14. 【企鹅电竞直播源】浏览器抓取真实直播源地址(纯前端JS PHP解析源码)
  15. 实时监控input输入框,获取输入的内容,去除拼音
  16. 计算机网络原理(谢希仁第八版)第五章课后习题答案
  17. 20162327WJH第三次实验——查找与排序2
  18. 在网页右下角添加一个卡通动漫人物
  19. 系统学习机器学习之组合多分类器
  20. Easy Algorithms系列——详解递归与分治

热门文章

  1. 2018年举办区块链峰会_2015年开放硬件峰会开放接受注册,征求建议
  2. 多维数组(2019.10.25)
  3. Vijos 1253 旅行家的预算
  4. NLP文本信息向量化之特征提取
  5. android 四方向摇杆源码,手游摇杆(一)最简单的四方向摇杆
  6. PG数据库源码-SysCache部分匹配机制
  7. 免费抽奖 | 《阿巴豆》探索未来系列盲盒数字版权作品全网首发!
  8. Latex整体表格缩放
  9. GBase 8a 虚拟集群
  10. [篇五章四]-关于 Windows 10 没有桌面图标如何调出来