冰与火之歌-五王之战(优达数据分析进阶项目)
五王之战分析 - 冰与火之歌
简介
五王之战(War of the Five Kings)是著名严肃奇幻小说《冰与火之歌》中的著名内战。这是一场规模空前、波及七大王国的内乱。顾名思义,前后共有五人在战争中称王:乔佛里、史坦尼斯、蓝礼均声称自己是铁王座的合法继承人。除此之外,罗柏·史塔克被北境众封臣推选为北境之王,巴隆·葛雷乔伊亦再度掀起独立大旗,欲摆脱铁王座的统治,自称为铁群岛之王。
本数据集(battles.csv)包含了五王之战期间的战争,它是所有战斗的大集合。该数据是Kaggle中Game of Thrones的一部分。
数据中的变量含义解释:
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: 注释,字符变量。项目完成指南
本项目中的数据分析流程已经给出,但代码将完全由你自己进行书写,如果你无法完成本项目,说明你目前的能力并不足以完成 数据分析(进阶)纳米学位,建议先进行 数据分析(入门)纳米学位的学习,掌握进阶课程的先修知识。
对于数据分析过程的记录也是数据分析报告的一个重要部分,你可以自己在需要的位置插入Markdown cell,记录你在数据分析中的关键步骤和推理过程。比如:数据有什么样的特点,统计数据的含义是什么,你从可视化中可以得出什么结论,下一步分析是什么,为什么执行这种分析。如果你无法做到这一点,你也无法通过本项目。
小贴士: 像这样的引用部分旨在为学员提供实用指导,帮助学员了解并使用 Jupyter notebook
提出问题
在此项目中,你将以一名数据分析师的身份执行数据的探索性分析。你将了解数据分析过程的基本流程。在你分析数据之前,请先思考几个你需要理解的关于这些战斗的问题,例如,哪一个区域发生了最多的战争?哪一个国王获得了最多的胜利?战争的胜利与否受那些关键因素的影响?
问题:请写下你感兴趣的问题,请确保这些问题能够由现有的数据进行回答。
(为了确保学习的效果,请确保你的数据分析报告中能够包含2幅可视化和1个相关性分析。)
答案:1.那个区域发生的战争最多;
2.哪个国王胜利的次数最多;
3.战争的胜利与否受哪些关键因素的影响。
在提出了问题之后,我们将开始导入数据,并对数据进行探索性分析,来回答上面提出的问题。
小贴士: 双击上框,文本就会发生变化,所有格式都会被清除,以便你编辑该文本块。该文本块是用 Markdown编写的,该语言使用纯文本语法,能用页眉、链接、斜体等来规范文本格式。在纳米学位课程中,你也会用到 Markdown。编辑后,可使用 Shift + Enter 或 Shift + Return 运行上该框,使其呈现出编辑好的文本格式。
数据评估和清理
小贴士: 运行代码框的方法与编辑上方的 Markdown 框的格式类似,你只需点击代码框,按下键盘快捷键 Shift + Enter 或 Shift + Return ,或者你也可先选择代码框,然后点击工具栏的 运行 按钮来运行代码。运行代码框时,相应单元左侧的信息会出现星号,即 In [*]:,若代码执行完毕,星号则会变为某个数字,如 In [1]。如果代码运行后有输出结果,输出将会以 Out [1]: 的形式出现,其中的数字将与 “In” 中的数字相对应。
# TO DO: load pacakges import pandas as pd import numpy as np % matplotlib inline # TO DO: load the dataset df = pd.read_csv("battles.csv") # 将折叠的数据展开 pd.set_option('display.max_columns',None) # 展开数据前五行进行观察 df.head()| Battle of the Golden Tooth | 298 | 1 | Joffrey/Tommen Baratheon | Robb Stark | Lannister | NaN | NaN | NaN | Tully | NaN | NaN | NaN | win | pitched battle | 1.0 | 0.0 | 15000.0 | 4000.0 | Jaime Lannister | Clement Piper, Vance | 1.0 | Golden Tooth | The Westerlands | NaN |
| Battle at the Mummer's Ford | 298 | 2 | Joffrey/Tommen Baratheon | Robb Stark | Lannister | NaN | NaN | NaN | Baratheon | NaN | NaN | NaN | win | ambush | 1.0 | 0.0 | NaN | 120.0 | Gregor Clegane | Beric Dondarrion | 1.0 | Mummer's Ford | The Riverlands | NaN |
| Battle of Riverrun | 298 | 3 | Joffrey/Tommen Baratheon | Robb Stark | Lannister | NaN | NaN | NaN | Tully | NaN | NaN | NaN | win | pitched battle | 0.0 | 1.0 | 15000.0 | 10000.0 | Jaime Lannister, Andros Brax | Edmure Tully, Tytos Blackwood | 1.0 | Riverrun | The Riverlands | NaN |
| Battle of the Green Fork | 298 | 4 | Robb Stark | Joffrey/Tommen Baratheon | Stark | NaN | NaN | NaN | Lannister | NaN | NaN | NaN | loss | pitched battle | 1.0 | 1.0 | 18000.0 | 20000.0 | Roose Bolton, Wylis Manderly, Medger Cerwyn, H... | Tywin Lannister, Gregor Clegane, Kevan Lannist... | 1.0 | Green Fork | The Riverlands | NaN |
| Battle of the Whispering Wood | 298 | 5 | Robb Stark | Joffrey/Tommen Baratheon | Stark | Tully | NaN | NaN | Lannister | NaN | NaN | NaN | win | ambush | 1.0 | 1.0 | 1875.0 | 6000.0 | Robb Stark, Brynden Tully | Jaime Lannister | 1.0 | Whispering Wood | The Riverlands | NaN |
数据探索分析
# In exploratory data analysis, please make sure of using statistics and visualizations ## 统计各个区域的战争次数 df["region"].value_counts().plot(kind = "bar",colors = ["r","gray","gray","gray","gray","gray","gray"]) C:\Users\15004\Anaconda3\lib\site-packages\pandas\plotting\_core.py:194: UserWarning: 'colors' is being deprecated. Please use 'color'instead of 'colors'warnings.warn(("'colors' is being deprecated. Please use 'color'"<matplotlib.axes._subplots.AxesSubplot at 0x1dae9de3b00>在数据的探索性分析中,请确保你对数据分析中的关键步骤和推理过程进行了记录。你可以自己插入code cell和markdown cell来组织你的报告。
#for i, v in enumerate(df.columns):# print(i, v) ## 为了节省运行时间,我们选择“attacker_king”,"attacker_outcome"与"battle_type"字段进行统计 df[["attacker_king","attacker_outcome","battle_type"]]| Joffrey/Tommen Baratheon | win | pitched battle |
| Joffrey/Tommen Baratheon | win | ambush |
| Joffrey/Tommen Baratheon | win | pitched battle |
| Robb Stark | loss | pitched battle |
| Robb Stark | win | ambush |
| Robb Stark | win | ambush |
| Joffrey/Tommen Baratheon | win | pitched battle |
| Balon/Euron Greyjoy | win | pitched battle |
| Balon/Euron Greyjoy | win | siege |
| Balon/Euron Greyjoy | win | ambush |
| Robb Stark | win | pitched battle |
| Balon/Euron Greyjoy | win | ambush |
| Balon/Euron Greyjoy | win | siege |
| Joffrey/Tommen Baratheon | win | ambush |
| Robb Stark | win | ambush |
| Stannis Baratheon | win | siege |
| Joffrey/Tommen Baratheon | loss | pitched battle |
| Robb Stark | win | ambush |
| Robb Stark | win | ambush |
| Stannis Baratheon | loss | pitched battle |
| Robb Stark | win | siege |
| Robb Stark | loss | pitched battle |
| NaN | win | pitched battle |
| Joffrey/Tommen Baratheon | win | pitched battle |
| Joffrey/Tommen Baratheon | win | pitched battle |
| Joffrey/Tommen Baratheon | win | ambush |
| Robb Stark | win | siege |
| Stannis Baratheon | loss | siege |
| Joffrey/Tommen Baratheon | win | siege |
| NaN | win | razing |
| Stannis Baratheon | win | pitched battle |
| Balon/Euron Greyjoy | win | pitched battle |
| Balon/Euron Greyjoy | win | razing |
| Joffrey/Tommen Baratheon | win | siege |
| Joffrey/Tommen Baratheon | win | siege |
| Joffrey/Tommen Baratheon | win | siege |
| Joffrey/Tommen Baratheon | win | siege |
| Stannis Baratheon | NaN | NaN |
得出结论
问题:上面的分析能够回答你提出的问题?通过这些分析你能够得出哪些结论?
答案:1.从数据探索第一阶段得出的数据,可以看出,在The Riverlands地区发生的战争次数最多。 2.从攻击方的角度来讲,Joffrey/Tommen Baratheon(Tomen Baratheon继承了Joffrey的王位)获胜次数最多。 3.从战争类型来看,采用ambusy与siege类型的战役获胜次数要多于其他两种。从现有数据量来看的话,在战争中运用这两种类型获胜的可能行要更大。是否采用这两种类型,与能否获胜有一定的相关性。
反思
问题:在你的分析和总结过程中是否存在逻辑严谨。是否有改进的空间? 你可以从下面的一些角度进行思考:
答案:1.现有数据量不是很完整。 2.由于统计需要,对attacker_king列中的空值进行了2行删除操作,对结论的影响很小。 3.在思考有战争获胜有关的因素时,如果能再加一点天气的因素在里边就更完美了。 4.没有混淆相关性与因果性,在未通过统计学验证及机器学习的支持下,只能初步得出:是否采用ambusy与siege类型,与能否获胜有一定的相关性。
恭喜你完成了此项目!这只是数据分析过程的一个样本:从生成问题、整理数据、探索数据到得出结论。在数据分析(进阶)纳米学位中,你将会学到更多高级的数据分析方法和技术,如果你感兴趣的话,我们鼓励你继续学习后续的课程,掌握更多的数据分析的高级技能!
若想与他人分享我们的分析结果,除了向他们提供 jupyter Notebook (.ipynb) 文件的副本外,我们还可以将 Notebook 输出导出为一种甚至那些未安装 Python 的人都能打开的形式。从左上方的“文件”菜单,前往“下载为”子菜单。然后你可以选择一个可以更普遍查看的格式,例如 HTML (.html) 。你可能需要额外软件包或软件来执行这些导出。
总结
以上是生活随笔为你收集整理的冰与火之歌-五王之战(优达数据分析进阶项目)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 冰与火之歌
- 下一篇: Poly-encoder