Python 分析谁才是《权力的游戏第八季》真正的C位?
上个礼拜《权力的游戏第八季》放出大结局,最终的结果「布兰」登上了铁王座。
这个结果确实是大家没有想到的。
原本想着如果不是「龙妈」,那么就该是「雪诺」。
怎么就轮到「布兰」了呢。
一个可以随时随地监视别人的人坐上了铁王座,细思极恐…
《权力的游戏》系列从2011年4月17日开播直到最后一集5月19日,一共历时九年,终于落下了帷幕。
也算是陪伴了一些人的青春,看看上图里的「小布兰」和长大后的「布兰」。
时光荏苒,岁月如梭,有那么点点哈利波特的感觉(同样也是好多年)。
这次找到了一些权游的数据集,针对这些数据来做一些分析。
主要有人物信息,字幕信息以及屏幕时间信息。
这些数据由GitHub上的一位大佬整理的。
杀手榜
数据是JSON文件,都是别人已经整理好的。
如下是人物信息,包含姓名、家族、人物图片、兄弟姐妹等。
这里只看谁干掉的人最多,其余大伙可以自行探索。
读取文件后,进行排序,代码如下:
importjson
读取人物信息文件
withopen(“characters.json”,‘r’)asload_f:
load_dict = json.load(load_f)
characters = load_dict[“characters”]
计算人物的杀人数
item = {}
forcharacterincharacters:
if’killed’incharacter.keys():
item[character[‘characterName’]] = len(character[‘killed’])
排序
top15 = sorted(item.items(), key=lambdax: x[1], reverse=True)[:15]
print(top15,’\n\n’)
获取杀手榜前15位,以及是哪位被领盒饭
foriintop15:
forcharacterincharacters:
ifcharacter[‘characterName’] == i[]:
print(i[1], i[], character[‘killed’],’\n\n’)
结果如下:
看一下前四位狠人,「龙妈」「猎狗」「雪诺」「二丫」。
「猎狗」大叔看似人狠话不多,但是他的内心还是很正义的。
其中「二丫」杀了「夜王」,这一点也没毛病。
就是「雪诺」杀「龙妈」就有点那个啥了,上一秒我们还是“朋友”,下一秒就GG了。
发言榜
下面这个数据是每集的台词,概况如下:
通过遍历字典信息,获取人物发言频次。
importjson
读取人物信息文件
withopen(“script-bag-of-words.json”,‘r’, errors=‘ignore’)asload_f:
load_dict = json.load(load_f)
对人物人名进行统计
names = []
foriinload_dict:
forjini[‘text’]:
name = j[‘name’]
ifnamenotinnames:
names.append(name)
print(names)
获取人物说话次数
item = {}
fornameinnames:
num =
foriinload_dict:
forjini[‘text’]:
ifj[‘name’] == name:
num +=1
item[name] = num
排序
top15 = sorted(item.items(), key=lambdax: x[1], reverse=True)[:15]
foriintop15:
print(i[1], i[])
结果如下:
「小恶魔」「雪诺」「龙妈」「瑟曦」「詹姆」排行前五。
「提利昂」曾经说过“大脑需要书才能变得敏锐,就像剑需要磨刀石一样。”
果然作为读书多的,话也就多了。
不然就只能一句句「俺也一样」了,弑君者「詹姆」,「小恶魔」的哥哥。
虽然前期做了不少坏事,不过最后改邪归正,真的实力圈粉。
出场时间
对场景出现时间进行分析,数据概况如下:
对数据进行处理,代码如下:
importjson
fromdatetimeimportdatetime
读取每集的出场信息
withopen(“episodes.json”,‘r’)asload_f:
load_dict = json.load(load_f)
episodes = load_dict[“episodes”]
forepisodeinepisodes:
获取每集的片段信息
forsceneinepisode[“scenes”]:
处理时间数据
start = datetime.strptime(scene[‘sceneStart’],"%H:%M:%S")
end = datetime.strptime(scene[‘sceneEnd’],"%H:%M:%S")
国家
withopen(‘got_1.csv’,‘a+’)asf:
f.write(scene[‘location’] +’,’+ str((end - start).seconds) +’,’+ str(episode[“seasonNum”]) +’,’+ str(episode[“episodeNum”]) +’\n’)
城市
if’subLocation’inscene.keys():
withopen(‘got_2.csv’,‘a+’)asf:
f.write(scene[‘subLocation’] +’,’+ str((end - start).seconds) +’,’+ str(episode[“seasonNum”]) +’,’+ str(episode[“episodeNum”]) +’\n’)
人物
forpeopleinscene[‘characters’]:
withopen(‘got_3.csv’,‘a+’)asf:
f.write(people[‘name’] +’,’+ str((end - start).seconds) +’,’+ str(episode[“seasonNum”]) +’,’+ str(episode[“episodeNum”]) +’\n’)
最后得到三个文件,分别为国家、城市及人物的出现时间。
这里不对每一季进行分析,那样内容太多了,有兴趣的可以自己试试。
importpandasaspd
frompyechartsimportBar
读取数据
df = pd.read_csv(‘got_1.csv’, header=None)
df = pd.read_csv(‘got_2.csv’, header=None)
df = pd.read_csv(‘got_3.csv’, header=None)
汇总名称
names = []
fornameindf[]:
ifnamenotinnames:
names.append(name)
item = {}
fornameinnames:
nums = []
fornumindf[df[] == name][1]:
nums.append(num)
列表求和
s = sum(nums)
时间转换
m, s = divmod(s,60)
h, m = divmod(m,60)
item[name] ="%02d:%02d:%02d"% (h, m, s)
出场时间前15位角色
top15 = sorted(item.items(), key=lambdax: x[1], reverse=True)[:15]
foriintop15:
print(i[1], i[])
先看一下区域的时间分布结果:
第一王领,第二北境。
下面是城市的屏幕时间情况。
第一位「君临城」——七大王国的首都。
第二位「临冬城」——史塔克家族的城堡。
最后是人物出现的屏幕时间:
第一位是国王之手「小恶魔」。
第二位是什么都不懂的「雪诺」。
第三位是白手起家最后又被骗的「龙妈」。
对每季的人物进行统计:
统计每季人物出场时间
foriinrange(1,9):
name_1 = []
nums_1 = []
df1 = df[df[2] == i]
forjintop15:
num_1 = []
forkindf1[df1[] == j[]][1]:
num_1.append(k)
name_1.append(j[])
nums_1.append(sum(num_1))
print(i, name_1, nums_1)
defpeople_scenes():
“”"
每季人物出现时间
“”"
参数数据
attr = [‘提利昂’,‘雪诺’,‘龙妈’,‘三傻’,‘瑟曦’,‘二丫’,‘詹姆’,‘莫尔蒙’,‘戴佛斯’,‘山姆’,‘瓦里斯’,‘席恩’,‘布蕾妮’,‘布兰’,‘猎狗’]
v1 = [4903,5323,4900,3608,4252,3655,2523,3650,1918,2949,3270,3115,2442]
v2 = [5257,2658,3037,2455,3021,3373,1363,1694,1879,1225,1594,2908,1869,1387,1445]
v3 = [4146,2620,2760,2369,2429,2612,2674,2561,1636,2074,1533,1605,2009,1768,1283]
v4 = [5480,3818,2490,3130,4694,2510,4269,1634,1021,2273,1332,1190,1536,1427,2328]
v5 = [4469,5066,3767,2919,3927,2770,1889,2998,1452,2742,876,1635,1163,]
v6 = [2852,5527,2473,3848,2222,2294,2948,827,4101,1268,1424,1626,1749,2107,906]
v7 = [5849,7840,5773,3436,3426,2744,4074,4549,4417,1747,3072,2553,2313,1246,3657]
v8 = [8148,7513,6494,3940,1551,4357,3935,1740,3679,2871,3247,888,3817,3296,1827]
创建条形图
bar = Bar(“权游人物出场时间分布”, title_pos=‘center’, title_top=‘18’, width=800, height=400)
bar.add(“第一季”, attr, v1, is_convert=True, xaxis_min=10, yaxis_label_textsize=12, is_yaxis_boundarygap=True, yaxis_interval=, is_label_show=False, is_legend_show=True, label_pos=‘right’, legend_orient=‘vertical’, legend_pos=‘80%’, legend_top=‘30%’, is_yaxis_inverse=True, is_splitline_show=False, is_stack=True)
bar.add(“第二季”, attr, v2, is_convert=True, xaxis_min=10, yaxis_label_textsize=12, is_yaxis_boundarygap=True, yaxis_interval=, is_label_show=False, is_legend_show=True, label_pos=‘right’, legend_orient=‘vertical’, legend_pos=‘80%’, legend_top=‘30%’, is_yaxis_inverse=True, is_splitline_show=False, is_stack=True)
bar.add(“第三季”, attr, v3, is_convert=True, xaxis_min=10, yaxis_label_textsize=12, is_yaxis_boundarygap=True, yaxis_interval=, is_label_show=False, is_legend_show=True, label_pos=‘right’, legend_orient=‘vertical’, legend_pos=‘80%’, legend_top=‘30%’, is_yaxis_inverse=True, is_splitline_show=False, is_stack=True)
bar.add(“第四季”, attr, v4, is_convert=True, xaxis_min=10, yaxis_label_textsize=12, is_yaxis_boundarygap=True, yaxis_interval=, is_label_show=False, is_legend_show=True, label_pos=‘right’, legend_orient=‘vertical’, legend_pos=‘80%’, legend_top=‘30%’, is_yaxis_inverse=True, is_splitline_show=False, is_stack=True)
bar.add(“第五季”, attr, v5, is_convert=True, xaxis_min=10, yaxis_label_textsize=12, is_yaxis_boundarygap=True, yaxis_interval=, is_label_show=False, is_legend_show=True, label_pos=‘right’, legend_orient=‘vertical’, legend_pos=‘80%’, legend_top=‘30%’, is_yaxis_inverse=True, is_splitline_show=False, is_stack=True)
bar.add(“第六季”, attr, v6, is_convert=True, xaxis_min=10, yaxis_label_textsize=12, is_yaxis_boundarygap=True, yaxis_interval=, is_label_show=False, is_legend_show=True, label_pos=‘right’, legend_orient=‘vertical’, legend_pos=‘80%’, legend_top=‘30%’, is_yaxis_inverse=True, is_splitline_show=False, is_stack=True)
bar.add(“第七季”, attr, v7, is_convert=True, xaxis_min=10, yaxis_label_textsize=12, is_yaxis_boundarygap=True, yaxis_interval=, is_label_show=False, is_legend_show=True, label_pos=‘right’, legend_orient=‘vertical’, legend_pos=‘80%’, legend_top=‘30%’, is_yaxis_inverse=True, is_splitline_show=False, is_stack=True)
bar.add(“第八季”, attr, v8, is_convert=True, xaxis_min=10, yaxis_label_textsize=12, is_yaxis_boundarygap=True, yaxis_interval=, is_label_show=False, is_legend_show=True, label_pos=‘right’, legend_orient=‘vertical’, legend_pos=‘80%’, legend_top=‘30%’, is_yaxis_inverse=True, is_splitline_show=False, is_stack=True)
生成图表
bar.render(“权游人物出场时间分布.html”)
people_scenes()
得到结果如下:
最后来看一下第一季的数据:
defpeople_season(season, mes1, mes2):
“”"
每季统计
“”"
attr = mes1
v1 = mes2
bar =‘bar’+ str(season)
bar = Bar(‘第’+ str(season) +‘季人物出场时间分布’, title_pos=‘center’, title_top=‘18’, width=800, height=400)
bar.add("", attr, v1, is_convert=True, xaxis_min=10, yaxis_label_textsize=8, is_yaxis_boundarygap=True, yaxis_interval=, is_label_show=True, is_legend_show=False, label_pos=‘right’, is_yaxis_inverse=True, is_splitline_show=False)
bar.render(‘第’+ str(season) +‘季人物出场时间分布.html’)
遍历每一季
forseasoninrange(1,9):
df2 = df[df[2] == season]
foriindf2[]:
ifinotinnames:
names.append(i)
item = {}
对人物出现时间进行统计
forjinnames:
num_3 = []
forkindf2[df2[] == j][1]:
num_3.append(k)
item[j] = sum(num_3)
排序
top15 = sorted(item.items(), key=lambdax: x[1], reverse=True)[:15]
print(top15)
name_2 = []
num_2 = []
对前15位进行数据汇总
forpintop15:
name_2.append(p[])
num_2.append(p[1])
print(season, name_2, num_2)
people_season(season, name_2, num_2)
结果如下:
有一半都领盒饭了,当然也有坚持到最后的。坚持下来的,狼家的居多。
Python 分析谁才是《权力的游戏第八季》真正的C位?相关推荐
- Python爬取《权力的游戏第八季》演员数据并分析
Python爬取<权力的游戏第八季>演员数据并分析 数据爬取 一.浏览待爬取网页 二.爬取百度百科中<权力的游戏第八季度>演员表获得每个演员的链接并保存入文件 三.爬取演员详细 ...
- 权力的游戏第八季在线观看
导演: 米格尔·萨普什尼克 / 大卫·努特尔 / 戴维·贝尼奥夫 / D·B·威斯 编剧: 戴维·贝尼奥夫 / D·B·威斯 / 乔治·马丁 主演: 艾米莉亚·克拉克 / 基特·哈灵顿 / 彼特·丁拉 ...
- Python 分析谁才是「权利的游戏」真正的主角?
作者 | 小F 责编 | 伍杏玲 本文经授权转载自法纳斯特(ID:walker398) 上个礼拜权游大结局,最终的结果「布兰」登上了铁王座. 这个结果确实是大家没有想到的. 原本想着如果不是「龙妈」, ...
- 权力的游戏 第八季 最后一集下载
https://www.wandouys.com/video/play/59872-2-11.html 暂时没写多线程版 代码 import requests import re import mul ...
- Python分析《权力的游戏》最终季...... | 附源码
译者 | 刘畅 编辑 | 琥珀 出品 | AI科技大本营(id:rgznai100) [导读]<权力的游戏>最终季已于近日开播,对于全世界翘首以待的粉丝们来说,其最大的魅力就在于" ...
- Python分析101位《创造营2020》小姐姐,谁才是你心中的颜值担当?
来源 | CDA 数据分析师 责编 | Carol Show me data,用数据说话. 今天我们聊一聊<创造营2020>各个小姐姐,点击下方视频,先睹为快: 最近可以追的综艺真是太多 ...
- Python分析抖音用户行为数据,看看发什么样的视频才会爆!
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python分析抖音用户行为数据视频讲解地址 https://www.bilibili.co ...
- 《权力的游戏》最终季上线!谁是你最喜爱的演员?这里有一份Python教程 | 附源码...
译者 | 刘畅 编辑 | 琥珀 出品 | AI科技大本营(id:rgznai100) <权力的游戏>最终季已于近日开播,对于全世界翘首以待的粉丝们来说,其最大的魅力就在于"无法预 ...
- 用Python分析《红楼梦》:见证了贾府的兴衰,你是否还能“笑道”世事无常
没读过<红楼梦>也能知道前后四十回是不是一个作者写的?很久以前,数据侠黎晨,用机器学习的算法分析了<红楼梦>,认为后四十回和前八十回内容上有明显差距.不过,数据侠楼宇却不这么认 ...
最新文章
- 微信公众号自定义菜单跳转小程序
- win7 安装 IIS
- 一段超级好的..漂浮广告代码..精一下..
- bat脚本:Java一键编译(Javac java)
- 互联网晚报 | 8月22日 星期日 | 抖音回应腾讯《扫黑风暴》相关投诉;比亚迪半导体被中止上市审核;三星正式推出UPC技术...
- Android访问assets本地Json文件
- 计算机科任学 排名,2018软科中国最好学科排名正式发布
- 暴雪正在等待另一项_战网正在等待另一项安装或更新_魔兽世界 升6.0 战网更新一直卡在正在等待另一项安装或更新 已尝试离线 还是各种等待 求大神破...
- win7和win10哪个好用
- root 红米note5_怎么开启红米Note 5的ROOT权限
- Unity开发手游常用适配分辨率
- 多校HDU.5724 Chess
- Intel SGX入门教程(二)在windows环境搭建intel sgx环境并运行helloworld程序
- Business Cycle 【UVALive - 7501】【二分答案+思维处理】
- css3探测光圈_CSS3按钮鼠标悬浮实现光圈效果
- 前端实现pdf在线预览
- 魏晋南北朝:北国飘雪(一)
- 最简单的基于DirectShow的示例:视频播放器
- 计算机应用技术辅助设计方向课程,《AutoCAD计算机辅助设计》课程标准.doc
- 配置RHCS--ISCSI/SCSI实现磁盘文件共享
热门文章
- DEVICE_ATTR_RW的用法
- MOTO被裁团队被行业巨头争抢的背后
- 中国软件杯--解密陌生人(1)
- 一搜Yisou按网友投票排序功能
- 太强了!GitHub开源了1000本技术类的电子书,直接刷爆朋友圈!
- Python None 值
- 决定AMD命运的选择题:三大战略市场已定
- JavaScript(12) jQuery选择器(基本选择器、层级选择器、伪类选择器、属性选择器)
- Thinkphp免费试用平台试客系统源码
- Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js