题目源自编程教室的“每周一坑”栏目:【每周一坑】三国演义中谁的存在感最强 本文是一位同学(王文亚)提交的解答,因为做得挺好,特转载至专栏,供各位参考。更多练习题可以在公众号(Crossin 的编程教室)里回复关键字 习题
主要任务
找出《三国演义》中名字出现最多的 10 人;
分析主要几个人物 120 回中,每回出现的次数,结合具体内容,看发生了什么;
分析人物之间的关系,利用 Gephi 简单绘图;
绘制“逐”字词云。
准备工作
1. 由于要分析 120 回中主要人物的出场次数,爬取《三国演义》120 回,每回放在一个段落里;len(f.readlines()) = 120. 2. 安装主要的 python 库,如 jieba,wordcloud,pandas,codecs,matplotlib,pyecharts,bs4 等,还有 Gephi;
开始工作
1. 首先是获取分成 120 回每回一行的文件;url=http://www.purepen.com/sgyy/ 根据规律爬出 120 回;
2. 找到次数最多的 nr(人名) 词语;函数 findMostWords, 逐词查看,长度小于 2 的自动过滤,按照出现次数排序,写入到文件中,大约是长这个样子的 …
3. 根据找到的词语排序,大约有 7238 个词汇,然后手动选取超过出现 20 次以上的词语,大约 200 条,剔除一些非人名,如“曹兵”等,最终得到 52 个词; [‘ 曹操 ’, ‘ 玄德 ’, ‘ 孔明 ’, ‘ 关公 ’, ‘ 丞相 ’, ‘ 孔明曰 ’, ‘ 玄德曰 ’, ‘ 云长 ’, ‘ 张飞 ’, ‘ 主公 ’,’ 吕布 ’, ‘ 刘备 ’, ‘ 孙权 ’, ‘ 赵云 ’, ‘ 司马懿 ’, ‘ 周瑜 ’, ‘ 魏延 ’, ‘ 袁绍 ’, ‘ 马超 ’, ‘ 姜维 ’, ‘ 黄忠 ’, ‘ 诸葛亮 ’, ‘ 庞德 ’, ‘ 张辽 ’, ‘ 刘表 ’, ‘ 董卓 ’, ‘ 孙策 ’, ‘ 鲁肃 ’, ‘ 邓艾 ’, ‘ 大将军 ’, ‘ 张苞 ’, ‘ 袁术 ’, ‘ 刘玄德 ’, ‘ 玄德大 ’, ‘ 子龙 ’, ‘ 司马 ’, ‘ 孔明笑 ’, ‘ 公瑾 ’, ‘ 操大喜 ’, ‘ 翼德 ’, ‘ 刘皇叔 ’, ‘ 赵子龙 ’, ‘ 郭嘉 ’, ‘ 仲达 ’, ‘ 关云长 ’,’ 操大怒 ’, ‘ 玄德问 ’, ‘ 阿斗 ’, ‘ 刘豫州 ’, ‘ 玄德闻 ’, ‘ 玄德乃 ’, ‘ 曹丞相 ’]
4. 逐词匹配上述的 52 个词,得到 52 个词分别出现的次数;
5. 整理上述 52 个词汇,将玄德曰,玄德怒,玄德乃,刘皇叔等词汇合并,绘制 Top10;
6. 根据上述 52 个词汇,分别分析每一回,利用 pandas.DataFrame 很方便得到每回 52 个人分别出现的次数;
表格中有大量的空白,后续使用,需要将空白填充 0,DataFrame.fillna(0, inplace=True)
7. 绘制一些简单的图;蜀国主要人物全书分布情况,三位结拜兄弟贯穿前 80 回左右,等他们退出历史舞台,诸葛亮继续辅佐,支撑着蜀国大业。
诸葛亮在 35-40, 80-100 回出现了较多次数,自然是“三顾茅庐”、“火烧七百里联营”、“巧布八阵图”、“七擒孟获”等较为熟知的历史故事;同时,80 回后诸葛亮出现次数占据了全书中较大范围,也是“先帝托孤”后“鞠躬尽瘁”的具体表现。
四位当权者曹操、刘备、孙权、司马懿活动活度,前 80 回,曹刘孙较为活跃,体现出了三国纷争的局面,读这一部分,厮杀场面也是相当精彩;待三位同时代的人物退出历史舞台后,逐渐司马懿开始活跃,“一统秦两汉,三分魏蜀吴,两晋前后延”,历史朝代更替,滚滚向前。
分析数据的能力还优待提高,想不出较好的分析的内容,还需多写、多与人沟通交流,提升对数据的认识。8. 分析人物之间的关系。根据全文 2700 多个自然段,如果一个自然段内同时出现了 A 和 B,将 A 和 B 之间的关系 +1;得到 Node 和 Edge 两份 csv 文件,输入到 Gephi,得到以下关系图,故事还是围绕这曹刘的纷争开展,诸葛亮的经纬之才也体现的淋漓尽致。
9. 词云制作;PS 做了一张图,制作词云。根据各种曰可知书中的对话部分占据了很大一部分章节,读者读起来也更有代入感,身临其境。
真正自己去做的时候,才能一次次填补自己的坑。哈哈哈,加油!
*
作者:王文亚
项目地址:
https://github.com/Damon0626/Crossin-Programming-Room/tree/master/09-Analysis%20The%20Three%20Kingdoms
════
其他文章及回答:
如何自学 Python | 新手引导 | 精选 Python 问答 | Python 单词表 | 人工智能 | 爬虫 | 我用 Python | requests | 计算机视觉
欢迎搜索及关注公众号:Crossin 的编程教室