原文连接
Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,本文是《用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      宝玉  3762
0        \r\n  3191
35682      贾母  1272
7738       凤姐  1192
34168      袭人  1134
40972      黛玉  1029
27448     王夫人  1015
13833      如今  1002
35130      说道   978
31820     老太太   974
29301      知道   973
36077      起来   955
14062      姑娘   949
7858       出来   932
4769       众人   872
821        一面   828
13305      太太   825
13686      奶奶   810
10094      只见   791
14774      宝钗   789
2211       两个   771
25441      没有   767
1737       不是   743
1828       不知   702
10940      听见   692
35734      贾琏   689
37195      进来   632
11053      告诉   605
2151       东西   603
16508      平儿   590
...       ...   ...
15894      屋里   286
37827     邢夫人   286
23866     林黛玉   278
15735      尤氏   277
39074      问道   275
28961      看见   271
14016      妹妹   270
1800       不用   265
9373       原来   258
40507      香菱   256
200        一句   255
15032      家里   254
1646       不得   254
248        一声   253
33649      薛蟠   253
14223      媳妇   249
8269       到底   247
36880     这会子   246
37178      进去   246
14033      姊妹   243
8129       别人   240
11753      回去   237
36611      过去   236
22448      明儿   236
21774      方才   233
40871      麝月   233
2446       丫鬟   233
37290      连忙   232
17554      心中   230
14200      婆子   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读红楼梦之——一、词云绘制相关推荐

  1. python红楼梦词云_用Python读红楼梦之——二、词云美化

    原文链接 咱们书接上回,讲到我们使用Python把红楼梦中的核心词汇给绘画出来了,但是,红楼梦这么唯美的书,给我们乌漆麻黑的搞了一张词云,宝宝们肯定接受不了. 我们先来找照片,这张照片不错,不过还是要 ...

  2. 用Python读红楼梦之——二、词云美化

    原文连接 咱们书接上回,讲到我们使用Python把红楼梦中的核心词汇给绘画出来了,但是,红楼梦这么唯美的书,给我们乌漆麻黑的搞了一张词云,宝宝们肯定接受不了. 我们先来找照片,这张照片不错,不过还是要 ...

  3. python红楼梦_用Python读红楼

    用Python读红楼 最近受到这篇文章用Python读金庸武侠的启发.作为古典文(zhuang)学(bi)青年,一定要用Python来试试我读了20年的<红楼梦>. 首先从网上找到了红楼梦 ...

  4. python分析红楼梦出现的虚词词频统计,python对红楼梦的每一章节进行词频统计

    python对红楼梦的每一章节进行词频统计 python对红楼梦的每一章节进行词频统计 import jieba f=open("G:\\红楼梦.txt","r" ...

  5. python对红楼梦的每一章节进行词频统计

    python对红楼梦的每一章节进行词频统计 import jieba f=open("G:\\红楼梦.txt","r",encoding="utf-8 ...

  6. python词频统计完整步骤_Python中文文本分词、词频统计、词云绘制

    本文主要从中文文本分词.词频统计.词云绘制方面介绍Python中文文本分词的使用.会使用到的中文文本处理包包括:wordcloud,jieba,re(正则表达式),collections. 1 准备工 ...

  7. python爬取微博数据词云_用Python爬取微博数据生成词云图片

    原标题:用Python爬取微博数据生成词云图片 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数 ...

  8. 基于Python的特定形状透明背景词云图绘制

    基于Python的特定形状透明背景词云图绘制 1.需求分析 2.前期准备 2.1文本文件准备 2.2特定形状图片准备 3.代码解析与实现 3.1模块库的导入 3.2停用词表 3.3基于TF-IDF提取 ...

  9. python制作词云时出现figure1 figure2_「中文版」如何在Python中生成任何形状的词云...

    有机会介绍一些有趣的项目,向更多人甚至是非技术人员推广Python和人工智能的东西还是蛮有意义的.话不多说,本文将介绍如何将你喜欢的文章或者歌词做一个炫丽的词云图片. 什么是词云呢?简单来说就是,将提 ...

最新文章

  1. usaco Sweet Butter(迪杰斯特拉(优先队列优化),bellman_ford算法模板)
  2. File ipython-input-20-ac8d4b51998e
  3. Cpp 对象模型探索 / 继承关系下的虚函数手动调用
  4. python主线程有两个子线程、创建两个主函数_Python多任务之线程
  5. Python的threadpool模块
  6. 基于swiper和Less的小米商城
  7. MySQL 在指定位置新增字段
  8. 方法调用_thinkphp跨模块调用方法
  9. 注意力稀缺的时代,写作软件如何选择?
  10. 计算机双机对连局域网,图解双机/多机无线互联技巧_局域网教程
  11. java中isa什么意思_aiisa是什么意思?
  12. 1317: PIPI的生日礼物
  13. \xmemory(102): error C4996: 'std::uninitialized_copy::_Unchecked_iterators::_Deprecate':
  14. 构建一个 CLI 工具
  15. mac系统+frida 简单测试真机or genymotion模拟器
  16. 制造并批量生产现实版“储物戒指”
  17. 反编译之脱去乐固加固的壳
  18. 无需电脑的多平台推流编码器
  19. NV12与YV12,YUV的主要格式
  20. Fruits 360 基于CNN实现果蔬识别系统

热门文章

  1. 解释RIP协议为什么会有“好消息传得快,坏消息传得慢。”的现象?(解释超详细)
  2. 泛泰binx一键式离线刷机(可断网刷机,可刷任意版本)(官网脚本更新7.30)
  3. word字号选项设置为中文字号
  4. 使用man命令,出现 ”No manual entry for” 的解决办法
  5. 大胆冲数学建模勘误表
  6. 英文破折号、连接号、连字符、负号的区别,注意事项和输入方法
  7. 09年电子商务格局的个人臆断
  8. 《Spring响应式微服务》读书笔记
  9. linux中安装openoffice,及解决转pdf时中文乱码或者中文不显示问题【离线】
  10. 在vue项目中千分位展示输入金额,获取金额千分位,金额大写的方法