要说最近有什么比较火的话题,自然是热播剧《延禧攻略》了,我在吃饭的时候也经常蹭老婆的pad看一两集。
如果不是以比较苛刻的眼光去看,这部剧确实有相当可圈点之处,情节紧凑不拖沓
虽然有些角色比较智障,但总体来说形象还是比较丰满的,演员也很敬业,是一部不错的霸道总裁片。
福利:私信回复【02】可获取爬虫视频教程
然后看的时候我就在想……
- 这部戏里哪个角色的戏份是最多的呢?
- 戏份多的是不是人气就一定很高呢?
刚好python里有学过关于词频统计的知识
稍微魔改一下,看能不能弄出想要的结果。
需求:统计《延禧攻略》中各角色的戏份
如何定义“戏份”这个概念?我们知道,一个角色的出场次数直接决定了该角色的曝光度,在其他角色的互动中出现在对话里也能间接增加其存在感。所以如果能找到相关文本,就有可能实现想法。
可以选择的统计对象有剧本和小说两种。理想状态下可能剧本更合适一些,不过我暂时弄不到完整的剧本,所以就用原著小说代替了。快速浏览小说后发现,虽然在部分细节和对话上与电视剧有所差异,但是人物总体出场情况及情节走向还是一致的,可以作为研究对象。至于我是从哪里搞到的小说全集这并不重要。
(你们知道作为一个直男,我在检查文本的时候是什么样的心情吗)
那么废话不多说,直接开始想解决方案。根据我有限的知识,这个问题应当按照以下步骤来分析:
- 以合适的格式读入文本
- 用jieba库进行分词处理(全文没有英文)
- 建立字典,将每一个词(键)与其出现次数(值)进行映射
- 按照某个顺序排列键值对
- 打印输出
结合之前学过的一个统计实例
很快代码就出来了:
然后打印输出,得到的结果是:
emmm...多出来很多奇怪的东西,这里和其他词频统计不同
我们要的只有角色名,什么“宫女”“知道”之类的词汇是不应该出现的。
这里就有必要对非必要词汇进行排除了。
基本的思路是反复运行程序,再手动挑出需要被排除的词语录入到一个excludes列表里
然后使用for in函数把字典里的值删去。
然后我进行了巨大的工作量……
建立了这么一个词库:
然后在后面多加一段这个:
保存,跑一遍,得到这个:
好像哪里不对。
“魏璎珞”和“璎珞”分明是同一个人,“弘历”和“皇上”同理也没有区别。
这部剧里各角色在不同时期、不同身份下称为均有所不同
也就是说有必要了解所有角色可能的称谓,并将同角色称谓进行归纳。
于是我机智地点开了网页,
找到了《延禧攻略》全角色简介:
同时:
为了让python学习这些角色名,另新建一txt文档把角色名及别名全部输入进去,用jieba进行读取;
对代码动手,把角色不同称谓进行映射:
运行程序看看:
这样就顺眼多了。然而我还是有点不满意:
虽然建立了excludes列表,但通过人力也仅仅能排除几十个干扰项,顶多能弄出前30的排名,再多就非常累了。
这显然不符合我的预期,于是我瞧了excludes半天,想出一个解决方案:
真是不容易,连出场一两次的小角色都统计出来了。
事实上作为一个菜的抠脚的新手,这一步想了我很多时间。
最后为了优化代码提高用户体验,将最后结果输出到一个txt文档中,方便转化为csv文件导入excel分析。
然后在excel里拉个图表来瞧瞧:
乾隆:魏璎珞同志,谁才是大猪蹄子呢?你一个人细分比朕和皇后加起来都多
可以看到,在原著中魏璎珞不愧是第一女主,其戏份比皇帝和皇后加起来还多。
其他戏份比较足的是明玉、慧贵妃、尔晴、纯妃、袁春望、太后这几个角色
其他角色有些虽然也比较重要,但是出场率显然不及前几位了。
那么,电视剧播出后,这几位的人气是否与他们的戏份是正相关的呢?
这里当然可以抓取开播以来的网络评论数据来检索关键词,不过为求简(tou)便(lan),这里直接用百度指数代替了:
其他角色相对这几位都太低了
尔晴:...你们这群渣渣,姐姐我才是人气明星!!!
閱讀更多 我用Python 的文章