上一篇,我们使用Python分析了《三国演义》中人物出现次数(罗贯中的《三国演义》中到底谁是主角?我们使用Python来分析一下),文中我们仅仅从人物出现次数,来推断出这部作品中的主角,当然,这样计算不太准确,我们不能从作品中人物出现次数多少来简单的断定这部作品的主角。但是我们通过这个小案例学习使用了Python的数据分析的常用方法。

数据分析很有用哦

今天,我们利用Python来分析一下《红楼梦》中贾宝玉和金陵十二钗的关系如何。不要跟我说你不知道金陵十二钗是谁,你肯定听说过金陵十三钗吧?但是金陵十三钗跟这十二钗是不一样的。千万别走开,下面的内容很精彩哦……

电视剧《红楼梦》剧照

【原理分析】

人类是个很神奇的动物,在网络中有这么一句话:“遇见一个人要一秒钟的时间,认识一个人要一分钟的时间,喜欢一个人要一小时的时间,爱上一个人要一天的时间,忘记一个人却要用一辈子的时间。”从相识、相知、相爱、相忘这整个过程,似乎就是人们之间关系由生疏到熟悉的过程。在这个过程中,少不了人与人之间的沟通、交流。在古代,比如,作品《红楼梦》诞生的那个年代,社交网络没有今天这么发达,人们之间沟通、交流(由生疏到熟悉),只能是面对面进行(没有网线哦)。

社交网络改变了我们交流渠道

大家知道,作为一种文学艺术表现形式,小说不可能像今天的电影这样,给人一种直观的视觉印象。小说不一样,小说中的场景是作者及小说的读者通过写作或者阅读在脑海中构造的场景,因此,这类再现的情景在不同的人脑海中存在的印象也可能不同。

读者通过文字感知小说的内容

我们如何理解小说作者想要表达的人物之间的感情及关系演进过程呢?我们只能透过文字,通过人物面对面沟通、交流(《红楼梦》中可能涉及较少)的场景,来分析人物之间的关系,这种关系,我们不论好坏,反映在小说当中,就是二者之间有无交集。准确的表达就是在小说同一个段落当中,如果两人或者两人以上同时出现,则这些人就产生一次交集。我们一般通过这种基于共现的方式来分析小说中的人物关系。

作者跟读者脑海的印象是不同的

社交网络中,有一个很出名的六度分割理论,简单来讲就是:”你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过六个人你就能够认识任何一个陌生人。“千万别走开,今天的分析结果中你可以验证这个六度分割理论,虽然古代没有网络,但是六度分割理论貌似也能适用。

【材料准备】

我们准备好Python编译环境,提前安装好jieba库、matplotlib库、networkx库,然后,自己下载一个《红楼梦》的txt文件。下面我们对这些库做一个简单的介绍。

jieba:常用分词库,安装好jieba库后,我们找到位置:E:\Python34\Lib\site-packages\jieba(我的Python是安装在E盘下的),这个目录下我们打开一个‘dict.txt’的文件,该文件是jieba定义的默认分词字典,然后使用文本编辑软件(最好不是记事本)打开该文件,在末尾加上下面几行:

宝玉 3 nr黛玉 3 nr宝钗 3 nr元春 3 nr探春 3 nr湘云 3 nr妙玉 3 nr迎春 3 nr惜春 3 nr熙凤 3 nr巧姐 3 nr李纨 3 nr可卿 3 nr

这样做的目的是提高分词效率,这样做比使用jieba库的load_userdict()更快,当数据量大时,这样做能节省几分钟时间哦,结论亲测……

matplotlib:这个不用多说了,绘图库,我们使用matplotlib实现关系图的可视化。

networkx:这个类库用于调用各种图算法的数据结构,在networkx中,图以对象的形式提供接口。简单来讲就是使用这个来创建我们的关系图,对于networkx的使用这里就不做赘述了,感兴趣的朋友们网上搜索,有很多资源可供学习。

【编码实现】

我们按照获取数据、清洗数据、数据分析、结果展示这四个步骤,对问题进行编码实现。定义四个函数,实现相应的功能,具体过程如下:

在开始之前,我们将《红楼梦》中的别称摘录下来存放在字典中,如下图所示。

贾宝玉和金陵十二钗的别称汇总

我们将人物名称做了规范,里面出现一次别称全部用二个字符的名字来代替。

第一步:获取数据

这一步相对来说较为简单,打开《红楼梦》文件,将文本结果返回即可。代码如下图所示。

打开《红楼梦》文件获取文本内容

这个简单,不解释了。

第二步:清洗数据

这一步,我们实现这么几个功能,将文本中人物别称用人物名字代替,然后去除文本中的标点符号,这样做便于后续分析时使用文本数据,提高分析效率。这一步中我们返回这么三个数据,提供给下一步分析使用。

nameNode:提供统计名字节点的数据

tempNames:将每一段中出现的所有名字作为列表添加到这个列表中

relationshipDic:存放人物之间关系权重的字典

具体代码如下图所示。

清洗文本并返回需要的数据

第三步:数据分析

我们将清洗数据获得的返回值传入函数中,得到每一个主角的关系权重,如下图所示。

进行分析后获得人物关系数据

下面我们对人物关系进行展示,这时候,我们要用到networkx库。第四步:结果展示

我们使用networkx绘制人物关系图,并通过matplotlib库进行展示。具体代码如下图所示。

生成关系图并展示结果

代码展示完毕,下面我们来看下结果,并进行分析。

【小说人物关系分析】

贾宝玉和金陵十二钗的关系图生成了,下面我们来看下结果,如下图所示。

贾宝玉和金陵十二钗关系图展示

从图中我们发现这么一些规律,越在图中央位置的人物,他与其他人物的联系越紧密,这种联系我们是通过每个人物之间的连线来展示的,在中间的话,他跟其他人的联系也越容易。显然,这个人物就是贾宝玉。我们再来看下位于图关系边缘的人物,秦可卿、妙玉、贾元春、巧姐、湘云、探春,这些人物处于边缘位置,与主人公的联系也不是很紧密。从结局我们知道,秦可卿最后病逝(也有说法是自缢),妙玉下落不明,元春失宠后死于宫斗,巧姐被刘姥姥赎出后嫁给板儿,湘云守寡,探春远嫁”和藩“,貌似结局都不是很好(当然,我们不是在分析结局)。而与主人公”见面“次数比较多的是黛玉、熙凤、宝钗这些人,而这些人也是我们所说的主角,这与作品描写的内容也是不谋而合的。

贾宝玉是《红楼梦》中主角

【总结】

好了,今天的内容就到这里了,感兴趣的朋友们亲自敲代码试一试哦,说不定你能分析出一些惊天的秘密呢?欢迎大家留言加关注,后续会推出使用Python分析关于四大名著的精彩内容,不要错过哦,文中分析不对的地方,欢迎大家留言指正。

转载请注明出处,百家号:Python高手养成

python红楼梦人物统计_基于共现使用Python来分析《红楼梦》中贾宝玉与金陵十二钗的关系...相关推荐

  1. python 分析人物关系_基于共现发现人物关系的python实现

    基于共现发现人物关系的python实现 1.共现关系 在文献计量学中,关键词的共词方法常用来确定该文献集所代表学科中各主题之间的关系.而在这里,我们需要通过分析一篇小说或剧本,来分析剧中各个角色之间的 ...

  2. python 嵌入式 linux 产品 发布_基于嵌入式Linux进行Python应用开发

    ByToradex秦海 1).简介 Python 编程语言因其极强的可读性.可移植.易于维护,以及丰富的第三方扩展组件,如数据库.数学计算.图形,甚至机器视觉.人工智能.深度学习框架都提供Python ...

  3. python文本热点问题挖掘_基于文本挖掘的网络热点舆情分析

    基于文本挖掘的网络热点舆情分析 罗怡薇,张科伟 [摘 要] 爬取豆瓣上的网络新闻热点,获取了相关文本数据,运用文本挖掘对 网络热点进行了分析,进而达到网络热点舆情分析.监测的目的. [期刊名称] 内蒙 ...

  4. 【转载】基于共现发现人物关系的python实现

    转载自:基于共现发现人物关系的python实现 作者:大邓[公众号:大邓和他的python] 本篇文章是阅读实验楼 Foerc的"python基于共现提取<釜山行>人物关系&qu ...

  5. Mysql出租车轨迹的分析_一种基于出租车轨迹数据的交通出行共现现象的可视化分析方法与流程...

    本发明涉及交通数据可视化领域,尤其涉及一种基于出租车轨迹数据的交通出行共现现象的可视化分析方法. 背景技术: :城市中人类移动规律中的共现现象是指来自两个区域的人们在同一个时间段内访问同一个城市区域. ...

  6. Mothur5进阶_Mothur扩增子基因序列分析_基于OTU或ASV的多样性指数分析

    本文主要讲解了使用Mothur软件对扩增子基因序列基于OTU或ASV进行多样性指数分析. 01文件名称的再处理 当比较早期和晚期样本时,最初的问题与这些样本的稳定性和群落结构的变化有关.组名是F或M( ...

  7. Mothur6进阶_Mothur扩增子基因序列分析_基于系统型phylogeny的多样性指数分析

    本文主要讲解了使用Mothur软件对扩增子基因序列进行基于系统型phylogeny的多样性指数分析,并提供了所有过程输出文件. OTU和基于Phylotype的分析是分类方法,取决于binning过程 ...

  8. python红楼梦人物统计_Python分析红楼梦,宝玉和十二钗的人物关系

    红楼梦出场人物很多,人物关系极其复杂,这次我们用Python来分析主人公贾宝玉和他的姐妹们,金陵十二钗之间的关系,做一个简要的分析. 出场率 由于我们只统计宝玉和十二钗(正册)这些人物,因此我们需要实 ...

  9. 基于共现发现人物关系的python实现+gephi人物关系网+tableau词云

    今天做的是小说人物关系图,小说是我最喜欢的一本,我看了好多遍,闲听落花的<盛华>. 共现:将每一段中的人物角色抽取出来,然后以段落为单位,统计两个角色同时出现的出现次数,并把结果存在一个二 ...

最新文章

  1. 继AutoML后,第四范式发布软硬一体化AI集成系统SageOne
  2. python3运行报错:TypeError: Object of type 'type' is not JSON serializable解决方法
  3. mysql一些操作个人备忘(持续更新)
  4. Hadoop集群完全分布式模式环境部署
  5. dw怎么做竖线_我花了5分钟,做了一份极“拉风”的PPT
  6. Error occurred while trying to proxy request
  7. 微软职位内部推荐-Software Development Engineer 2
  8. asp.net 的页面几种传值方式
  9. html圆角输入框内放大镜,如何用CSS制作一个圆形放大镜
  10. 吃不惯的川味麻辣×××
  11. 985硕士程序员年薪80万!邻居眼中不如一个老师?你怎么看?
  12. TCP-IP计算机网络基本概述
  13. 【30】GPU(上):为什么玩游戏需要使用GPU?
  14. jq 数字转中文数字_阿拉伯数字 转换 中文大写
  15. Dxf 3d模型素材推荐
  16. ArcMap 基于DEM的基础地形分析
  17. ASP初学者的一些基本代码
  18. 最后一英里物流市场现状研究分析-
  19. H5|小程序|RN页面适配iphoneX【异形屏幕|底部安全区域】
  20. yum软件仓库的配置详解

热门文章

  1. 肝肠轴——看不见的Crosstalk
  2. 学生学籍管理系统 java_学生学籍管理系统JAVA+SQL.docx
  3. 常用的IDEA插件,个个都是精品
  4. 中国科学院计算机专业职称,中国科学院关于高级工程师职务分级的意见
  5. 商业模式与盈利模式的区别
  6. windows基于TCP/IP的简单文件/图片传输
  7. 电脑上的计算机可以加密码,如何给电脑上的文件夹加密
  8. Jetpack Compose入门详解(实时更新)
  9. Halcon找圆系列(4)测量圆直径/半径的方法之暴力拟合法 vs 测量工具法
  10. 阿里云大数据助理工程师认证考试考什么内容?