文档章节

用Python绘制红楼梦词云图,竟然发现了这个!

猫咪编程
 猫咪编程
发布于 2018/07/23 00:31
字数 1560
阅读 82
收藏 12

Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,绘制小说中的词云。

首先当然要导入我们需要用到的包,下面import进来的包,都是我们将在接下来的程序中使用到的包,如果大家还没有安装它们,那么尽快安装它们吧。

import jieba

import numpy

import codecs

import pandas

import matplotlib.pyplot as plt

from wordcloud import WordCloud

接着,要分析词频,就要读取我们的《红楼梦》的文本数据,读取文本,我建议使用codecs包,它可以先通过设置文件的编码,对文件进行读入,这样子就不用边读遍转码了,非常实用。

file = codecs.open("D:\\红楼梦.txt", 'r', 'utf-8')

content = file.read()

file.close()

然后,我们就来分词了,中文分词,当然要用大名鼎鼎的jieba包,下面就是分词的方法。

这里我们需要注意两点:

1、为了提高分词的准确度,我们最好寻找我们分词的词库,这里我下载到了红楼梦的分词库,加载如jieba中,然后再进行分词。

2、对于小说中,一个字的词,基本上算是无用的词,或者说是标点符号,因此这里我直接抛弃了。

jieba.load_userdict('D:\\红楼梦词库.txt');

segments = []

segs = jieba.cut(content)

for seg in segs:

if len(seg)>1:

segments.append(seg);

为了方便统计词频,我们把结果保存在pandas的DataFrame中。

segmentDF = pandas.DataFrame({'segment':segments})

接着我们来移除停用词,停用词包括我们日常的停用词和文言文中的停用词两部分,如下所示:

#移除停用词

stopwords = pandas.read_csv(

"D:\\StopwordsCN.txt",

encoding='utf8',

index_col=False,

quoting=3,

sep="\t"

)

segmentDF = segmentDF[~segmentDF.segment.isin(stopwords.stopword)]

wyStopWords = pandas.Series([

# 42 个文言虚词

'之', '其', '或', '亦', '方', '于', '即', '皆', '因', '仍', '故',

'尚', '呢', '了', '的', '着', '一', '不', '乃', '呀', '吗', '咧',

'啊', '把', '让', '向', '往', '是', '在', '越', '再', '更', '比',

'很', '偏', '别', '好', '可', '便', '就', '但', '儿',

# 高频副词

'又', '也', '都', '要',

# 高频代词

'这', '那', '你', '我', '他',

#高频动词

'来', '去', '道', '笑', '说',

#空格

' ', ''

]);

segmentDF = segmentDF[~segmentDF.segment.isin(wyStopWords)]

从上面的代码我们可以看到,pandas对数据的处理,真的是非常方便,更加方便的还在下面,我们接着来对词频进行统计。

segStat = segmentDF.groupby(

by=["segment"]

)["segment"].agg({

"计数":numpy.size

}).reset_index().sort(

columns=["计数"],

ascending=False

);

segStat.head(100)

到这里,我们基本上可以得到词频了,观察一下下面的词频,贾宝玉当然当之无愧是主角,出现次数基本和换行符一致,哈哈,但是出乎意料的是,贾母,竟然是第二,其实这也难怪,红楼梦,哪个场景没有涉及到贾母的?贾宝玉玩完后,都说要到贾母那里请安或者吃饭的,情理之中。有此可见,最佳女配角,非贾母莫属了。

细心的读者可能也发现了,林黛玉出现的次数,竟然还排在了袭人的后面,其实笔者仔细一想,一点也不奇怪。

首先第一个,林黛玉挂得早,挂得早,出现的次数自然就没有那么多了。

还有另外一个原因,不知道看官们注意到不,贾宝玉和女生滚床单,第一个就是袭人(当然秦可卿是不算的,那纯属是贾宝玉自己梦中YY的),因此,你们懂的。如果大家对贾宝玉的私生活感兴趣,可以看这篇文章《贾宝玉到底和多少人发生过性关系?》

最后要告诉大家的是,黛玉只是林黛玉的昵称,加上妹妹(只是不知道贾宝玉有多少个妹妹咯)和连名带姓的林黛玉的词频,也是超越了袭人的,因此,红楼梦符合广电总局的规定——小三是不能上位的。

segment 计数

{{14760:0}} 宝玉 3762

{{35682:0}} 贾母 1272

7738 凤姐 1192

{{34168:0}} 袭人 1134

{{40972:0}} 黛玉 1029

{{27448:0}} 王夫人 1015

{{13833:0}} 如今 1002

{{35130:0}} 说道 978

{{31820:0}} 老太太 974

{{29301:0}} 知道 973

{{36077:0}} 起来 955

{{14062:0}} 姑娘 949

7858 出来 932

4769 众人 872

821 一面 828

{{13305:0}} 太太 825

{{13686:0}} 奶奶 810

{{10094:0}} 只见 791

{{14774:0}} 宝钗 789

2211 两个 771

{{25441:0}} 没有 767

1737 不是 743

1828 不知 702

{{10940:0}} 听见 692

{{35734:0}} 贾琏 689

{{37195:0}} 进来 632

{{11053:0}} 告诉 605

2151 东西 603

{{16508:0}} 平儿 590

... ... ...

{{15894:0}} 屋里 286

{{37827:0}} 邢夫人 286

{{23866:0}} 林黛玉 278

{{15735:0}} 尤氏 277

{{39074:0}} 问道 275

{{28961:0}} 看见 271

{{14016:0}} 妹妹 270

1800 不用 265

9373 原来 258

{{40507:0}} 香菱 256

200 一句 255

{{15032:0}} 家里 254

1646 不得 254

248 一声 253

{{33649:0}} 薛蟠 253

{{14223:0}} 媳妇 249

8269 到底 247

{{36880:0}} 这会子 246

{{37178:0}} 进去 246

{{14033:0}} 姊妹 243

8129 别人 240

{{11753:0}} 回去 237

{{36611:0}} 过去 236

{{22448:0}} 明儿 236

{{21774:0}} 方才 233

{{40871:0}} 麝月 233

2446 丫鬟 233

{{37290:0}} 连忙 232

{{17554:0}} 心中 230

{{14200:0}} 婆子 225

为了更加方便地观察数据,我们使用词云的工具,来绘制词云,通过词云,我们可以更加方便简单地查看词频。

#绘画词云

wordcloud = WordCloud(

font_path='D:\\simhei.ttf',

background_color="black"

)

plt.figure(num=None, figsize=(1000, 600), dpi=800, facecolor='w', edgecolor='k')

wordcloud = wordcloud.fit_words(segStat.head(1000).itertuples(index=False))

plt.imshow(wordcloud)

plt.close()

好了,这个就是用Python绘制红楼梦词云的结果,你发现了什么玄机没有?我有一个微信公众号,经常会分享一些python技术相关的干货;如果你喜欢我的分享,可以用微信搜索“python语言学习” 

关注。欢迎大家加入千人交流答疑裙:699+749+852

© 著作权归作者所有

共有 人打赏支持
猫咪编程
粉丝 8
博文 28
码字总数 41050
作品 0
石家庄
私信 提问
PythonSNs(3)---qq群聊天记录词云分析

通过制作词云,了解到了等库,能快速实现很多功能,比如制作一个QQ群聊天记录词云…… 工具:PyCharm, Python3.6.5 1.首先第一步是获取到聊天记录的txt文件 要用.txt导出到任意盘符,接下来就...

Mr_Wanggq
2018/05/17
0
0
测试python--绘制天龙八部词云图

应用场景 python封装了很多算法,工具,使用起来非常的方便,它涉及各行各业,比如医疗,生物,数学,计算机,人工智能等,我们不需要使用它的全部,只需要使用我们所需要的一些,可以使代码...

wsc449
2017/11/22
0
0
python 爬取视频评论生成词云图

首先爬取评论写入文件,用上一篇爬取腾讯是视频的评论的方法提取评论http://blog.51cto.com/superleedo/2126099 代码需要稍作修改如下: #!/usr/bin/env python -- coding: utf-8 -- import...

super李导
2018/06/09
0
0
【原创】python词云分析陈粒和赵雷

未经同意禁止转载,否则通过维权骑士追究 【完整源代码请点击 此处 留言以获取,可以顺便给颗Star😄】 记录一个练习小项目,训练一下python分析技能。用到的知识有“爬虫”、“jieba分词”...

_SoLo_
2018/06/30
0
0
基于python的词云生成(一)

基于python的词云生成(一) 1.背景    前段时间网络中出现很多关于很多文字组成的图片,生成的图片看起来还是挺有意思,这里使用python做出词云图片。其中需要解释的是:词云又叫文字云,...

meiqi0538
2018/03/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Temp-Memo

Recommended Ref : SQL High CPU troubleshooting checklist -- Top 50 SQL highly consuming cpuSELECT TOP 50[Avg. MultiCore/CPU time(sec)] = qs.total_worker_time / 1000000 / qs......

Goopand
25分钟前
1
0
dotConnect for Oracle入门指南(七):存储过程

【下载dotConnect for Oracle最新版本】 dotConnect for Oracle(原名OraDirect.NET)建立在ADO.NET技术上,为基于Oracle数据库的应用程序提供完整的解决方案。它为设计应用程序结构带来了新的...

电池盒
27分钟前
2
0
如何使用阿里云ARMS轻松重现用户浏览器问题

客户投诉不断,本地却无法重现? 页面加载较慢是用户经常会反馈的问题,也是前端非常关注的问题之一。但定位、排查解决这类问题就通常会花费非常多的时间,主要原因如下: 页面是在用户端的浏...

阿里云官方博客
30分钟前
1
0
因资源用尽导致服务宕机

1. 事故的发生 服务调用场景和发生的事件如下图所示,红色表示服务不可用. 服务A和服务B都是内部服务,服务C_*为不同运营商提供的服务,遵循一样的协议。 某一天,突然发现所有服务A调用服务...

北风刮的不认真了
35分钟前
3
0
锤子科技"临死前"被"接盘" ,内部人士爆料已改签今日头条母公司

就在昨天,据据锤子科技内部人士透露,部分锤子科技员工在昨天已经接到了相关的临时通知,要求改签劳动合同至今日头条的母公司——字节跳动。至于这是锤子科技真正再度复活还是借尸还魂都不重...

终端研发部
44分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部