一:简介
《权力的游戏》(Game of Thrones),是美国HBO电视网制作推出的一部中世纪史诗奇幻题材的电视剧。该剧改编自美国作家乔治·R·R·马丁的奇幻小说《冰与火之歌》系列。该剧成功塑造成千上万形象饱满的人物角色、怪诞独特充满想象的风土人情,其空间之完整、细节之丰富、叙事之恣意让人感叹!现在让我们用数据分析的方式看一看这个残酷的世界!!(本文所使用的数据集来自Kaggle网站,使用Python进行分析,当然你完全可以用R!!)
二:数据集介绍
该数据集包含了三个CSV文件,分别是:battles.csv,character-deaths.csv和character-predictions.csv。现分别介绍如下:
battles.csv:《权利的游戏》中所有的战争。
character-deaths.csv:人物死亡数据集。
character-predictions.csv:人物命运预测数据集。
在每一个CSV数据里面都包含了大量的变量,读懂这些变量名所代表的含义非常有必要。例如:battles.csv中的year变量代表战争发生的时间,battle_type代表战役类型,有伏击战,围攻战,突袭战等。
三:导入所需模块并加载数据集
import numpy as npimport pandas as pdimport seaborn as snsimport matplotlib as mplimport matplotlib.pyplot as pltfrom collections import Counterimport matplotlib.patches as mpatchessns.set_style("white")
设置绘图风格(本人电脑不能在图中添加中文字符):
plt.rcParams["axes.labelsize"] = 16.plt.rcParams["xtick.labelsize"] = 14.plt.rcParams["ytick.labelsize"] = 14.plt.rcParams["legend.fontsize"] = 12.plt.rcParams["figure.figsize"] = [15., 6.]
导入数据集:
battles = pd.read_csv('C:/Users/WaJueJiPrince/Desktop/Throne/game-of-thrones/battles.csv')character_deaths = pd.read_csv('C:/Users/WaJueJiPrince/Desktop/Throne/game-of-thrones/character-deaths.csv')character_predictions = pd.read_csv('C:/Users/WaJueJiPrince/Desktop/Throne/game-of-thrones/character-predictions.csv')
四:数据探索性分析
那个区域拥有最多的战争
battles['region'].value_counts().plot(kind='barh',rot=45)plt.show()
战争类型的比较
battles['battle_type'].value_counts().plot(kind='bar',rot=0)plt.show()
可以看出对阵战最多,攻城战次之
那位国王好战呢?!!
battles['attacker_king'].value_counts().plot(kind='bar',rot=0)plt.show()
那位国王被攻击最多呢?!
battles['defender_king'].value_counts().plot(kind='barh',rot=0)plt.show()
主要人物的死亡与被俘事件/根据年分组
p = battles.groupby('year').sum(axis=0)[["major_death", "major_capture"]].plot.bar(rot = 0)p.set(xlabel = "year", ylabel = "No. of Death/Capture Events", ylim = (0, 9)), p.legend(["Major Deaths", "Major Captures"])plt.show()
军队实力对于战争结果的影响
data = battles[["attacker_size", "defender_size", "attacker_outcome"]].dropna(axis=0,how='any')colors = ['red' if x == "win" else "blue" for x in data.attacker_outcome.values]data.plot.scatter("attacker_size", "defender_size", c = colors, s = 100, lw = 2.)plt.show()
蓝色代表进攻方失败,图中右下角以少胜多,不知道这场战役是怎么打的??
不同国王的军队里面有多少指挥官,红色线代表均值,五角星代表异常值
meanlineprops = dict(linestyle='--', linewidth=2.5, color='red')flierprops = dict(marker="*", markerfacecolor='red', markersize=12,linestyle='none')p = sns.boxplot("attacker_king", "att_comm_count", data = battles,showmeans=True, meanline= True,linewidth=2,meanprops=meanlineprops,flierprops=flierprops)p.set(xlabel = "No. of Attacker Commanders", ylabel = "Attacker King")plt.show()
相关性可视化
主要可视化的是character-deaths.csv数据集和character-predictions.csv数据集。
#改变列名为name->Name,方便后面链接两张数据框character_predictions.rename(columns={'name':'Name'},inplace=True)#通过name链接两个表twoDF = pd.merge(character_deaths,character_predictions,on='Name')#修复明显的离群值twoDF.age[186] = 20
去除非数值的行:
numb = twoDF[twoDF.columns[twoDF.dtypes!='O']];#填充缺失值numb = numb.fillna(-100)
可视化:
f, ax = plt.subplots(figsize=(25, 24))plt.title('Pearson Correlation of The Game of Thrones')sns.heatmap(numb.astype(float).corr(),annot=True)plt.show()
(如果图片看不清,请在新标签中打开!!)
从相关性图中可以看到一些符合“感觉”的关系,比如《权利的游戏》与《冰与火之歌》第一册的相关系数达0.86。
五:结尾
本文旨在抛砖引玉!因为我从未看过《权力的游戏》!(严格来说看过开头大概20分钟吧!)。在分析的时候“深感无力”,因为数据分析本来就是建立在对业务或者项目熟悉的基础上!所以本文的分析严重欠缺美剧知识!分析不足之处还请见谅!!!
为你准备的Python学习交流群: